From 463ed12ce863f0ced5aaf3548615e00f2db1ff69 Mon Sep 17 00:00:00 2001 From: orignal Date: Sun, 26 Jun 2022 10:07:39 -0400 Subject: [PATCH] don't pick same session for PeerTest msg 2 --- libi2pd/SSU2.cpp | 9 ++++++--- libi2pd/SSU2.h | 3 ++- libi2pd/SSU2Session.cpp | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 8e8246e7..5a13aadc 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -291,7 +291,8 @@ namespace transport m_PendingOutgoingSessions.erase (ep); } - std::shared_ptr SSU2Server::GetRandomSession (i2p::data::RouterInfo::CompatibleTransports remoteTransports) const + std::shared_ptr SSU2Server::GetRandomSession ( + i2p::data::RouterInfo::CompatibleTransports remoteTransports, const i2p::data::IdentHash& excluded) const { if (m_Sessions.empty ()) return nullptr; uint16_t ind; @@ -301,7 +302,8 @@ namespace transport std::advance (it, ind); while (it != m_Sessions.end ()) { - if (it->second->GetRemoteTransports () & remoteTransports) + if ((it->second->GetRemoteTransports () & remoteTransports) && + it->second->GetRemoteIdentity ()->GetIdentHash () != excluded) return it->second; it++; } @@ -309,7 +311,8 @@ namespace transport it = m_Sessions.begin (); while (it != m_Sessions.end () && ind) { - if (it->second->GetRemoteTransports () & remoteTransports) + if ((it->second->GetRemoteTransports () & remoteTransports) && + it->second->GetRemoteIdentity ()->GetIdentHash () != excluded) return it->second; it++; ind--; } diff --git a/libi2pd/SSU2.h b/libi2pd/SSU2.h index a2e3e76b..429cfdb7 100644 --- a/libi2pd/SSU2.h +++ b/libi2pd/SSU2.h @@ -58,7 +58,8 @@ namespace transport void RemovePendingOutgoingSession (const boost::asio::ip::udp::endpoint& ep); std::shared_ptr FindSession (const i2p::data::IdentHash& ident) const; std::shared_ptr FindPendingOutgoingSession (const boost::asio::ip::udp::endpoint& ep) const; - std::shared_ptr GetRandomSession (i2p::data::RouterInfo::CompatibleTransports remoteTransports) const; + std::shared_ptr GetRandomSession (i2p::data::RouterInfo::CompatibleTransports remoteTransports, + const i2p::data::IdentHash& excluded) const; void AddRelay (uint32_t tag, std::shared_ptr relay); void RemoveRelay (uint32_t tag); diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index e419753f..8154c14b 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -1495,7 +1495,8 @@ namespace transport { case 1: // Bob from Alice { - auto session = m_Server.GetRandomSession ((buf[12] == 6) ? i2p::data::RouterInfo::eSSU2V4 : i2p::data::RouterInfo::eSSU2V6); + auto session = m_Server.GetRandomSession ((buf[12] == 6) ? i2p::data::RouterInfo::eSSU2V4 : i2p::data::RouterInfo::eSSU2V6, + GetRemoteIdentity ()->GetIdentHash ()); if (session) // session with Charlie { session->m_PeerTests.emplace (nonce, std::make_pair (shared_from_this (), i2p::util::GetSecondsSinceEpoch ()));