diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 590b0719..2e50ebb0 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -219,9 +219,11 @@ namespace proxy { /* replace headers */ req.UpdateHeader("User-Agent", "MYOB/6.66 (AN/ON)"); /* add headers */ + /* close connection, if not Connection: (U|u)pgrade (for websocket) */ auto h = req.GetHeader ("Connection"); - if (h.find("upgrade") == std::string::npos && h.find("Upgrade") == std::string::npos) - req.UpdateHeader("Connection", "close"); /* close everything, except websocket */ + auto x = h.find("pgrade"); + if (!(x != std::string::npos && std::tolower(h[x - 1]) == 'u')) + req.UpdateHeader("Connection", "close"); } /** diff --git a/libi2pd_client/I2PTunnel.cpp b/libi2pd_client/I2PTunnel.cpp index 1cb47cb3..65600cf8 100644 --- a/libi2pd_client/I2PTunnel.cpp +++ b/libi2pd_client/I2PTunnel.cpp @@ -256,10 +256,12 @@ namespace client { if (!m_ConnectionSent && !line.compare(0, 10, "Connection")) { - if (line.find("upgrade") == std::string::npos && line.find("Upgrade") == std::string::npos) - m_OutHeader << "Connection: close\r\n"; /* close everything, except websocket */ - else + /* close connection, if not Connection: (U|u)pgrade (for websocket) */ + auto x = line.find("pgrade"); + if (x != std::string::npos && std::tolower(line[x - 1]) == 'u') m_OutHeader << line << "\r\n"; + else + m_OutHeader << "Connection: close\r\n"; m_ConnectionSent = true; }