mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-12 17:10:20 +03:00
Resend RelayResponse if relay tag not found. Send Ack block
This commit is contained in:
parent
29d77113cc
commit
f90386803f
@ -337,13 +337,14 @@ namespace transport
|
|||||||
SetTerminationTimeout (SSU2_TERMINATION_TIMEOUT);
|
SetTerminationTimeout (SSU2_TERMINATION_TIMEOUT);
|
||||||
SendQueue ();
|
SendQueue ();
|
||||||
transports.PeerConnected (shared_from_this ());
|
transports.PeerConnected (shared_from_this ());
|
||||||
|
|
||||||
|
LogPrint(eLogDebug, "SSU2: Session with ", GetRemoteEndpoint (),
|
||||||
|
" (", i2p::data::GetIdentHashAbbreviation (GetRemoteIdentity ()->GetIdentHash ()), ") established");
|
||||||
if (m_OnEstablished)
|
if (m_OnEstablished)
|
||||||
{
|
{
|
||||||
m_OnEstablished ();
|
m_OnEstablished ();
|
||||||
m_OnEstablished = nullptr;
|
m_OnEstablished = nullptr;
|
||||||
}
|
}
|
||||||
LogPrint(eLogDebug, "SSU2: Session with ", GetRemoteEndpoint (),
|
|
||||||
" (", i2p::data::GetIdentHashAbbreviation (GetRemoteIdentity ()->GetIdentHash ()), ") established");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSU2Session::Done ()
|
void SSU2Session::Done ()
|
||||||
@ -1944,21 +1945,24 @@ namespace transport
|
|||||||
void SSU2Session::HandleRelayRequest (const uint8_t * buf, size_t len)
|
void SSU2Session::HandleRelayRequest (const uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
// we are Bob
|
// we are Bob
|
||||||
|
auto mts = i2p::util::GetMillisecondsSinceEpoch ();
|
||||||
|
uint32_t nonce = bufbe32toh (buf + 1); // nonce
|
||||||
uint32_t relayTag = bufbe32toh (buf + 5); // relay tag
|
uint32_t relayTag = bufbe32toh (buf + 5); // relay tag
|
||||||
auto session = m_Server.FindRelaySession (relayTag);
|
auto session = m_Server.FindRelaySession (relayTag);
|
||||||
if (!session)
|
if (!session)
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "SSU2: RelayRequest session with relay tag ", relayTag, " not found");
|
LogPrint (eLogWarning, "SSU2: RelayRequest session with relay tag ", relayTag, " not found");
|
||||||
// send relay response back to Alice
|
// send relay response back to Alice
|
||||||
uint8_t payload[SSU2_MAX_PACKET_SIZE];
|
auto packet = m_Server.GetSentPacketsPool ().AcquireShared ();
|
||||||
size_t payloadSize = CreateRelayResponseBlock (payload, m_MaxPayloadSize,
|
packet->payloadSize = CreateAckBlock (packet->payload, m_MaxPayloadSize);
|
||||||
eSSU2RelayResponseCodeBobRelayTagNotFound, bufbe32toh (buf + 1), 0, false);
|
packet->payloadSize += CreateRelayResponseBlock (packet->payload + packet->payloadSize, m_MaxPayloadSize - packet->payloadSize,
|
||||||
payloadSize += CreatePaddingBlock (payload + payloadSize, m_MaxPayloadSize - payloadSize);
|
eSSU2RelayResponseCodeBobRelayTagNotFound, nonce, 0, false);
|
||||||
SendData (payload, payloadSize);
|
packet->payloadSize += CreatePaddingBlock (packet->payload + packet->payloadSize, m_MaxPayloadSize - packet->payloadSize);
|
||||||
|
uint32_t packetNum = SendData (packet->payload, packet->payloadSize);
|
||||||
|
packet->sendTime = mts;
|
||||||
|
session->m_SentPackets.emplace (packetNum, packet);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto mts = i2p::util::GetMillisecondsSinceEpoch ();
|
|
||||||
uint32_t nonce = bufbe32toh (buf + 1);
|
|
||||||
if (session->m_RelaySessions.emplace (nonce, std::make_pair (shared_from_this (), mts/1000)).second)
|
if (session->m_RelaySessions.emplace (nonce, std::make_pair (shared_from_this (), mts/1000)).second)
|
||||||
{
|
{
|
||||||
// send relay intro to Charlie
|
// send relay intro to Charlie
|
||||||
|
Loading…
Reference in New Issue
Block a user