mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
pass const I2NP message to HandleTunnelDataMsg
This commit is contained in:
parent
d8cd2afd12
commit
be1a4548e6
@ -432,6 +432,13 @@ namespace i2p
|
|||||||
FillI2NPMessageHeader (msg, eI2NPTunnelData);
|
FillI2NPMessageHeader (msg, eI2NPTunnelData);
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<I2NPMessage> CreateEmptyTunnelDataMsg ()
|
||||||
|
{
|
||||||
|
I2NPMessage * msg = NewI2NPShortMessage ();
|
||||||
|
msg->len += i2p::tunnel::TUNNEL_DATA_MSG_SIZE;
|
||||||
|
return ToSharedI2NPMessage (msg);
|
||||||
|
}
|
||||||
|
|
||||||
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, const uint8_t * buf, size_t len)
|
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, const uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
|
@ -222,6 +222,7 @@ namespace tunnel
|
|||||||
|
|
||||||
I2NPMessage * CreateTunnelDataMsg (const uint8_t * buf);
|
I2NPMessage * CreateTunnelDataMsg (const uint8_t * buf);
|
||||||
I2NPMessage * CreateTunnelDataMsg (uint32_t tunnelID, const uint8_t * payload);
|
I2NPMessage * CreateTunnelDataMsg (uint32_t tunnelID, const uint8_t * payload);
|
||||||
|
std::shared_ptr<I2NPMessage> CreateEmptyTunnelDataMsg ();
|
||||||
|
|
||||||
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, const uint8_t * buf, size_t len);
|
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, const uint8_t * buf, size_t len);
|
||||||
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, I2NPMessageType msgType,
|
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, I2NPMessageType msgType,
|
||||||
|
@ -29,14 +29,15 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitTunnelParticipant::HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg)
|
void TransitTunnelParticipant::HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg)
|
||||||
{
|
{
|
||||||
EncryptTunnelMsg (tunnelMsg, tunnelMsg);
|
auto newMsg = CreateEmptyTunnelDataMsg ();
|
||||||
|
EncryptTunnelMsg (tunnelMsg, newMsg);
|
||||||
|
|
||||||
m_NumTransmittedBytes += tunnelMsg->GetLength ();
|
m_NumTransmittedBytes += tunnelMsg->GetLength ();
|
||||||
htobe32buf (tunnelMsg->GetPayload (), GetNextTunnelID ());
|
htobe32buf (newMsg->GetPayload (), GetNextTunnelID ());
|
||||||
FillI2NPMessageHeader (tunnelMsg.get (), eI2NPTunnelData); // TODO
|
FillI2NPMessageHeader (newMsg.get (), eI2NPTunnelData); // TODO
|
||||||
m_TunnelDataMsgs.push_back (tunnelMsg);
|
m_TunnelDataMsgs.push_back (newMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitTunnelParticipant::FlushTunnelDataMsgs ()
|
void TransitTunnelParticipant::FlushTunnelDataMsgs ()
|
||||||
@ -56,7 +57,7 @@ namespace tunnel
|
|||||||
LogPrint (eLogError, "We are not a gateway for transit tunnel ", m_TunnelID);
|
LogPrint (eLogError, "We are not a gateway for transit tunnel ", m_TunnelID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitTunnel::HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg)
|
void TransitTunnel::HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "Incoming tunnel message is not supported ", m_TunnelID);
|
LogPrint (eLogError, "Incoming tunnel message is not supported ", m_TunnelID);
|
||||||
}
|
}
|
||||||
@ -76,12 +77,13 @@ namespace tunnel
|
|||||||
m_Gateway.SendBuffer ();
|
m_Gateway.SendBuffer ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitTunnelEndpoint::HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg)
|
void TransitTunnelEndpoint::HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg)
|
||||||
{
|
{
|
||||||
EncryptTunnelMsg (tunnelMsg, tunnelMsg);
|
auto newMsg = CreateEmptyTunnelDataMsg ();
|
||||||
|
EncryptTunnelMsg (tunnelMsg, newMsg);
|
||||||
|
|
||||||
LogPrint (eLogDebug, "TransitTunnel endpoint for ", GetTunnelID ());
|
LogPrint (eLogDebug, "TransitTunnel endpoint for ", GetTunnelID ());
|
||||||
m_Endpoint.HandleDecryptedTunnelDataMsg (tunnelMsg);
|
m_Endpoint.HandleDecryptedTunnelDataMsg (newMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
TransitTunnel * CreateTransitTunnel (uint32_t receiveTunnelID,
|
TransitTunnel * CreateTransitTunnel (uint32_t receiveTunnelID,
|
||||||
|
@ -29,7 +29,7 @@ namespace tunnel
|
|||||||
|
|
||||||
// implements TunnelBase
|
// implements TunnelBase
|
||||||
void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg);
|
void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg);
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg);
|
void HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg);
|
||||||
void EncryptTunnelMsg (std::shared_ptr<const I2NPMessage> in, std::shared_ptr<I2NPMessage> out);
|
void EncryptTunnelMsg (std::shared_ptr<const I2NPMessage> in, std::shared_ptr<I2NPMessage> out);
|
||||||
uint32_t GetNextTunnelID () const { return m_NextTunnelID; };
|
uint32_t GetNextTunnelID () const { return m_NextTunnelID; };
|
||||||
const i2p::data::IdentHash& GetNextIdentHash () const { return m_NextIdent; };
|
const i2p::data::IdentHash& GetNextIdentHash () const { return m_NextIdent; };
|
||||||
@ -54,7 +54,7 @@ namespace tunnel
|
|||||||
~TransitTunnelParticipant ();
|
~TransitTunnelParticipant ();
|
||||||
|
|
||||||
size_t GetNumTransmittedBytes () const { return m_NumTransmittedBytes; };
|
size_t GetNumTransmittedBytes () const { return m_NumTransmittedBytes; };
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg);
|
void HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg);
|
||||||
void FlushTunnelDataMsgs ();
|
void FlushTunnelDataMsgs ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -93,7 +93,7 @@ namespace tunnel
|
|||||||
TransitTunnel (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey),
|
TransitTunnel (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey),
|
||||||
m_Endpoint (false) {}; // transit endpoint is always outbound
|
m_Endpoint (false) {}; // transit endpoint is always outbound
|
||||||
|
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg);
|
void HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg);
|
||||||
size_t GetNumTransmittedBytes () const { return m_Endpoint.GetNumReceivedBytes (); }
|
size_t GetNumTransmittedBytes () const { return m_Endpoint.GetNumReceivedBytes (); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
13
Tunnel.cpp
13
Tunnel.cpp
@ -158,12 +158,13 @@ namespace tunnel
|
|||||||
LogPrint (eLogInfo, "Can't send I2NP messages without delivery instructions");
|
LogPrint (eLogInfo, "Can't send I2NP messages without delivery instructions");
|
||||||
}
|
}
|
||||||
|
|
||||||
void InboundTunnel::HandleTunnelDataMsg (std::shared_ptr<I2NPMessage> msg)
|
void InboundTunnel::HandleTunnelDataMsg (std::shared_ptr<const I2NPMessage> msg)
|
||||||
{
|
{
|
||||||
if (IsFailed ()) SetState (eTunnelStateEstablished); // incoming messages means a tunnel is alive
|
if (IsFailed ()) SetState (eTunnelStateEstablished); // incoming messages means a tunnel is alive
|
||||||
msg->from = shared_from_this ();
|
auto newMsg = CreateEmptyTunnelDataMsg ();
|
||||||
EncryptTunnelMsg (msg, msg);
|
EncryptTunnelMsg (msg, newMsg);
|
||||||
m_Endpoint.HandleDecryptedTunnelDataMsg (msg);
|
newMsg->from = shared_from_this ();
|
||||||
|
m_Endpoint.HandleDecryptedTunnelDataMsg (newMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutboundTunnel::SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, std::shared_ptr<i2p::I2NPMessage> msg)
|
void OutboundTunnel::SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, std::shared_ptr<i2p::I2NPMessage> msg)
|
||||||
@ -196,7 +197,7 @@ namespace tunnel
|
|||||||
m_Gateway.SendBuffer ();
|
m_Gateway.SendBuffer ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutboundTunnel::HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg)
|
void OutboundTunnel::HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "Incoming message for outbound tunnel ", GetTunnelID ());
|
LogPrint (eLogError, "Incoming message for outbound tunnel ", GetTunnelID ());
|
||||||
}
|
}
|
||||||
|
4
Tunnel.h
4
Tunnel.h
@ -90,7 +90,7 @@ namespace tunnel
|
|||||||
size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); };
|
size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); };
|
||||||
|
|
||||||
// implements TunnelBase
|
// implements TunnelBase
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg);
|
void HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg);
|
||||||
uint32_t GetTunnelID () const { return GetNextTunnelID (); };
|
uint32_t GetTunnelID () const { return GetNextTunnelID (); };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -104,7 +104,7 @@ namespace tunnel
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
InboundTunnel (std::shared_ptr<const TunnelConfig> config): Tunnel (config), m_Endpoint (true) {};
|
InboundTunnel (std::shared_ptr<const TunnelConfig> config): Tunnel (config), m_Endpoint (true) {};
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<I2NPMessage> msg);
|
void HandleTunnelDataMsg (std::shared_ptr<const I2NPMessage> msg);
|
||||||
size_t GetNumReceivedBytes () const { return m_Endpoint.GetNumReceivedBytes (); };
|
size_t GetNumReceivedBytes () const { return m_Endpoint.GetNumReceivedBytes (); };
|
||||||
|
|
||||||
// implements TunnelBase
|
// implements TunnelBase
|
||||||
|
@ -37,7 +37,7 @@ namespace tunnel
|
|||||||
TunnelBase (): m_CreationTime (i2p::util::GetSecondsSinceEpoch ()) {};
|
TunnelBase (): m_CreationTime (i2p::util::GetSecondsSinceEpoch ()) {};
|
||||||
virtual ~TunnelBase () {};
|
virtual ~TunnelBase () {};
|
||||||
|
|
||||||
virtual void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> tunnelMsg) = 0;
|
virtual void HandleTunnelDataMsg (std::shared_ptr<const i2p::I2NPMessage> tunnelMsg) = 0;
|
||||||
virtual void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg) = 0;
|
virtual void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg) = 0;
|
||||||
virtual void FlushTunnelDataMsgs () {};
|
virtual void FlushTunnelDataMsgs () {};
|
||||||
virtual void EncryptTunnelMsg (std::shared_ptr<const I2NPMessage> in, std::shared_ptr<I2NPMessage> out) = 0;
|
virtual void EncryptTunnelMsg (std::shared_ptr<const I2NPMessage> in, std::shared_ptr<I2NPMessage> out) = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user