From f06c8710be43440526c487400aa5c681d30172ad Mon Sep 17 00:00:00 2001 From: yangfl Date: Sat, 31 Mar 2018 14:56:45 +0800 Subject: [PATCH 01/17] fix systemd service type --- contrib/i2pd.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/i2pd.service b/contrib/i2pd.service index 9af96c37..ecfb4e20 100644 --- a/contrib/i2pd.service +++ b/contrib/i2pd.service @@ -10,7 +10,7 @@ RuntimeDirectory=i2pd RuntimeDirectoryMode=0700 LogsDirectory=i2pd LogsDirectoryMode=0700 -Type=simple +Type=fork ExecStart=/usr/sbin/i2pd --conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf --pidfile=/var/run/i2pd/i2pd.pid --logfile=/var/log/i2pd/i2pd.log --daemon --service ExecReload=/bin/kill -HUP $MAINPID PIDFile=/var/run/i2pd/i2pd.pid From c0436297c2e8f4d3fad2b7658b99b81c150a74df Mon Sep 17 00:00:00 2001 From: yangfl Date: Sun, 1 Apr 2018 22:57:51 +0800 Subject: [PATCH 02/17] fix typo in systemd service type --- contrib/i2pd.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/i2pd.service b/contrib/i2pd.service index ecfb4e20..3f53bfb8 100644 --- a/contrib/i2pd.service +++ b/contrib/i2pd.service @@ -10,7 +10,7 @@ RuntimeDirectory=i2pd RuntimeDirectoryMode=0700 LogsDirectory=i2pd LogsDirectoryMode=0700 -Type=fork +Type=forking ExecStart=/usr/sbin/i2pd --conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf --pidfile=/var/run/i2pd/i2pd.pid --logfile=/var/log/i2pd/i2pd.log --daemon --service ExecReload=/bin/kill -HUP $MAINPID PIDFile=/var/run/i2pd/i2pd.pid From e80da3cbeba3fd37c25637409b93e9c00dc3fcbf Mon Sep 17 00:00:00 2001 From: Hypnosis-mewmew Date: Thu, 5 Apr 2018 15:40:44 +0800 Subject: [PATCH 03/17] fixes for i2pd_qt MSYS2 mingw32 --- libi2pd/RouterContext.h | 5 +++++ libi2pd/RouterInfo.h | 5 +++++ qt/i2pd_qt/i2pd_qt.pro | 10 ++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/libi2pd/RouterContext.h b/libi2pd/RouterContext.h index 4bd324f5..9f42b1e0 100644 --- a/libi2pd/RouterContext.h +++ b/libi2pd/RouterContext.h @@ -1,6 +1,11 @@ #ifndef ROUTER_CONTEXT_H__ #define ROUTER_CONTEXT_H__ +// i2pd_qt.pro defines this on Windows +#ifdef WINDOWS +#include +#endif + #include #include #include diff --git a/libi2pd/RouterInfo.h b/libi2pd/RouterInfo.h index 09e2c015..09db6ee8 100644 --- a/libi2pd/RouterInfo.h +++ b/libi2pd/RouterInfo.h @@ -1,6 +1,11 @@ #ifndef ROUTER_INFO_H__ #define ROUTER_INFO_H__ +// i2pd_qt.pro defines this on Windows +#ifdef WINDOWS +#include +#endif + #include #include #include diff --git a/qt/i2pd_qt/i2pd_qt.pro b/qt/i2pd_qt/i2pd_qt.pro index a2ba4261..941dfff3 100644 --- a/qt/i2pd_qt/i2pd_qt.pro +++ b/qt/i2pd_qt/i2pd_qt.pro @@ -268,8 +268,14 @@ android { } linux:!android { - message("Using Linux settings") - LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc + message("Using Linux settings") + LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc +} + +windows:!android { + message("Using Windows settings") + DEFINES += BOOST_USE_WINDOWS_H WINDOWS + LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc } !android:!symbian:!maemo5:!simulator { From f4056e57bb37aee6609aafafd5d33b752e19afb2 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 5 Apr 2018 07:16:41 -0400 Subject: [PATCH 04/17] rollback --- libi2pd/RouterContext.h | 5 ----- libi2pd/RouterInfo.h | 5 ----- 2 files changed, 10 deletions(-) diff --git a/libi2pd/RouterContext.h b/libi2pd/RouterContext.h index 9f42b1e0..4bd324f5 100644 --- a/libi2pd/RouterContext.h +++ b/libi2pd/RouterContext.h @@ -1,11 +1,6 @@ #ifndef ROUTER_CONTEXT_H__ #define ROUTER_CONTEXT_H__ -// i2pd_qt.pro defines this on Windows -#ifdef WINDOWS -#include -#endif - #include #include #include diff --git a/libi2pd/RouterInfo.h b/libi2pd/RouterInfo.h index 09db6ee8..09e2c015 100644 --- a/libi2pd/RouterInfo.h +++ b/libi2pd/RouterInfo.h @@ -1,11 +1,6 @@ #ifndef ROUTER_INFO_H__ #define ROUTER_INFO_H__ -// i2pd_qt.pro defines this on Windows -#ifdef WINDOWS -#include -#endif - #include #include #include From 2cb6283d004b37c145cfd08e8a1a1521651e7868 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 6 Apr 2018 15:23:56 -0400 Subject: [PATCH 05/17] outproxy authorization --- libi2pd/Base.cpp | 15 +++++++++++++++ libi2pd/Base.h | 9 ++++++--- libi2pd_client/HTTPProxy.cpp | 18 +++++++++++++++--- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/libi2pd/Base.cpp b/libi2pd/Base.cpp index 09f04c05..f80f2751 100644 --- a/libi2pd/Base.cpp +++ b/libi2pd/Base.cpp @@ -210,6 +210,21 @@ namespace data return 4*d.quot; } + std::string ToBase64Standard (const std::string& in) + { + auto len = Base64EncodingBufferSize (in.length ()); + char * str = new char[len+1]; + auto l = ByteStreamToBase64 ((const uint8_t *)in.c_str (), in.length (), str, len); + str[l] = 0; + // replace '-' by '+' and '~' by '/' + for (size_t i = 0; i < l; i++) + if (str[i] == '-') str[i] = '+'; + else if (str[i] == '~') str[i] = '/'; + std::string s(str); + delete[] str; + return s; + } + /* * * iT64 diff --git a/libi2pd/Base.h b/libi2pd/Base.h index bc92376f..a273f468 100644 --- a/libi2pd/Base.h +++ b/libi2pd/Base.h @@ -15,10 +15,13 @@ namespace data { size_t Base32ToByteStream (const char * inBuf, size_t len, uint8_t * outBuf, size_t outLen); size_t ByteStreamToBase32 (const uint8_t * InBuf, size_t len, char * outBuf, size_t outLen); - /** + /** Compute the size for a buffer to contain encoded base64 given that the size of the input is input_size bytes - */ - size_t Base64EncodingBufferSize(const size_t input_size); + */ + size_t Base64EncodingBufferSize(const size_t input_size); + + std::string ToBase64Standard (const std::string& in); // using standard table, for Proxy-Authorization + } // data } // i2p diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index ac5d907d..47f756d3 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -389,11 +389,19 @@ namespace proxy { m_ClientRequestURL.host = ""; m_ClientRequest.uri = m_ClientRequestURL.to_string(); + if (m_ProxyURL.schema == "http" && (!m_ProxyURL.user.empty () || !m_ProxyURL.pass.empty ())) + { + // http proxy authorization + std::string s = "basic " + i2p::data::ToBase64Standard (m_ProxyURL.user + ":" + m_ProxyURL.pass); + m_ClientRequest.AddHeader("Proxy-Authorization", s); + } + m_ClientRequest.write(m_ClientRequestBuffer); m_ClientRequestBuffer << m_recv_buf.substr(m_req_len); // assume http if empty schema - if (m_ProxyURL.schema == "" || m_ProxyURL.schema == "http") { + if (m_ProxyURL.schema == "" || m_ProxyURL.schema == "http") + { // handle upstream http proxy if (!m_ProxyURL.port) m_ProxyURL.port = 80; if (m_ProxyURL.is_i2p()) @@ -409,14 +417,18 @@ namespace proxy { m_proxysock->async_connect(ep, std::bind(&HTTPReqHandler::HandleUpstreamHTTPProxyConnect, this, std::placeholders::_1)); })); } - } else if (m_ProxyURL.schema == "socks") { + } + else if (m_ProxyURL.schema == "socks") + { // handle upstream socks proxy if (!m_ProxyURL.port) m_ProxyURL.port = 9050; // default to tor default if not specified boost::asio::ip::tcp::resolver::query q(m_ProxyURL.host, std::to_string(m_ProxyURL.port)); m_proxy_resolver.async_resolve(q, std::bind(&HTTPReqHandler::HandleUpstreamProxyResolved, this, std::placeholders::_1, std::placeholders::_2, [&](boost::asio::ip::tcp::endpoint ep) { m_proxysock->async_connect(ep, std::bind(&HTTPReqHandler::HandleUpstreamSocksProxyConnect, this, std::placeholders::_1)); })); - } else { + } + else + { // unknown type, complain GenericProxyError("unknown outproxy url", m_ProxyURL.to_string().c_str()); } From ff4e254618a2724a23f316c1ad8c5257640cadc5 Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 11 Apr 2018 10:30:13 -0400 Subject: [PATCH 06/17] 0.9.34 --- libi2pd/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libi2pd/version.h b/libi2pd/version.h index 36e7eb6e..e0443415 100644 --- a/libi2pd/version.h +++ b/libi2pd/version.h @@ -21,7 +21,7 @@ #define I2P_VERSION_MAJOR 0 #define I2P_VERSION_MINOR 9 -#define I2P_VERSION_MICRO 33 +#define I2P_VERSION_MICRO 34 #define I2P_VERSION_PATCH 0 #define I2P_VERSION MAKE_VERSION(I2P_VERSION_MAJOR, I2P_VERSION_MINOR, I2P_VERSION_MICRO) From 82534eef1216510eea7e4e5ede9c27d2099953f0 Mon Sep 17 00:00:00 2001 From: R4SAS Date: Wed, 11 Apr 2018 20:58:21 +0300 Subject: [PATCH 07/17] try fix appveyor build --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index f663c86a..68b74529 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -17,7 +17,7 @@ environment: - MSYSTEM: MINGW32 install: -- c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Rns gcc-fortran gcc catgets" +- c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Rns gcc-fortran gcc" - c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Syuu " - c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Syuu" From 855cc9ed83b0cfb8a6efb844dc872d9a876cbbac Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 12 Apr 2018 19:10:21 -0400 Subject: [PATCH 08/17] correct Proxy-Authroization --- libi2pd_client/HTTPProxy.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 47f756d3..ffabb61d 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -282,6 +282,7 @@ namespace proxy { bool useConnect = false; if(m_ClientRequest.method == "CONNECT") { + m_ClientRequest.RemoveHeader("Proxy-"); std::string uri(m_ClientRequest.uri); auto pos = uri.find(":"); if(pos == std::string::npos || pos == uri.size() - 1) @@ -392,7 +393,7 @@ namespace proxy { if (m_ProxyURL.schema == "http" && (!m_ProxyURL.user.empty () || !m_ProxyURL.pass.empty ())) { // http proxy authorization - std::string s = "basic " + i2p::data::ToBase64Standard (m_ProxyURL.user + ":" + m_ProxyURL.pass); + std::string s = "Basic " + i2p::data::ToBase64Standard (m_ProxyURL.user + ":" + m_ProxyURL.pass); m_ClientRequest.AddHeader("Proxy-Authorization", s); } From 387e030d83cabee89913386271534d1d1259a881 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 12 Apr 2018 21:25:20 -0400 Subject: [PATCH 09/17] correct cleanup for CONNECT --- libi2pd_client/HTTPProxy.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index ffabb61d..2778f24a 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -219,7 +219,7 @@ namespace proxy { /* replace headers */ req.UpdateHeader("User-Agent", "MYOB/6.66 (AN/ON)"); /* add headers */ - req.AddHeader("Connection", "close"); /* keep-alive conns not supported yet */ + req.UpdateHeader("Connection", "close"); /* keep-alive conns not supported yet */ } /** @@ -282,7 +282,7 @@ namespace proxy { bool useConnect = false; if(m_ClientRequest.method == "CONNECT") { - m_ClientRequest.RemoveHeader("Proxy-"); + SanitizeHTTPRequest (m_ClientRequest); std::string uri(m_ClientRequest.uri); auto pos = uri.find(":"); if(pos == std::string::npos || pos == uri.size() - 1) @@ -399,7 +399,7 @@ namespace proxy { m_ClientRequest.write(m_ClientRequestBuffer); m_ClientRequestBuffer << m_recv_buf.substr(m_req_len); - + // assume http if empty schema if (m_ProxyURL.schema == "" || m_ProxyURL.schema == "http") { From a9b64893d83bffbe8e908e0932b6eab560b40811 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 13 Apr 2018 12:47:53 -0400 Subject: [PATCH 10/17] replace Proxy-Authorization --- libi2pd_client/HTTPProxy.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 2778f24a..5f00ffdb 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -282,7 +282,6 @@ namespace proxy { bool useConnect = false; if(m_ClientRequest.method == "CONNECT") { - SanitizeHTTPRequest (m_ClientRequest); std::string uri(m_ClientRequest.uri); auto pos = uri.find(":"); if(pos == std::string::npos || pos == uri.size() - 1) @@ -392,7 +391,9 @@ namespace proxy { if (m_ProxyURL.schema == "http" && (!m_ProxyURL.user.empty () || !m_ProxyURL.pass.empty ())) { - // http proxy authorization + // remove existing authorization if any + m_ClientRequest.RemoveHeader("Proxy-"); + // add own http proxy authorization std::string s = "Basic " + i2p::data::ToBase64Standard (m_ProxyURL.user + ":" + m_ProxyURL.pass); m_ClientRequest.AddHeader("Proxy-Authorization", s); } From 48099a367e3fd967623f042d8f33d791e046cb09 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 13 Apr 2018 15:13:50 -0400 Subject: [PATCH 11/17] send correct buffer to outproxy --- libi2pd_client/HTTPProxy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 5f00ffdb..805b3247 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -408,7 +408,7 @@ namespace proxy { if (!m_ProxyURL.port) m_ProxyURL.port = 80; if (m_ProxyURL.is_i2p()) { - m_send_buf = m_recv_buf; + m_send_buf = m_ClientRequestBuffer.str (); GetOwner()->CreateStream (std::bind (&HTTPReqHandler::HandleStreamRequestComplete, shared_from_this(), std::placeholders::_1), m_ProxyURL.host, m_ProxyURL.port); } From 17aa91803a0019dd2a557956ff044bcf729434f5 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 13 Apr 2018 15:40:25 -0400 Subject: [PATCH 12/17] update outproxy header in right place --- libi2pd_client/HTTPProxy.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 805b3247..69cda97f 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -389,15 +389,6 @@ namespace proxy { m_ClientRequestURL.host = ""; m_ClientRequest.uri = m_ClientRequestURL.to_string(); - if (m_ProxyURL.schema == "http" && (!m_ProxyURL.user.empty () || !m_ProxyURL.pass.empty ())) - { - // remove existing authorization if any - m_ClientRequest.RemoveHeader("Proxy-"); - // add own http proxy authorization - std::string s = "Basic " + i2p::data::ToBase64Standard (m_ProxyURL.user + ":" + m_ProxyURL.pass); - m_ClientRequest.AddHeader("Proxy-Authorization", s); - } - m_ClientRequest.write(m_ClientRequestBuffer); m_ClientRequestBuffer << m_recv_buf.substr(m_req_len); @@ -408,7 +399,17 @@ namespace proxy { if (!m_ProxyURL.port) m_ProxyURL.port = 80; if (m_ProxyURL.is_i2p()) { - m_send_buf = m_ClientRequestBuffer.str (); + if (!m_ProxyURL.user.empty () || !m_ProxyURL.pass.empty ()) + { + // remove existing authorization if any + m_ClientRequest.RemoveHeader("Proxy-"); + // add own http proxy authorization + std::string s = "Basic " + i2p::data::ToBase64Standard (m_ProxyURL.user + ":" + m_ProxyURL.pass); + m_ClientRequest.AddHeader("Proxy-Authorization", s); + } + m_send_buf = m_ClientRequest.to_string(); + m_recv_buf.erase(0, m_req_len); + m_send_buf.append(m_recv_buf); GetOwner()->CreateStream (std::bind (&HTTPReqHandler::HandleStreamRequestComplete, shared_from_this(), std::placeholders::_1), m_ProxyURL.host, m_ProxyURL.port); } From c175dc30f8b0fd4365f77e310eedbc44e2abcca9 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 13 Apr 2018 16:29:49 -0400 Subject: [PATCH 13/17] correct uri for outproxy --- libi2pd_client/HTTPProxy.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libi2pd_client/HTTPProxy.cpp b/libi2pd_client/HTTPProxy.cpp index 69cda97f..ea95a6bd 100644 --- a/libi2pd_client/HTTPProxy.cpp +++ b/libi2pd_client/HTTPProxy.cpp @@ -387,6 +387,7 @@ namespace proxy { LogPrint(eLogDebug, "HTTPProxy: ", m_ClientRequestURL.host); m_ClientRequestURL.schema = ""; m_ClientRequestURL.host = ""; + std::string origURI = m_ClientRequest.uri; // TODO: what do we need to chage uri for? m_ClientRequest.uri = m_ClientRequestURL.to_string(); m_ClientRequest.write(m_ClientRequestBuffer); @@ -399,6 +400,7 @@ namespace proxy { if (!m_ProxyURL.port) m_ProxyURL.port = 80; if (m_ProxyURL.is_i2p()) { + m_ClientRequest.uri = origURI; if (!m_ProxyURL.user.empty () || !m_ProxyURL.pass.empty ()) { // remove existing authorization if any From 83932a6f0272a29e0128a77562f0543492221e75 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 16 Apr 2018 09:38:32 -0400 Subject: [PATCH 14/17] remove streaming bans --- libi2pd/Streaming.cpp | 76 +------------------------------- libi2pd/Streaming.h | 31 ------------- libi2pd_client/ClientContext.cpp | 4 +- libi2pd_client/I2PTunnel.h | 2 - 4 files changed, 3 insertions(+), 110 deletions(-) diff --git a/libi2pd/Streaming.cpp b/libi2pd/Streaming.cpp index 91acc9d0..afcda9ec 100644 --- a/libi2pd/Streaming.cpp +++ b/libi2pd/Streaming.cpp @@ -904,10 +904,7 @@ namespace stream m_Owner (owner), m_LocalPort (localPort), m_Gzip (gzip), m_LastIncomingReceiveStreamID (0), m_PendingIncomingTimer (m_Owner->GetService ()), - m_ConnTrackTimer(m_Owner->GetService()), - m_ConnsPerMinute(DEFAULT_MAX_CONNS_PER_MIN), - m_LastBanClear(i2p::util::GetMillisecondsSinceEpoch()), - m_EnableDrop(false) + m_ConnTrackTimer(m_Owner->GetService()) { } @@ -923,7 +920,6 @@ namespace stream void StreamingDestination::Start () { - ScheduleConnTrack(); } void StreamingDestination::Stop () @@ -971,17 +967,7 @@ namespace stream auto incomingStream = CreateNewIncomingStream (); incomingStream->HandleNextPacket (packet); // SYN auto ident = incomingStream->GetRemoteIdentity(); - if(ident && m_EnableDrop) - { - auto ih = ident->GetIdentHash(); - if(DropNewStream(ih)) - { - // drop - LogPrint(eLogWarning, "Streaming: Dropping connection, too many inbound streams from ", ih.ToBase32()); - incomingStream->Terminate(); - return; - } - } + m_LastIncomingReceiveStreamID = receiveStreamID; // handle saved packets if any @@ -1176,63 +1162,5 @@ namespace stream return msg; } - void StreamingDestination::SetMaxConnsPerMinute(const uint32_t conns) - { - m_EnableDrop = conns > 0; - m_ConnsPerMinute = conns; - LogPrint(eLogDebug, "Streaming: Set max conns per minute per destination to ", conns); - } - - bool StreamingDestination::DropNewStream(const i2p::data::IdentHash & ih) - { - std::lock_guard lock(m_ConnsMutex); - if (m_Banned.size() > MAX_BANNED_CONNS) return true; // overload - auto end = std::end(m_Banned); - if ( std::find(std::begin(m_Banned), end, ih) != end) return true; // already banned - auto itr = m_Conns.find(ih); - if (itr == m_Conns.end()) - m_Conns[ih] = 0; - - m_Conns[ih] += 1; - - bool ban = m_Conns[ih] >= m_ConnsPerMinute; - if (ban) - { - m_Banned.push_back(ih); - m_Conns.erase(ih); - LogPrint(eLogWarning, "Streaming: ban ", ih.ToBase32()); - } - return ban; - } - - void StreamingDestination::HandleConnTrack(const boost::system::error_code& ecode) - { - if (ecode != boost::asio::error::operation_aborted) - { - { // acquire lock - std::lock_guard lock(m_ConnsMutex); - // clear conn tracking - m_Conns.clear(); - // check for ban clear - auto ts = i2p::util::GetMillisecondsSinceEpoch(); - if (ts - m_LastBanClear >= DEFAULT_BAN_INTERVAL) - { - // clear bans - m_Banned.clear(); - m_LastBanClear = ts; - } - } - // reschedule timer - ScheduleConnTrack(); - } - } - - void StreamingDestination::ScheduleConnTrack() - { - m_ConnTrackTimer.expires_from_now (boost::posix_time::seconds(60)); - m_ConnTrackTimer.async_wait ( - std::bind (&StreamingDestination::HandleConnTrack, - shared_from_this (), std::placeholders::_1)); - } } } diff --git a/libi2pd/Streaming.h b/libi2pd/Streaming.h index a114844d..9ce7e210 100644 --- a/libi2pd/Streaming.h +++ b/libi2pd/Streaming.h @@ -53,22 +53,6 @@ namespace stream const int PENDING_INCOMING_TIMEOUT = 10; // in seconds const int MAX_RECEIVE_TIMEOUT = 30; // in seconds - /** i2cp option for limiting inbound stremaing connections */ - const char I2CP_PARAM_STREAMING_MAX_CONNS_PER_MIN[] = "maxconns"; - /** default maximum connections attempts per minute per destination */ - const uint32_t DEFAULT_MAX_CONNS_PER_MIN = 600; - - /** - * max banned destinations per local destination - * TODO: make configurable - */ - const uint16_t MAX_BANNED_CONNS = 9999; - /** - * length of a ban in ms - * TODO: make configurable - */ - const uint64_t DEFAULT_BAN_INTERVAL = 60 * 60 * 1000; - struct Packet { size_t len, offset; @@ -273,9 +257,6 @@ namespace stream void HandleDataMessagePayload (const uint8_t * buf, size_t len); std::shared_ptr CreateDataMessage (const uint8_t * payload, size_t len, uint16_t toPort); - /** set max connections per minute per destination */ - void SetMaxConnsPerMinute(const uint32_t conns); - Packet * NewPacket () { return m_PacketsPool.Acquire(); } void DeletePacket (Packet * p) { return m_PacketsPool.Release(p); } @@ -286,13 +267,6 @@ namespace stream std::shared_ptr CreateNewIncomingStream (); void HandlePendingIncomingTimer (const boost::system::error_code& ecode); - /** handle cleaning up connection tracking for ratelimits */ - void HandleConnTrack(const boost::system::error_code& ecode); - - bool DropNewStream(const i2p::data::IdentHash & ident); - - void ScheduleConnTrack(); - private: std::shared_ptr m_Owner; @@ -310,13 +284,8 @@ namespace stream /** how many connections per minute did each identity have */ std::map m_Conns; boost::asio::deadline_timer m_ConnTrackTimer; - uint32_t m_ConnsPerMinute; - /** banned identities */ - std::vector m_Banned; - uint64_t m_LastBanClear; i2p::util::MemoryPool m_PacketsPool; - bool m_EnableDrop; public: diff --git a/libi2pd_client/ClientContext.cpp b/libi2pd_client/ClientContext.cpp index fb8fff97..b04ab885 100644 --- a/libi2pd_client/ClientContext.cpp +++ b/libi2pd_client/ClientContext.cpp @@ -567,7 +567,7 @@ namespace client bool gzip = section.second.get (I2P_SERVER_TUNNEL_GZIP, true); i2p::data::SigningKeyType sigType = section.second.get (I2P_SERVER_TUNNEL_SIGNATURE_TYPE, i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA256_P256); i2p::data::CryptoKeyType cryptoType = section.second.get (I2P_CLIENT_TUNNEL_CRYPTO_TYPE, i2p::data::CRYPTO_KEY_TYPE_ELGAMAL); - uint32_t maxConns = section.second.get(i2p::stream::I2CP_PARAM_STREAMING_MAX_CONNS_PER_MIN, i2p::stream::DEFAULT_MAX_CONNS_PER_MIN); + std::string address = section.second.get (I2P_SERVER_TUNNEL_ADDRESS, "127.0.0.1"); bool isUniqueLocal = section.second.get(I2P_SERVER_TUNNEL_ENABLE_UNIQUE_LOCAL, true); @@ -618,8 +618,6 @@ namespace client else // regular server tunnel by default serverTunnel = new I2PServerTunnel (name, host, port, localDestination, inPort, gzip); - LogPrint(eLogInfo, "Clients: Set Max Conns To ", maxConns); - serverTunnel->SetMaxConnsPerMinute(maxConns); if(!isUniqueLocal) { LogPrint(eLogInfo, "Clients: disabling loopback address mapping"); diff --git a/libi2pd_client/I2PTunnel.h b/libi2pd_client/I2PTunnel.h index 1bdf8bb5..0cff9ad5 100644 --- a/libi2pd_client/I2PTunnel.h +++ b/libi2pd_client/I2PTunnel.h @@ -280,8 +280,6 @@ namespace client const char* GetName() { return m_Name.c_str (); } - void SetMaxConnsPerMinute(const uint32_t conns) { m_PortDestination->SetMaxConnsPerMinute(conns); } - private: void HandleResolve (const boost::system::error_code& ecode, boost::asio::ip::tcp::resolver::iterator it, std::shared_ptr resolver); From eefbbd4efed3db5300a7593eb12d3d7b32dafd66 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 16 Apr 2018 09:47:35 -0400 Subject: [PATCH 15/17] remove all related streaming limit members --- libi2pd/Streaming.cpp | 8 +------- libi2pd/Streaming.h | 5 ----- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/libi2pd/Streaming.cpp b/libi2pd/Streaming.cpp index afcda9ec..dd8e3634 100644 --- a/libi2pd/Streaming.cpp +++ b/libi2pd/Streaming.cpp @@ -903,8 +903,7 @@ namespace stream StreamingDestination::StreamingDestination (std::shared_ptr owner, uint16_t localPort, bool gzip): m_Owner (owner), m_LocalPort (localPort), m_Gzip (gzip), m_LastIncomingReceiveStreamID (0), - m_PendingIncomingTimer (m_Owner->GetService ()), - m_ConnTrackTimer(m_Owner->GetService()) + m_PendingIncomingTimer (m_Owner->GetService ()) { } @@ -927,15 +926,10 @@ namespace stream ResetAcceptor (); m_PendingIncomingTimer.cancel (); m_PendingIncomingStreams.clear (); - m_ConnTrackTimer.cancel(); { std::unique_lock l(m_StreamsMutex); m_Streams.clear (); } - { - std::unique_lock l(m_ConnsMutex); - m_Conns.clear (); - } } void StreamingDestination::HandleNextPacket (Packet * packet) diff --git a/libi2pd/Streaming.h b/libi2pd/Streaming.h index 9ce7e210..47f99833 100644 --- a/libi2pd/Streaming.h +++ b/libi2pd/Streaming.h @@ -280,11 +280,6 @@ namespace stream boost::asio::deadline_timer m_PendingIncomingTimer; std::map > m_SavedPackets; // receiveStreamID->packets, arrived before SYN - std::mutex m_ConnsMutex; - /** how many connections per minute did each identity have */ - std::map m_Conns; - boost::asio::deadline_timer m_ConnTrackTimer; - i2p::util::MemoryPool m_PacketsPool; public: From 0c661e7373c4463cfce31f70fd9c574f7d9f12fb Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 18 Apr 2018 15:08:06 -0400 Subject: [PATCH 16/17] save new local destination for failed insert --- libi2pd_client/ClientContext.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libi2pd_client/ClientContext.cpp b/libi2pd_client/ClientContext.cpp index b04ab885..6c3a9410 100644 --- a/libi2pd_client/ClientContext.cpp +++ b/libi2pd_client/ClientContext.cpp @@ -531,6 +531,7 @@ namespace client LogPrint(eLogInfo, "Clients: I2P Client tunnel connect timeout set to ", timeout); } + auto clientTunnelDest = clientTunnel->GetLocalDestination (); // make copy of destination for possible update auto ins = m_ClientTunnels.insert (std::make_pair (clientEndpoint, std::unique_ptr(clientTunnel))); if (ins.second) { @@ -540,10 +541,10 @@ namespace client else { // TODO: update - if (ins.first->second->GetLocalDestination () != clientTunnel->GetLocalDestination ()) + if (ins.first->second->GetLocalDestination () != clientTunnelDest) { LogPrint (eLogInfo, "Clients: I2P client tunnel destination updated"); - ins.first->second->SetLocalDestination (clientTunnel->GetLocalDestination ()); + ins.first->second->SetLocalDestination (clientTunnelDest); } ins.first->second->isUpdated = true; LogPrint (eLogInfo, "Clients: I2P client tunnel for endpoint ", clientEndpoint, " already exists"); @@ -639,6 +640,7 @@ namespace client while (comma != std::string::npos); serverTunnel->SetAccessList (idents); } + auto serverTunnelDest = serverTunnel->GetLocalDestination (); auto ins = m_ServerTunnels.insert (std::make_pair ( std::make_pair (localDestination->GetIdentHash (), inPort), std::unique_ptr(serverTunnel))); @@ -650,10 +652,10 @@ namespace client else { // TODO: update - if (ins.first->second->GetLocalDestination () != serverTunnel->GetLocalDestination ()) + if (ins.first->second->GetLocalDestination () != serverTunnelDest) { LogPrint (eLogInfo, "Clients: I2P server tunnel destination updated"); - ins.first->second->SetLocalDestination (serverTunnel->GetLocalDestination ()); + ins.first->second->SetLocalDestination (serverTunnelDest); } ins.first->second->isUpdated = true; LogPrint (eLogInfo, "Clients: I2P server tunnel for destination/port ", m_AddressBook.ToAddress(localDestination->GetIdentHash ()), "/", inPort, " already exists"); From e2da16e9c32d2d7be8a1ec24fb03938653abbc61 Mon Sep 17 00:00:00 2001 From: R4SAS Date: Thu, 19 Apr 2018 19:46:00 +0300 Subject: [PATCH 17/17] moved reseed out --- libi2pd/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libi2pd/Config.cpp b/libi2pd/Config.cpp index d9cc6dec..126de7fc 100644 --- a/libi2pd/Config.cpp +++ b/libi2pd/Config.cpp @@ -191,7 +191,7 @@ namespace config { // "https://uk.reseed.i2p2.no:444/," // mamoth's shit "https://i2p-0.manas.ca:8443/," "https://download.xxlspeed.com/," - "https://reseed-ru.lngserv.ru/," + "https://reseed-fr.i2pd.xyz/," "https://reseed.atomike.ninja/," "https://reseed.memcpy.io/," "https://reseed.onion.im/,"