mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-07 03:34:15 +00:00
reduced I2NP message size for tunnel gateway
This commit is contained in:
parent
2ed356be65
commit
7ae38a71cc
@ -10,8 +10,8 @@ namespace i2p
|
|||||||
{
|
{
|
||||||
namespace tunnel
|
namespace tunnel
|
||||||
{
|
{
|
||||||
TunnelGatewayBuffer::TunnelGatewayBuffer (uint32_t tunnelID): m_TunnelID (tunnelID),
|
TunnelGatewayBuffer::TunnelGatewayBuffer ():
|
||||||
m_CurrentTunnelDataMsg (nullptr), m_RemainingSize (0)
|
m_CurrentTunnelDataMsg (nullptr), m_RemainingSize (0)
|
||||||
{
|
{
|
||||||
RAND_bytes (m_NonZeroRandomBuffer, TUNNEL_DATA_MAX_PAYLOAD_SIZE);
|
RAND_bytes (m_NonZeroRandomBuffer, TUNNEL_DATA_MAX_PAYLOAD_SIZE);
|
||||||
for (size_t i = 0; i < TUNNEL_DATA_MAX_PAYLOAD_SIZE; i++)
|
for (size_t i = 0; i < TUNNEL_DATA_MAX_PAYLOAD_SIZE; i++)
|
||||||
@ -165,7 +165,6 @@ namespace tunnel
|
|||||||
|
|
||||||
m_CurrentTunnelDataMsg->offset = m_CurrentTunnelDataMsg->len - TUNNEL_DATA_MSG_SIZE - I2NP_HEADER_SIZE;
|
m_CurrentTunnelDataMsg->offset = m_CurrentTunnelDataMsg->len - TUNNEL_DATA_MSG_SIZE - I2NP_HEADER_SIZE;
|
||||||
uint8_t * buf = m_CurrentTunnelDataMsg->GetPayload ();
|
uint8_t * buf = m_CurrentTunnelDataMsg->GetPayload ();
|
||||||
htobe32buf (buf, m_TunnelID);
|
|
||||||
RAND_bytes (buf + 4, 16); // original IV
|
RAND_bytes (buf + 4, 16); // original IV
|
||||||
memcpy (payload + size, buf + 4, 16); // copy IV for checksum
|
memcpy (payload + size, buf + 4, 16); // copy IV for checksum
|
||||||
uint8_t hash[32];
|
uint8_t hash[32];
|
||||||
@ -203,15 +202,18 @@ namespace tunnel
|
|||||||
void TunnelGateway::SendBuffer ()
|
void TunnelGateway::SendBuffer ()
|
||||||
{
|
{
|
||||||
m_Buffer.CompleteCurrentTunnelDataMessage ();
|
m_Buffer.CompleteCurrentTunnelDataMessage ();
|
||||||
const auto & tunnelMsgs = m_Buffer.GetTunnelDataMsgs ();
|
std::vector<std::shared_ptr<I2NPMessage> > newTunnelMsgs;
|
||||||
for (auto& tunnelMsg : tunnelMsgs)
|
for (auto& tunnelMsg : m_Buffer.GetTunnelDataMsgs ())
|
||||||
{
|
{
|
||||||
m_Tunnel->EncryptTunnelMsg (tunnelMsg, tunnelMsg);
|
auto newMsg = CreateEmptyTunnelDataMsg ();
|
||||||
tunnelMsg->FillI2NPMessageHeader (eI2NPTunnelData);
|
m_Tunnel->EncryptTunnelMsg (tunnelMsg, newMsg);
|
||||||
|
htobe32buf (newMsg->GetPayload (), m_Tunnel->GetNextTunnelID ());
|
||||||
|
newMsg->FillI2NPMessageHeader (eI2NPTunnelData);
|
||||||
|
newTunnelMsgs.push_back (newMsg);
|
||||||
m_NumSentBytes += TUNNEL_DATA_MSG_SIZE;
|
m_NumSentBytes += TUNNEL_DATA_MSG_SIZE;
|
||||||
}
|
}
|
||||||
i2p::transport::transports.SendMessages (m_Tunnel->GetNextIdentHash (), tunnelMsgs);
|
|
||||||
m_Buffer.ClearTunnelDataMsgs ();
|
m_Buffer.ClearTunnelDataMsgs ();
|
||||||
|
i2p::transport::transports.SendMessages (m_Tunnel->GetNextIdentHash (), newTunnelMsgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,10 +14,10 @@ namespace tunnel
|
|||||||
class TunnelGatewayBuffer
|
class TunnelGatewayBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TunnelGatewayBuffer (uint32_t tunnelID);
|
TunnelGatewayBuffer ();
|
||||||
~TunnelGatewayBuffer ();
|
~TunnelGatewayBuffer ();
|
||||||
void PutI2NPMsg (const TunnelMessageBlock& block);
|
void PutI2NPMsg (const TunnelMessageBlock& block);
|
||||||
const std::vector<std::shared_ptr<I2NPMessage> >& GetTunnelDataMsgs () const { return m_TunnelDataMsgs; };
|
const std::vector<std::shared_ptr<const I2NPMessage> >& GetTunnelDataMsgs () const { return m_TunnelDataMsgs; };
|
||||||
void ClearTunnelDataMsgs ();
|
void ClearTunnelDataMsgs ();
|
||||||
void CompleteCurrentTunnelDataMessage ();
|
void CompleteCurrentTunnelDataMessage ();
|
||||||
|
|
||||||
@ -27,8 +27,7 @@ namespace tunnel
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
uint32_t m_TunnelID;
|
std::vector<std::shared_ptr<const I2NPMessage> > m_TunnelDataMsgs;
|
||||||
std::vector<std::shared_ptr<I2NPMessage> > m_TunnelDataMsgs;
|
|
||||||
std::shared_ptr<I2NPMessage> m_CurrentTunnelDataMsg;
|
std::shared_ptr<I2NPMessage> m_CurrentTunnelDataMsg;
|
||||||
size_t m_RemainingSize;
|
size_t m_RemainingSize;
|
||||||
uint8_t m_NonZeroRandomBuffer[TUNNEL_DATA_MAX_PAYLOAD_SIZE];
|
uint8_t m_NonZeroRandomBuffer[TUNNEL_DATA_MAX_PAYLOAD_SIZE];
|
||||||
@ -39,7 +38,7 @@ namespace tunnel
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
TunnelGateway (TunnelBase * tunnel):
|
TunnelGateway (TunnelBase * tunnel):
|
||||||
m_Tunnel (tunnel), m_Buffer (tunnel->GetNextTunnelID ()), m_NumSentBytes (0) {};
|
m_Tunnel (tunnel), m_NumSentBytes (0) {};
|
||||||
void SendTunnelDataMsg (const TunnelMessageBlock& block);
|
void SendTunnelDataMsg (const TunnelMessageBlock& block);
|
||||||
void PutTunnelDataMsg (const TunnelMessageBlock& block);
|
void PutTunnelDataMsg (const TunnelMessageBlock& block);
|
||||||
void SendBuffer ();
|
void SendBuffer ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user