From f617b2711056aad39a742fa28b2adbb22955eb0c Mon Sep 17 00:00:00 2001 From: l-n-s Date: Mon, 11 Feb 2019 17:18:01 -0500 Subject: [PATCH] Support websocket connections over HTTP proxy --- libi2pd_client/HTTPProxy.cpp | 4 +++- libi2pd_client/I2PTunnel.cpp | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index e54ccda5..590b0719 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -219,7 +219,9 @@ namespace proxy { /* replace headers */ req.UpdateHeader("User-Agent", "MYOB/6.66 (AN/ON)"); /* add headers */ - req.UpdateHeader("Connection", "close"); /* keep-alive conns not supported yet */ + 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 */ } /** diff --git a/libi2pd_client/I2PTunnel.cpp b/libi2pd_client/I2PTunnel.cpp index 975cc4ce..1cb47cb3 100644 --- a/libi2pd_client/I2PTunnel.cpp +++ b/libi2pd_client/I2PTunnel.cpp @@ -256,7 +256,11 @@ namespace client { if (!m_ConnectionSent && !line.compare(0, 10, "Connection")) { - m_OutHeader << "Connection: close\r\n"; + if (line.find("upgrade") == std::string::npos && line.find("Upgrade") == std::string::npos) + m_OutHeader << "Connection: close\r\n"; /* close everything, except websocket */ + else + m_OutHeader << line << "\r\n"; + m_ConnectionSent = true; } else if (!m_ProxyConnectionSent && !line.compare(0, 16, "Proxy-Connection"))