| 277 | } |
| 278 | |
| 279 | void SSU2Session::Terminate () |
| 280 | { |
| 281 | auto state = m_State.exchange (eSSU2SessionStateTerminated); |
| 282 | if (state != eSSU2SessionStateTerminated) |
| 283 | { |
| 284 | m_ConnectTimer.cancel (); |
| 285 | m_OnEstablished = nullptr; |
| 286 | if (m_RelayTag) |
| 287 | m_Server.RemoveRelay (m_RelayTag); |
| 288 | m_Server.AddConnectedRecently (m_RemoteEndpoint, GetLastActivityTimestamp ()); |
| 289 | m_SentHandshakePacket.reset (nullptr); |
| 290 | m_SessionConfirmedFragment.reset (nullptr); |
| 291 | m_PathChallenge.reset (nullptr); |
| 292 | #if OPENSSL_PQ |
| 293 | m_PQKeys.reset (nullptr); |
| 294 | #endif |
| 295 | if (!m_IntermediateQueue.empty ()) |
| 296 | m_SendQueue.splice (m_SendQueue.end (), m_IntermediateQueue); |
| 297 | for (auto& it: m_SendQueue) |
| 298 | it->Drop (); |
| 299 | m_SendQueue.clear (); |
| 300 | SetSendQueueSize (0); |
| 301 | m_SentPackets.clear (); |
| 302 | m_IncompleteMessages.clear (); |
| 303 | m_RelaySessions.clear (); |
| 304 | m_ReceivedI2NPMsgIDs.clear (); |
| 305 | m_Server.RemoveSession (m_SourceConnID); |
| 306 | transports.PeerDisconnected (shared_from_this ()); |
| 307 | auto remoteIdentity = GetRemoteIdentity (); |
| 308 | if (remoteIdentity) |
| 309 | LogPrint (eLogDebug, "SSU2: Session with ", GetRemoteEndpoint (), |
| 310 | " (", i2p::data::GetIdentHashAbbreviation (remoteIdentity->GetIdentHash ()), ") terminated"); |
| 311 | else |
| 312 | LogPrint (eLogDebug, "SSU2: Session with ", GetRemoteEndpoint (), " terminated"); |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | void SSU2Session::RequestTermination (SSU2TerminationReason reason) |
| 317 | { |
nothing calls this directly
no test coverage detected