|
|
@ -1,5 +1,5 @@ |
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Copyright (c) 2013-2021, The PurpleI2P Project |
|
|
|
* Copyright (c) 2013-2024, The PurpleI2P Project |
|
|
|
* |
|
|
|
* |
|
|
|
* This file is part of Purple i2pd project and licensed under BSD3 |
|
|
|
* This file is part of Purple i2pd project and licensed under BSD3 |
|
|
|
* |
|
|
|
* |
|
|
@ -35,6 +35,13 @@ namespace tunnel |
|
|
|
if (!m_CurrentTunnelDataMsg) |
|
|
|
if (!m_CurrentTunnelDataMsg) |
|
|
|
{ |
|
|
|
{ |
|
|
|
CreateCurrentTunnelDataMessage (); |
|
|
|
CreateCurrentTunnelDataMessage (); |
|
|
|
|
|
|
|
if (block.data && block.data->onDrop) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// onDrop is called for the first fragment in tunnel message
|
|
|
|
|
|
|
|
// that's usually true for short TBMs or lookups
|
|
|
|
|
|
|
|
m_CurrentTunnelDataMsg->onDrop = block.data->onDrop; |
|
|
|
|
|
|
|
block.data->onDrop = nullptr; |
|
|
|
|
|
|
|
} |
|
|
|
messageCreated = true; |
|
|
|
messageCreated = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -155,7 +162,6 @@ namespace tunnel |
|
|
|
|
|
|
|
|
|
|
|
void TunnelGatewayBuffer::CreateCurrentTunnelDataMessage () |
|
|
|
void TunnelGatewayBuffer::CreateCurrentTunnelDataMessage () |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_CurrentTunnelDataMsg = nullptr; |
|
|
|
|
|
|
|
m_CurrentTunnelDataMsg = NewI2NPTunnelMessage (true); // tunnel endpoint is at least of two tunnel messages size
|
|
|
|
m_CurrentTunnelDataMsg = NewI2NPTunnelMessage (true); // tunnel endpoint is at least of two tunnel messages size
|
|
|
|
// we reserve space for padding
|
|
|
|
// we reserve space for padding
|
|
|
|
m_CurrentTunnelDataMsg->offset += TUNNEL_DATA_MSG_SIZE + I2NP_HEADER_SIZE; |
|
|
|
m_CurrentTunnelDataMsg->offset += TUNNEL_DATA_MSG_SIZE + I2NP_HEADER_SIZE; |
|
|
@ -223,6 +229,7 @@ namespace tunnel |
|
|
|
m_Tunnel->EncryptTunnelMsg (tunnelMsg, newMsg); |
|
|
|
m_Tunnel->EncryptTunnelMsg (tunnelMsg, newMsg); |
|
|
|
htobe32buf (newMsg->GetPayload (), m_Tunnel->GetNextTunnelID ()); |
|
|
|
htobe32buf (newMsg->GetPayload (), m_Tunnel->GetNextTunnelID ()); |
|
|
|
newMsg->FillI2NPMessageHeader (eI2NPTunnelData); |
|
|
|
newMsg->FillI2NPMessageHeader (eI2NPTunnelData); |
|
|
|
|
|
|
|
if (tunnelMsg->onDrop) newMsg->onDrop = tunnelMsg->onDrop; |
|
|
|
newTunnelMsgs.push_back (newMsg); |
|
|
|
newTunnelMsgs.push_back (newMsg); |
|
|
|
m_NumSentBytes += TUNNEL_DATA_MSG_SIZE; |
|
|
|
m_NumSentBytes += TUNNEL_DATA_MSG_SIZE; |
|
|
|
} |
|
|
|
} |
|
|
|