diff --git a/I2NPProtocol.cpp b/I2NPProtocol.cpp index 8326dc55..f2ef9ec1 100644 --- a/I2NPProtocol.cpp +++ b/I2NPProtocol.cpp @@ -280,7 +280,8 @@ namespace i2p i2p::crypto::ElGamalDecrypt (i2p::context.GetEncryptionPrivateKey (), record + BUILD_REQUEST_RECORD_ENCRYPTED_OFFSET, clearText); // replace record to reply - if (i2p::context.AcceptsTunnels ()) + if (i2p::context.AcceptsTunnels () && + i2p::tunnel::tunnels.GetTransitTunnels ().size () <= MAX_NUM_TRANSIT_TUNNELS) { i2p::tunnel::TransitTunnel * transitTunnel = i2p::tunnel::CreateTransitTunnel ( diff --git a/I2NPProtocol.h b/I2NPProtocol.h index de91df73..5bb94062 100644 --- a/I2NPProtocol.h +++ b/I2NPProtocol.h @@ -97,6 +97,8 @@ namespace i2p const uint8_t DATABASE_LOOKUP_TYPE_ROUTERINFO_LOOKUP = 0x08; // 1000 const uint8_t DATABASE_LOOKUP_TYPE_EXPLORATORY_LOOKUP = 0x0C; // 1100 + const int MAX_NUM_TRANSIT_TUNNELS = 1500; + namespace tunnel { class InboundTunnel; diff --git a/I2PControl.cpp b/I2PControl.cpp index 0432ea34..4183476d 100644 --- a/I2PControl.cpp +++ b/I2PControl.cpp @@ -309,7 +309,7 @@ namespace client void I2PControlService::TunnelsParticipatingHandler (std::map& results) { - results[I2P_CONTROL_ROUTER_INFO_TUNNELS_PARTICIPATING] = boost::lexical_cast(i2p::tunnel::tunnels.GetTransitTunnels ().size ());; + results[I2P_CONTROL_ROUTER_INFO_TUNNELS_PARTICIPATING] = boost::lexical_cast(i2p::tunnel::tunnels.GetTransitTunnels ().size ()); } // RouterManager