diff --git a/NetDb.cpp b/NetDb.cpp index cf1d6382..9b454598 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -1,5 +1,6 @@ #include "I2PEndian.h" #include +#include #include #include #include "base64.h" @@ -313,7 +314,8 @@ namespace data { i2p::tunnel::OutboundTunnel * outbound = dest->GetLastOutboundTunnel (); const i2p::tunnel::InboundTunnel * inbound = dest->GetLastReplyTunnel (); - + std::vector msgs; + for (int i = 0; i < num; i++) { uint8_t * router = buf + 33 + i*32; @@ -332,7 +334,11 @@ namespace data RequestedDestination * d1 = CreateRequestedDestination (router, false, false); d1->SetLastOutboundTunnel (outbound); auto msg = d1->CreateRequestMessage (dest->GetLastRouter (), dest->GetLastReplyTunnel ()); - outbound->GetTunnelGateway ().PutTunnelDataMsg (dest->GetLastRouter ()->GetIdentHash (), 0, msg); + msgs.push_back (i2p::tunnel::TunnelMessageBlock + { + i2p::tunnel::eDeliveryTypeRouter, + dest->GetLastRouter ()->GetIdentHash (), 0, msg + }); } } else @@ -351,7 +357,11 @@ namespace data { // request destination auto msg = dest->CreateRequestMessage (r, dest->GetLastReplyTunnel ()); - outbound->GetTunnelGateway ().PutTunnelDataMsg (r->GetIdentHash (), 0, msg); + msgs.push_back (i2p::tunnel::TunnelMessageBlock + { + i2p::tunnel::eDeliveryTypeRouter, + r->GetIdentHash (), 0, msg + }); } } else @@ -361,15 +371,18 @@ namespace data RequestedDestination * d2 = CreateRequestedDestination (router, false, false); d2->SetLastOutboundTunnel (outbound); I2NPMessage * msg = d2->CreateRequestMessage (dest->GetLastRouter (), inbound); - outbound->GetTunnelGateway ().PutTunnelDataMsg ( - dest->GetLastRouter ()->GetIdentHash (), 0, msg); + msgs.push_back (i2p::tunnel::TunnelMessageBlock + { + i2p::tunnel::eDeliveryTypeRouter, + dest->GetLastRouter ()->GetIdentHash (), 0, msg + }); } } } } - if (outbound) - outbound->GetTunnelGateway ().SendBuffer (); + if (msgs.size () > 0) + outbound->SendTunnelDataMsg (msgs); } else { @@ -398,12 +411,21 @@ namespace data rnd.GenerateBlock (randomHash, 32); RequestedDestination * dest = CreateRequestedDestination (IdentHash (randomHash), false, true); dest->SetLastOutboundTunnel (outbound); - - outbound->GetTunnelGateway ().PutTunnelDataMsg (floodfill->GetIdentHash (), 0, - CreateDatabaseStoreMsg ()); // tell floodfill about us - outbound->GetTunnelGateway ().PutTunnelDataMsg (floodfill->GetIdentHash (), 0, - dest->CreateRequestMessage (floodfill, inbound)); // explore - outbound->GetTunnelGateway ().SendBuffer (); + + std::vector msgs; + msgs.push_back (i2p::tunnel::TunnelMessageBlock + { + i2p::tunnel::eDeliveryTypeRouter, + floodfill->GetIdentHash (), 0, + CreateDatabaseStoreMsg () // tell floodfill about us + }); + msgs.push_back (i2p::tunnel::TunnelMessageBlock + { + i2p::tunnel::eDeliveryTypeRouter, + floodfill->GetIdentHash (), 0, + dest->CreateRequestMessage (floodfill, inbound) // explore + }); + outbound->SendTunnelDataMsg (msgs); } } } diff --git a/Tunnel.h b/Tunnel.h index 6c4b7d30..a189da0d 100644 --- a/Tunnel.h +++ b/Tunnel.h @@ -68,7 +68,6 @@ namespace tunnel 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 (); }; // implements TunnelBase diff --git a/TunnelBase.h b/TunnelBase.h index f59d995f..6be902ca 100644 --- a/TunnelBase.h +++ b/TunnelBase.h @@ -23,8 +23,8 @@ namespace tunnel struct TunnelMessageBlock { TunnelDeliveryType deliveryType; - uint32_t tunnelID; i2p::data::IdentHash hash; + uint32_t tunnelID; I2NPMessage * data; };