diff --git a/Tunnel.cpp b/Tunnel.cpp index c5f9730f..f92337f7 100644 --- a/Tunnel.cpp +++ b/Tunnel.cpp @@ -138,13 +138,29 @@ namespace tunnel { m_Gateway.SendTunnelDataMsg (gwHash, gwTunnel, msg); } - - void OutboundTunnel::SendTunnelDataMsg (i2p::I2NPMessage * msg) + + void OutboundTunnel::SendTunnelDataMsg (std::vector msgs) { - SendTunnelDataMsg (nullptr, 0, msg); + for (auto& it : msgs) + { + switch (it.deliveryType) + { + case eDeliveryTypeLocal: + m_Gateway.SendTunnelDataMsg (nullptr, 0, it.data); + break; + case eDeliveryTypeTunnel: + m_Gateway.SendTunnelDataMsg (it.hash, it.tunnelID, it.data); + break; + case eDeliveryTypeRouter: + m_Gateway.SendTunnelDataMsg (it.hash, 0, it.data); + break; + default: + LogPrint ("Unexpected delivery type ", (int)it.deliveryType); + } + } + m_Gateway.SendBuffer (); } - - + Tunnels tunnels; Tunnels::Tunnels (): m_IsRunning (false), m_IsTunnelCreated (false), diff --git a/Tunnel.h b/Tunnel.h index 3f94d787..6c4b7d30 100644 --- a/Tunnel.h +++ b/Tunnel.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -64,9 +65,9 @@ namespace tunnel OutboundTunnel (TunnelConfig * config): Tunnel (config), m_Gateway (this) {}; - void SendTunnelDataMsg (i2p::I2NPMessage * msg); //local void SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, i2p::I2NPMessage * msg); - + void SendTunnelDataMsg (std::vector msgs); // multiple messages + TunnelGateway& GetTunnelGateway () { return m_Gateway; }; size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); }; diff --git a/TunnelBase.h b/TunnelBase.h index 49be29de..f59d995f 100644 --- a/TunnelBase.h +++ b/TunnelBase.h @@ -4,6 +4,7 @@ #include #include "Timestamp.h" #include "I2NPProtocol.h" +#include "Identity.h" namespace i2p { @@ -23,7 +24,7 @@ namespace tunnel { TunnelDeliveryType deliveryType; uint32_t tunnelID; - uint8_t hash[32]; + i2p::data::IdentHash hash; I2NPMessage * data; }; diff --git a/TunnelEndpoint.cpp b/TunnelEndpoint.cpp index 45aa4373..0e23a837 100644 --- a/TunnelEndpoint.cpp +++ b/TunnelEndpoint.cpp @@ -41,12 +41,12 @@ namespace tunnel LogPrint ("Delivery type tunnel"); m.tunnelID = be32toh (*(uint32_t *)fragment); fragment += 4; // tunnelID - memcpy (m.hash, fragment, 32); + m.hash = i2p::data::IdentHash (fragment); fragment += 32; // hash break; case eDeliveryTypeRouter: // 2 LogPrint ("Delivery type router"); - memcpy (m.hash, fragment, 32); + m.hash = i2p::data::IdentHash (fragment); fragment += 32; // to hash break; default: