diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index beca55cd..a2125320 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -463,6 +463,7 @@ namespace transport bool isValidEndpoint = !address->host.is_unspecified () && address->port; if (isValidEndpoint) { + if (i2p::util::net::IsInReservedRange(address->host)) return false; auto s = FindPendingOutgoingSession (boost::asio::ip::udp::endpoint (address->host, address->port)); if (s) { diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index 305c8452..27bebac4 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -1712,8 +1712,10 @@ namespace transport } else { - LogPrint (eLogInfo, "SSU2: Peer test 4 error code ", (int)buf[1]); - SetRouterStatus (eRouterStatusUnknown); + LogPrint (eLogInfo, "SSU2: Peer test 4 error code ", (int)buf[1], " from ", + i2p::data::GetIdentHashAbbreviation (buf[1] < 64 ? GetRemoteIdentity ()->GetIdentHash () : i2p::data::IdentHash (buf + 3))); + if (GetRouterStatus () == eRouterStatusTesting) + SetRouterStatus (eRouterStatusUnknown); it->second.first->Terminate (); } m_PeerTests.erase (it); diff --git a/libi2pd/Transports.cpp b/libi2pd/Transports.cpp index 2d1af187..b76bbc30 100644 --- a/libi2pd/Transports.cpp +++ b/libi2pd/Transports.cpp @@ -665,11 +665,16 @@ namespace transport { excluded.clear (); excluded.insert (i2p::context.GetIdentHash ()); - auto router = i2p::data::netdb.GetRandomSSU2PeerTestRouter (true, excluded); // v4 - if (router) - { - i2p::context.SetStatusSSU2 (eRouterStatusTesting); - m_SSU2Server->StartPeerTest (router, true); + for (int i = 0; i < 3; i++) + { + auto router = i2p::data::netdb.GetRandomSSU2PeerTestRouter (true, excluded); // v4 + if (router) + { + if (i2p::context.GetStatus () != eRouterStatusTesting) + i2p::context.SetStatusSSU2 (eRouterStatusTesting); + m_SSU2Server->StartPeerTest (router, true); + excluded.insert (router->GetIdentHash ()); + } } } } @@ -708,11 +713,16 @@ namespace transport { excluded.clear (); excluded.insert (i2p::context.GetIdentHash ()); - auto router = i2p::data::netdb.GetRandomSSU2PeerTestRouter (false, excluded); // v6 - if (router) - { - i2p::context.SetStatusV6SSU2 (eRouterStatusTesting); - m_SSU2Server->StartPeerTest (router, false); + for (int i = 0; i < 3; i++) + { + auto router = i2p::data::netdb.GetRandomSSU2PeerTestRouter (false, excluded); // v6 + if (router) + { + if (i2p::context.GetStatusV6 () != eRouterStatusTesting) + i2p::context.SetStatusV6SSU2 (eRouterStatusTesting); + m_SSU2Server->StartPeerTest (router, false); + } + excluded.insert (router->GetIdentHash ()); } } }