respond to termination

This commit is contained in:
orignal 2022-07-25 18:46:25 -04:00
parent 987497bb10
commit f8a609f692
2 changed files with 11 additions and 4 deletions

View file

@ -234,7 +234,8 @@ namespace transport
{
ProcessNextPacket (packet->buf, packet->len, packet->from);
m_PacketsPool.ReleaseMt (packet);
if (m_LastSession) m_LastSession->FlushData ();
if (m_LastSession && m_LastSession->GetState () != eSSU2SessionStateTerminated)
m_LastSession->FlushData ();
}
}
@ -243,7 +244,8 @@ namespace transport
for (auto& packet: packets)
ProcessNextPacket (packet->buf, packet->len, packet->from);
m_PacketsPool.ReleaseMt (packets);
if (m_LastSession) m_LastSession->FlushData ();
if (m_LastSession && m_LastSession->GetState () != eSSU2SessionStateTerminated)
m_LastSession->FlushData ();
}
void SSU2Server::AddSession (std::shared_ptr<SSU2Session> session)
@ -416,7 +418,9 @@ namespace transport
m_LastSession->ProcessPeerTest (buf, len);
break;
case eSSU2SessionStateClosing:
m_LastSession->RequestTermination (eSSU2TerminationReasonIdleTimeout); // send termination again
m_LastSession->ProcessData (buf, len); // we might receive termintaion block
if (m_LastSession && m_LastSession->GetState () != eSSU2SessionStateTerminated)
m_LastSession->RequestTermination (eSSU2TerminationReasonIdleTimeout); // send termination again
break;
case eSSU2SessionStateTerminated:
m_LastSession = nullptr;

View file

@ -1308,7 +1308,10 @@ namespace transport
break;
case eSSU2BlkTermination:
LogPrint (eLogDebug, "SSU2: Termination reason=", (int)buf[11]);
Terminate ();
if (IsEstablished () && buf[11] != eSSU2TerminationReasonTerminationReceived)
RequestTermination (eSSU2TerminationReasonTerminationReceived);
else
Terminate ();
break;
case eSSU2BlkRelayRequest:
LogPrint (eLogDebug, "SSU2: RelayRequest");