From 6ca9a599ff2bd641f18c85794ea35308ad5f0180 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 30 Jun 2022 08:37:50 -0400 Subject: [PATCH] remove session after HolePunch received --- libi2pd/SSU2.cpp | 11 ----------- libi2pd/SSU2.h | 1 - libi2pd/SSU2Session.cpp | 10 +++++++--- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 4674d9be..beca55cd 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -242,17 +242,6 @@ namespace transport m_Sessions.erase (it); } } - - void SSU2Server::UpdateSessionConnID (uint64_t oldConnID) - { - auto it = m_Sessions.find (oldConnID); - if (it != m_Sessions.end ()) - { - auto session = it->second; - m_Sessions.erase (it); - m_Sessions.emplace (session->GetConnID (), session); - } - } void SSU2Server::AddSessionByRouterHash (std::shared_ptr session) { diff --git a/libi2pd/SSU2.h b/libi2pd/SSU2.h index 2373ec17..429cfdb7 100644 --- a/libi2pd/SSU2.h +++ b/libi2pd/SSU2.h @@ -53,7 +53,6 @@ namespace transport void AddSession (std::shared_ptr session); void RemoveSession (uint64_t connID); - void UpdateSessionConnID (uint64_t oldConnID); // session has new connID void AddSessionByRouterHash (std::shared_ptr session); bool AddPendingOutgoingSession (std::shared_ptr session); void RemovePendingOutgoingSession (const boost::asio::ip::udp::endpoint& ep); diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index ebb4ba31..55c07b90 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -51,14 +51,17 @@ namespace transport void SSU2Session::Connect () { - if (m_State == eSSU2SessionStateUnknown) + if (m_State == eSSU2SessionStateUnknown || m_State == eSSU2SessionStateTokenReceived) { ScheduleConnectTimer (); auto token = m_Server.FindOutgoingToken (m_RemoteEndpoint); if (token) SendSessionRequest (token); else + { + m_State = eSSU2SessionStateUnknown; SendTokenRequest (); + } } } @@ -959,9 +962,10 @@ namespace transport uint64_t oldConnID = GetConnID (); RAND_bytes ((uint8_t *)&m_DestConnID, 8); RAND_bytes ((uint8_t *)&m_SourceConnID, 8); - m_Server.UpdateSessionConnID (oldConnID); // connect - m_State = eSSU2SessionStateUnknown; + m_State = eSSU2SessionStateTokenReceived; + m_Server.AddPendingOutgoingSession (shared_from_this ()); + m_Server.RemoveSession (oldConnID); Connect (); }