From 4b1f5c9c9bc5962bfb66d22dd75ff947c8a958ea Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 26 Jul 2022 19:56:30 -0400 Subject: [PATCH] terminate session in separate task --- libi2pd/SSU2.cpp | 8 ++++---- libi2pd/SSU2Session.cpp | 12 ++++++------ libi2pd/SSU2Session.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 2c91aeb9..b8d5b61e 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -403,7 +403,7 @@ namespace transport case eSSU2SessionStateSessionCreatedSent: if (!m_LastSession->ProcessSessionConfirmed (buf, len)) { - m_LastSession->Terminate (); + m_LastSession->Done (); m_LastSession = nullptr; } break; @@ -416,7 +416,7 @@ namespace transport { LogPrint (eLogWarning, "SSU2: HolePunch endpoint ", senderEndpoint, " doesn't match RelayResponse ", m_LastSession->GetRemoteEndpoint ()); - m_LastSession->Terminate (); + m_LastSession->Done (); m_LastSession = nullptr; } break; @@ -678,13 +678,13 @@ namespace transport { auto state = it.second->GetState (); if (state == eSSU2SessionStateTerminated || state == eSSU2SessionStateClosing) - GetService ().post (std::bind (&SSU2Session::Terminate, it.second)); + it.second->Done (); else if (it.second->IsTerminationTimeoutExpired (ts)) { if (it.second->IsEstablished ()) it.second->RequestTermination (eSSU2TerminationReasonIdleTimeout); else - GetService ().post (std::bind (&SSU2Session::Terminate, it.second)); + it.second->Done (); } else it.second->CleanUp (ts); diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index f3a5713a..8e3b3445 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -1338,7 +1338,7 @@ namespace transport if (IsEstablished () && buf[11] != eSSU2TerminationReasonTerminationReceived) RequestTermination (eSSU2TerminationReasonTerminationReceived); else - Terminate (); + Done (); break; case eSSU2BlkRelayRequest: LogPrint (eLogDebug, "SSU2: RelayRequest"); @@ -1696,13 +1696,13 @@ namespace transport else { LogPrint (eLogWarning, "SSU2: RelayResponse signature verification failed"); - m_Server.GetService ().post (std::bind (&SSU2Session::Terminate, it->second.first)); + it->second.first->Done (); } } else { LogPrint (eLogInfo, "SSU2: RelayResponse status code=", (int)buf[1]); - m_Server.GetService ().post (std::bind (&SSU2Session::Terminate, it->second.first)); + it->second.first->Done (); } } m_RelaySessions.erase (it); @@ -1898,13 +1898,13 @@ namespace transport else { LogPrint (eLogWarning, "SSU2: Peer test 4 address not found"); - it->second.first->Terminate (); + it->second.first->Done (); } } else { LogPrint (eLogWarning, "SSU2: Peer test 4 signature verification failed"); - it->second.first->Terminate (); + it->second.first->Done (); } } } @@ -1914,7 +1914,7 @@ namespace transport i2p::data::GetIdentHashAbbreviation (buf[1] < 64 ? GetRemoteIdentity ()->GetIdentHash () : i2p::data::IdentHash (buf + 3))); if (GetRouterStatus () == eRouterStatusTesting) SetRouterStatus (eRouterStatusUnknown); - it->second.first->Terminate (); + it->second.first->Done (); } m_PeerTests.erase (it); } diff --git a/libi2pd/SSU2Session.h b/libi2pd/SSU2Session.h index c18ca4b4..7a9f5842 100644 --- a/libi2pd/SSU2Session.h +++ b/libi2pd/SSU2Session.h @@ -222,7 +222,6 @@ namespace transport void WaitForIntroduction (); void SendPeerTest (); // Alice, Data message void SendKeepAlive (); - void Terminate (); void RequestTermination (SSU2TerminationReason reason); void CleanUp (uint64_t ts); void FlushData (); @@ -246,6 +245,7 @@ namespace transport private: + void Terminate (); void Established (); void ScheduleConnectTimer (); void HandleConnectTimer (const boost::system::error_code& ecode);