mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-18 20:59:57 +00:00
expire transit tunnel is not sent further
This commit is contained in:
parent
ce35637866
commit
be815804e6
@ -584,13 +584,14 @@ namespace i2p
|
|||||||
memcpy (ivKey, noiseState.m_CK , 32);
|
memcpy (ivKey, noiseState.m_CK , 32);
|
||||||
|
|
||||||
// check if we accept this tunnel
|
// check if we accept this tunnel
|
||||||
|
std::shared_ptr<i2p::tunnel::TransitTunnel> transitTunnel;
|
||||||
uint8_t retCode = 0;
|
uint8_t retCode = 0;
|
||||||
if (!i2p::context.AcceptsTunnels () || i2p::context.IsHighCongestion ())
|
if (!i2p::context.AcceptsTunnels () || i2p::context.IsHighCongestion ())
|
||||||
retCode = 30;
|
retCode = 30;
|
||||||
if (!retCode)
|
if (!retCode)
|
||||||
{
|
{
|
||||||
// create new transit tunnel
|
// create new transit tunnel
|
||||||
auto transitTunnel = i2p::tunnel::CreateTransitTunnel (
|
transitTunnel = i2p::tunnel::CreateTransitTunnel (
|
||||||
bufbe32toh (clearText + SHORT_REQUEST_RECORD_RECEIVE_TUNNEL_OFFSET),
|
bufbe32toh (clearText + SHORT_REQUEST_RECORD_RECEIVE_TUNNEL_OFFSET),
|
||||||
clearText + SHORT_REQUEST_RECORD_NEXT_IDENT_OFFSET,
|
clearText + SHORT_REQUEST_RECORD_NEXT_IDENT_OFFSET,
|
||||||
bufbe32toh (clearText + SHORT_REQUEST_RECORD_NEXT_TUNNEL_OFFSET),
|
bufbe32toh (clearText + SHORT_REQUEST_RECORD_NEXT_TUNNEL_OFFSET),
|
||||||
@ -624,11 +625,22 @@ namespace i2p
|
|||||||
reply += SHORT_TUNNEL_BUILD_RECORD_SIZE;
|
reply += SHORT_TUNNEL_BUILD_RECORD_SIZE;
|
||||||
}
|
}
|
||||||
// send reply
|
// send reply
|
||||||
|
auto onDrop = [transitTunnel]()
|
||||||
|
{
|
||||||
|
if (transitTunnel)
|
||||||
|
{
|
||||||
|
auto t = transitTunnel->GetCreationTime ();
|
||||||
|
if (t > i2p::tunnel::TUNNEL_EXPIRATION_TIMEOUT)
|
||||||
|
// make transit tunnel expired
|
||||||
|
transitTunnel->SetCreationTime (t - i2p::tunnel::TUNNEL_EXPIRATION_TIMEOUT);
|
||||||
|
}
|
||||||
|
};
|
||||||
if (isEndpoint)
|
if (isEndpoint)
|
||||||
{
|
{
|
||||||
auto replyMsg = NewI2NPShortMessage ();
|
auto replyMsg = NewI2NPShortMessage ();
|
||||||
replyMsg->Concat (buf, len);
|
replyMsg->Concat (buf, len);
|
||||||
replyMsg->FillI2NPMessageHeader (eI2NPShortTunnelBuildReply, bufbe32toh (clearText + SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET));
|
replyMsg->FillI2NPMessageHeader (eI2NPShortTunnelBuildReply, bufbe32toh (clearText + SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET));
|
||||||
|
if (transitTunnel) replyMsg->onDrop = onDrop;
|
||||||
if (memcmp ((const uint8_t *)i2p::context.GetIdentHash (),
|
if (memcmp ((const uint8_t *)i2p::context.GetIdentHash (),
|
||||||
clearText + SHORT_REQUEST_RECORD_NEXT_IDENT_OFFSET, 32)) // reply IBGW is not local?
|
clearText + SHORT_REQUEST_RECORD_NEXT_IDENT_OFFSET, 32)) // reply IBGW is not local?
|
||||||
{
|
{
|
||||||
@ -652,9 +664,12 @@ namespace i2p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
transports.SendMessage (clearText + SHORT_REQUEST_RECORD_NEXT_IDENT_OFFSET,
|
{
|
||||||
CreateI2NPMessage (eI2NPShortTunnelBuild, buf, len,
|
auto msg = CreateI2NPMessage (eI2NPShortTunnelBuild, buf, len,
|
||||||
bufbe32toh (clearText + SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET)));
|
bufbe32toh (clearText + SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET));
|
||||||
|
if (transitTunnel) msg->onDrop = onDrop;
|
||||||
|
transports.SendMessage (clearText + SHORT_REQUEST_RECORD_NEXT_IDENT_OFFSET, msg);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
record += SHORT_TUNNEL_BUILD_RECORD_SIZE;
|
record += SHORT_TUNNEL_BUILD_RECORD_SIZE;
|
||||||
@ -714,7 +729,11 @@ namespace i2p
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return CreateTunnelGatewayMsg (tunnelID, msg->GetBuffer (), msg->GetLength ());
|
{
|
||||||
|
auto newMsg = CreateTunnelGatewayMsg (tunnelID, msg->GetBuffer (), msg->GetLength ());
|
||||||
|
if (msg->onDrop) newMsg->onDrop = msg->onDrop;
|
||||||
|
return newMsg;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<I2NPMessage> CreateTunnelGatewayMsg (uint32_t tunnelID, I2NPMessageType msgType,
|
std::shared_ptr<I2NPMessage> CreateTunnelGatewayMsg (uint32_t tunnelID, I2NPMessageType msgType,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user