From d41b207cc5635ce3cf39ebdd96d9cb244785d6b8 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Wed, 19 Jun 2019 10:44:03 +0200 Subject: [PATCH] Fixed websockets in IE11. Bleep you, MS. -_- --- lib/websocket.cpp | 12 ++++++++---- src/output/output_http.cpp | 6 +++++- src/output/output_http_internal.cpp | 4 +++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/websocket.cpp b/lib/websocket.cpp index 187d8d59..6df6515c 100644 --- a/lib/websocket.cpp +++ b/lib/websocket.cpp @@ -11,15 +11,19 @@ namespace HTTP{ Websocket::Websocket(Socket::Connection &c, HTTP::Parser &h) : C(c), H(h){ frameType = 0; - if (H.GetHeader("Connection").find("Upgrade") == std::string::npos){ + std::string connHeader = H.GetHeader("Connection"); + Util::stringToLower(connHeader); + if (connHeader.find("upgrade") == std::string::npos){ FAIL_MSG("Could not negotiate websocket, connection header incorrect (%s).", - H.GetHeader("Connection").c_str()); + connHeader.c_str()); C.close(); return; } - if (H.GetHeader("Upgrade") != "websocket"){ + std::string upgradeHeader = H.GetHeader("Upgrade"); + Util::stringToLower(upgradeHeader); + if (upgradeHeader != "websocket"){ FAIL_MSG("Could not negotiate websocket, upgrade header incorrect (%s).", - H.GetHeader("Upgrade").c_str()); + upgradeHeader.c_str()); C.close(); return; } diff --git a/src/output/output_http.cpp b/src/output/output_http.cpp index 02ee1451..061a7d43 100644 --- a/src/output/output_http.cpp +++ b/src/output/output_http.cpp @@ -210,6 +210,8 @@ namespace Mist { myConn.close(); return; } + std::string connHeader = H.GetHeader("Connection"); + Util::stringToLower(connHeader); if (handler != capa["name"].asStringRef() || H.GetVar("stream") != streamName){ MEDIUM_MSG("Switching from %s (%s) to %s (%s)", capa["name"].asStringRef().c_str(), streamName.c_str(), handler.c_str(), H.GetVar("stream").c_str()); streamName = H.GetVar("stream"); @@ -265,7 +267,9 @@ namespace Mist { } } //Handle upgrade to websocket if the output supports it - if (doesWebsockets() && H.GetHeader("Upgrade") == "websocket"){ + std::string upgradeHeader = H.GetHeader("Upgrade"); + Util::stringToLower(upgradeHeader); + if (doesWebsockets() && upgradeHeader == "websocket"){ INFO_MSG("Switching to Websocket mode"); setBlocking(false); preWebsocketConnect(); diff --git a/src/output/output_http_internal.cpp b/src/output/output_http_internal.cpp index ea7a74f6..9225dc0a 100644 --- a/src/output/output_http_internal.cpp +++ b/src/output/output_http_internal.cpp @@ -857,7 +857,9 @@ namespace Mist { if (!useragent.size()){ useragent = H.GetHeader("User-Agent"); } - if (H.GetHeader("Upgrade") != "websocket"){return false;} + std::string upgradeHeader = H.GetHeader("Upgrade"); + Util::stringToLower(upgradeHeader); + if (upgradeHeader != "websocket"){return false;} HTTP::Websocket ws(myConn, H); if (!ws){return false;} setBlocking(false);