mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-26 12:14:15 +00:00
send termination message
This commit is contained in:
parent
6cf158ac63
commit
0a33c18e36
@ -570,8 +570,8 @@ namespace transport
|
|||||||
i2p::data::RouterInfo ri (buf.data () + 4, size - 1); // 1 byte block type + 2 bytes size + 1 byte flag
|
i2p::data::RouterInfo ri (buf.data () + 4, size - 1); // 1 byte block type + 2 bytes size + 1 byte flag
|
||||||
if (ri.IsUnreachable ())
|
if (ri.IsUnreachable ())
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "NTCP2: Signature verification failed in SessionConfirmed");
|
LogPrint (eLogError, "NTCP2: Signature verification failed in SessionConfirmed");
|
||||||
Terminate ();
|
SendTerminationAndTerminate (eNTCP2RouterInfoSignatureVerificationFail);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto addr = ri.GetNTCP2Address ();
|
auto addr = ri.GetNTCP2Address ();
|
||||||
@ -583,8 +583,8 @@ namespace transport
|
|||||||
}
|
}
|
||||||
if (memcmp (addr->ntcp2->staticKey, m_Establisher->m_RemoteStaticKey, 32))
|
if (memcmp (addr->ntcp2->staticKey, m_Establisher->m_RemoteStaticKey, 32))
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "NTCP2: Static key mistmatch in SessionConfirmed");
|
LogPrint (eLogError, "NTCP2: Static key mistmatch in SessionConfirmed");
|
||||||
Terminate ();
|
SendTerminationAndTerminate (eNTCP2IncorrectSParameter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -728,7 +728,7 @@ namespace transport
|
|||||||
case eNTCP2BlkTermination:
|
case eNTCP2BlkTermination:
|
||||||
if (size >= 9)
|
if (size >= 9)
|
||||||
{
|
{
|
||||||
LogPrint (eLogDebug, "NTCP2: termination. reason=", (int)(frame[offset + 9]));
|
LogPrint (eLogDebug, "NTCP2: termination. reason=", (int)(frame[offset + 8]));
|
||||||
Terminate ();
|
Terminate ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -828,6 +828,20 @@ namespace transport
|
|||||||
delete[] payload;
|
delete[] payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NTCP2Session::SendTermination (NTCP2TerminationReason reason)
|
||||||
|
{
|
||||||
|
uint8_t payload[12] = { eNTCP2BlkTermination, 0, 9 };
|
||||||
|
htobe64buf (payload + 3, m_ReceiveSequenceNumber);
|
||||||
|
payload[11] = (uint8_t)reason;
|
||||||
|
SendNextFrame (payload, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NTCP2Session::SendTerminationAndTerminate (NTCP2TerminationReason reason)
|
||||||
|
{
|
||||||
|
SendTermination (reason);
|
||||||
|
m_Server.GetService ().post (std::bind (&NTCP2Session::Terminate, shared_from_this ())); // let termination message go
|
||||||
|
}
|
||||||
|
|
||||||
void NTCP2Session::SendI2NPMessages (const std::vector<std::shared_ptr<I2NPMessage> >& msgs)
|
void NTCP2Session::SendI2NPMessages (const std::vector<std::shared_ptr<I2NPMessage> >& msgs)
|
||||||
{
|
{
|
||||||
m_Server.GetService ().post (std::bind (&NTCP2Session::PostI2NPMessages, shared_from_this (), msgs));
|
m_Server.GetService ().post (std::bind (&NTCP2Session::PostI2NPMessages, shared_from_this (), msgs));
|
||||||
|
@ -40,7 +40,7 @@ namespace transport
|
|||||||
eNTCP2ClockSkew, // 7
|
eNTCP2ClockSkew, // 7
|
||||||
eNTCP2PaddingViolation, // 8
|
eNTCP2PaddingViolation, // 8
|
||||||
eNTCP2AEADFraminError, // 9
|
eNTCP2AEADFraminError, // 9
|
||||||
eNTCP2PayloadFromatError, // 10
|
eNTCP2PayloadFormatError, // 10
|
||||||
eNTCP2Message1Error, // 11
|
eNTCP2Message1Error, // 11
|
||||||
eNTCP2Message2Error, // 12
|
eNTCP2Message2Error, // 12
|
||||||
eNTCP2Message3Error, // 13
|
eNTCP2Message3Error, // 13
|
||||||
@ -135,6 +135,8 @@ namespace transport
|
|||||||
void HandleNextFrameSent (const boost::system::error_code& ecode, std::size_t bytes_transferred);
|
void HandleNextFrameSent (const boost::system::error_code& ecode, std::size_t bytes_transferred);
|
||||||
void SendQueue ();
|
void SendQueue ();
|
||||||
void SendRouterInfo ();
|
void SendRouterInfo ();
|
||||||
|
void SendTermination (NTCP2TerminationReason reason);
|
||||||
|
void SendTerminationAndTerminate (NTCP2TerminationReason reason);
|
||||||
void PostI2NPMessages (std::vector<std::shared_ptr<I2NPMessage> > msgs);
|
void PostI2NPMessages (std::vector<std::shared_ptr<I2NPMessage> > msgs);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user