diff --git a/NTCPSession.cpp b/NTCPSession.cpp index 43816d2d..6184a377 100644 --- a/NTCPSession.cpp +++ b/NTCPSession.cpp @@ -678,6 +678,11 @@ namespace transport { if (msg) { + if (m_IsTerminated) + { + DeleteI2NPMessage (msg); + return; + } if (m_IsSending) m_SendQueue.push_back (msg); else @@ -692,6 +697,12 @@ namespace transport void NTCPSession::PostI2NPMessages (std::vector msgs) { + if (m_IsTerminated) + { + for (auto it: msgs) + DeleteI2NPMessage (it); + return; + } if (m_IsSending) { for (auto it: msgs) diff --git a/SSUSession.cpp b/SSUSession.cpp index 1ee5d5f5..7b81903c 100644 --- a/SSUSession.cpp +++ b/SSUSession.cpp @@ -830,13 +830,18 @@ namespace transport void SSUSession::SendI2NPMessage (I2NPMessage * msg) { - GetService ().post (std::bind (&SSUSession::PostI2NPMessage, shared_from_this (), msg)); + GetService ().post (std::bind (&SSUSession::PostI2NPMessage, shared_from_this (), msg)); } void SSUSession::PostI2NPMessage (I2NPMessage * msg) { if (msg) - m_Data.Send (msg); + { + if (m_State == eSessionStateEstablished) + m_Data.Send (msg); + else + DeleteI2NPMessage (msg); + } } void SSUSession::SendI2NPMessages (const std::vector& msgs) @@ -846,8 +851,16 @@ namespace transport void SSUSession::PostI2NPMessages (std::vector msgs) { - for (auto it: msgs) - if (it) m_Data.Send (it); + if (m_State == eSessionStateEstablished) + { + for (auto it: msgs) + if (it) m_Data.Send (it); + } + else + { + for (auto it: msgs) + DeleteI2NPMessage (it); + } } void SSUSession::ProcessData (uint8_t * buf, size_t len)