diff --git a/TransitTunnel.h b/TransitTunnel.h index e71c16e1..3d41e4fe 100644 --- a/TransitTunnel.h +++ b/TransitTunnel.h @@ -21,13 +21,13 @@ namespace tunnel const uint8_t * nextIdent, uint32_t nextTunnelID, const uint8_t * layerKey,const uint8_t * ivKey); - virtual void HandleTunnelDataMsg (i2p::I2NPMessage * tunnelMsg); virtual void SendTunnelDataMsg (i2p::I2NPMessage * msg); virtual size_t GetNumTransmittedBytes () const { return m_NumTransmittedBytes; }; uint32_t GetTunnelID () const { return m_TunnelID; }; // implements TunnelBase + void HandleTunnelDataMsg (i2p::I2NPMessage * tunnelMsg); void EncryptTunnelMsg (I2NPMessage * tunnelMsg); uint32_t GetNextTunnelID () const { return m_NextTunnelID; }; const i2p::data::IdentHash& GetNextIdentHash () const { return m_NextIdent; }; diff --git a/Tunnel.cpp b/Tunnel.cpp index 516a0c3d..5b672849 100644 --- a/Tunnel.cpp +++ b/Tunnel.cpp @@ -189,6 +189,12 @@ namespace tunnel m_Gateway.SendBuffer (); } + void OutboundTunnel::HandleTunnelDataMsg (i2p::I2NPMessage * tunnelMsg) + { + LogPrint (eLogError, "Incoming message for outbound tunnel ", GetTunnelID ()); + DeleteI2NPMessage (tunnelMsg); + } + Tunnels tunnels; Tunnels::Tunnels (): m_IsRunning (false), m_Thread (nullptr) @@ -344,20 +350,17 @@ namespace tunnel while (msg) { uint32_t tunnelID = bufbe32toh (msg->GetPayload ()); - InboundTunnel * tunnel = GetInboundTunnel (tunnelID); + TunnelBase * tunnel = GetInboundTunnel (tunnelID); + if (!tunnel) + tunnel = GetTransitTunnel (tunnelID); if (tunnel) tunnel->HandleTunnelDataMsg (msg); - else + else { - TransitTunnel * transitTunnel = GetTransitTunnel (tunnelID); - if (transitTunnel) - transitTunnel->HandleTunnelDataMsg (msg); - else - { - LogPrint ("Tunnel ", tunnelID, " not found"); - i2p::DeleteI2NPMessage (msg); - } + LogPrint ("Tunnel ", tunnelID, " not found"); + DeleteI2NPMessage (msg); } + msg = m_Queue.Get (); } diff --git a/Tunnel.h b/Tunnel.h index 527e8827..91d6330a 100644 --- a/Tunnel.h +++ b/Tunnel.h @@ -85,6 +85,7 @@ namespace tunnel size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); }; // implements TunnelBase + void HandleTunnelDataMsg (i2p::I2NPMessage * tunnelMsg); uint32_t GetTunnelID () const { return GetNextTunnelID (); }; private: diff --git a/TunnelBase.h b/TunnelBase.h index 24704d46..affeb6f9 100644 --- a/TunnelBase.h +++ b/TunnelBase.h @@ -36,6 +36,7 @@ namespace tunnel TunnelBase (): m_CreationTime (i2p::util::GetSecondsSinceEpoch ()) {}; virtual ~TunnelBase () {}; + virtual void HandleTunnelDataMsg (i2p::I2NPMessage * tunnelMsg) = 0; virtual void EncryptTunnelMsg (I2NPMessage * tunnelMsg) = 0; virtual uint32_t GetNextTunnelID () const = 0; virtual const i2p::data::IdentHash& GetNextIdentHash () const = 0;