Browse Source

respond to termination

pull/1786/head
orignal 2 years ago
parent
commit
f8a609f692
  1. 10
      libi2pd/SSU2.cpp
  2. 5
      libi2pd/SSU2Session.cpp

10
libi2pd/SSU2.cpp

@ -234,7 +234,8 @@ namespace transport @@ -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 @@ -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 @@ -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;

5
libi2pd/SSU2Session.cpp

@ -1308,7 +1308,10 @@ namespace transport @@ -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");

Loading…
Cancel
Save