mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-09 15:50:26 +03:00
Drop for tunnel and encrypted messages
This commit is contained in:
parent
85f5f5b91e
commit
e40b656ecf
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2023, 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
|
||||||
*
|
*
|
||||||
@ -1171,7 +1171,7 @@ namespace garlic
|
|||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<I2NPMessage> WrapECIESX25519MessageForRouter (std::shared_ptr<const I2NPMessage> msg, const uint8_t * routerPublicKey)
|
std::shared_ptr<I2NPMessage> WrapECIESX25519MessageForRouter (std::shared_ptr<I2NPMessage> msg, const uint8_t * routerPublicKey)
|
||||||
{
|
{
|
||||||
// Noise_N, we are Alice, routerPublicKey is Bob's
|
// Noise_N, we are Alice, routerPublicKey is Bob's
|
||||||
i2p::crypto::NoiseSymmetricState noiseState;
|
i2p::crypto::NoiseSymmetricState noiseState;
|
||||||
@ -1205,6 +1205,12 @@ namespace garlic
|
|||||||
htobe32buf (m->GetPayload (), offset);
|
htobe32buf (m->GetPayload (), offset);
|
||||||
m->len += offset + 4;
|
m->len += offset + 4;
|
||||||
m->FillI2NPMessageHeader (eI2NPGarlic);
|
m->FillI2NPMessageHeader (eI2NPGarlic);
|
||||||
|
if (msg->onDrop)
|
||||||
|
{
|
||||||
|
// move onDrop to the wrapping I2NP messages
|
||||||
|
m->onDrop = msg->onDrop;
|
||||||
|
msg->onDrop = nullptr;
|
||||||
|
}
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
@ -246,7 +246,7 @@ namespace garlic
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::shared_ptr<I2NPMessage> WrapECIESX25519Message (std::shared_ptr<const I2NPMessage> msg, const uint8_t * key, uint64_t tag);
|
std::shared_ptr<I2NPMessage> WrapECIESX25519Message (std::shared_ptr<const I2NPMessage> msg, const uint8_t * key, uint64_t tag);
|
||||||
std::shared_ptr<I2NPMessage> WrapECIESX25519MessageForRouter (std::shared_ptr<const I2NPMessage> msg, const uint8_t * routerPublicKey);
|
std::shared_ptr<I2NPMessage> WrapECIESX25519MessageForRouter (std::shared_ptr<I2NPMessage> msg, const uint8_t * routerPublicKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -749,6 +749,7 @@ namespace data
|
|||||||
if (outbound && inbound)
|
if (outbound && inbound)
|
||||||
{
|
{
|
||||||
auto msg = dest->CreateRequestMessage (floodfill, inbound);
|
auto msg = dest->CreateRequestMessage (floodfill, inbound);
|
||||||
|
msg->onDrop = [this, dest]() { this->m_Requests.SendNextRequest (dest); };
|
||||||
outbound->SendTunnelDataMsgTo (floodfill->GetIdentHash (), 0,
|
outbound->SendTunnelDataMsgTo (floodfill->GetIdentHash (), 0,
|
||||||
i2p::garlic::WrapECIESX25519MessageForRouter (msg, floodfill->GetIdentity ()->GetEncryptionPublicKey ()));
|
i2p::garlic::WrapECIESX25519MessageForRouter (msg, floodfill->GetIdentity ()->GetEncryptionPublicKey ()));
|
||||||
}
|
}
|
||||||
|
@ -202,6 +202,7 @@ namespace data
|
|||||||
{
|
{
|
||||||
LogPrint (eLogDebug, "NetDbReq: Try ", dest->GetDestination (), " at ", count, " floodfill ", nextFloodfill->GetIdentHash ().ToBase64 ());
|
LogPrint (eLogDebug, "NetDbReq: Try ", dest->GetDestination (), " at ", count, " floodfill ", nextFloodfill->GetIdentHash ().ToBase64 ());
|
||||||
auto msg = dest->CreateRequestMessage (nextFloodfill, inbound);
|
auto msg = dest->CreateRequestMessage (nextFloodfill, inbound);
|
||||||
|
msg->onDrop = [this, dest]() { this->SendNextRequest (dest); };
|
||||||
outbound->SendTunnelDataMsgTo (nextFloodfill->GetIdentHash (), 0,
|
outbound->SendTunnelDataMsgTo (nextFloodfill->GetIdentHash (), 0,
|
||||||
i2p::garlic::WrapECIESX25519MessageForRouter (msg, nextFloodfill->GetIdentity ()->GetEncryptionPublicKey ()));
|
i2p::garlic::WrapECIESX25519MessageForRouter (msg, nextFloodfill->GetIdentity ()->GetEncryptionPublicKey ()));
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user