diff --git a/Garlic.cpp b/Garlic.cpp index 7d0e703f..f9b88126 100644 --- a/Garlic.cpp +++ b/Garlic.cpp @@ -109,7 +109,7 @@ namespace garlic } if (msg) // next clove message ifself if presented { - size += CreateGarlicClove (payload + size, msg, true); + size += CreateGarlicClove (payload + size, msg, m_Destination->IsDestination ()); (*numCloves)++; } diff --git a/NetDb.cpp b/NetDb.cpp index 3f05dd7d..77e2ce72 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -8,6 +8,7 @@ #include "I2NPProtocol.h" #include "Tunnel.h" #include "RouterContext.h" +#include "Garlic.h" #include "NetDb.h" namespace i2p @@ -197,15 +198,25 @@ namespace data LogPrint (deletedCount," routers deleted"); } - void NetDb::RequestDestination (const char * b32, const uint8_t * router) + void NetDb::RequestDestination (const char * b32) { uint8_t destination[32]; Base32ToByteStream (b32, strlen(b32), destination, 32); - RequestDestination (destination, router); + RequestDestination (destination, true); + } + + void NetDb::RequestDestination (const IdentHash& destination, bool isLeaseSet) + { + auto floodfill= GetRandomNTCPRouter (true); + if (floodfill) + RequestDestination (destination, floodfill, isLeaseSet); + else + LogPrint ("No floodfill routers found"); } - void NetDb::RequestDestination (const uint8_t * destination, const uint8_t * router) + void NetDb::RequestDestination (const IdentHash& destination, const RouterInfo * floodfill, bool isLeaseSet) { + if (!floodfill) return; i2p::tunnel::OutboundTunnel * outbound = i2p::tunnel::tunnels.GetNextOutboundTunnel (); if (outbound) { @@ -214,7 +225,9 @@ namespace data { I2NPMessage * msg = i2p::CreateDatabaseLookupMsg (destination, inbound->GetNextIdentHash (), inbound->GetNextTunnelID ()); - outbound->SendTunnelDataMsg (router, 0, msg); + if (isLeaseSet) // wrap lookup message into garlic + msg = i2p::garlic::routing.WrapSingleMessage (floodfill, msg); + outbound->SendTunnelDataMsg (floodfill->GetIdentHash (), 0, msg); } else LogPrint ("No inbound tunnels found"); @@ -222,11 +235,6 @@ namespace data else LogPrint ("No outbound tunnels found"); } - - void NetDb::RequestDestination (const IdentHash& destination) - { - RequestDestination ((const uint8_t *)destination, GetRandomNTCPRouter (true)->GetIdentHash ()); - } void NetDb::HandleDatabaseStoreMsg (uint8_t * buf, size_t len) { diff --git a/NetDb.h b/NetDb.h index 3f644c7d..ca63a239 100644 --- a/NetDb.h +++ b/NetDb.h @@ -30,9 +30,9 @@ namespace data RouterInfo * FindRouter (const IdentHash& ident) const; LeaseSet * FindLeaseSet (const IdentHash& destination) const; - void RequestDestination (const char * b32, const uint8_t * router); // in base32 - void RequestDestination (const uint8_t * destination, const uint8_t * router); - void RequestDestination (const IdentHash& destination); + void RequestDestination (const char * b32); // in base32 + void RequestDestination (const IdentHash& destination, bool isLeaseSet = false); + void RequestDestination (const IdentHash& destination, const RouterInfo * floodfill, bool isLeaseSet = false); void HandleDatabaseStoreMsg (uint8_t * buf, size_t len); void HandleDatabaseSearchReplyMsg (I2NPMessage * msg);