diff --git a/NetDb.cpp b/NetDb.cpp index 35377e99..ff166746 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -455,7 +455,16 @@ namespace data // request RouterInfo directly RequestedDestination * dest = CreateRequestedDestination (destination, false); if (requestComplete) - dest->SetRequestComplete (requestComplete); + { + if (dest->IsRequestComplete ()) // if set already + { + LogPrint (eLogWarning, "Destination ", destination.ToBase64(), " is requested already"); + requestComplete (nullptr); // TODO: implement it better + return; + } + else + dest->SetRequestComplete (requestComplete); + } auto floodfill = GetClosestFloodfill (destination, dest->GetExcludedPeers ()); if (floodfill) transports.SendMessage (floodfill->GetIdentHash (), dest->CreateRequestMessage (floodfill->GetIdentHash ())); diff --git a/NetDb.h b/NetDb.h index 2c00d3c0..a1287d63 100644 --- a/NetDb.h +++ b/NetDb.h @@ -42,6 +42,7 @@ namespace data I2NPMessage * CreateRequestMessage (const IdentHash& floodfill); void SetRequestComplete (const RequestComplete& requestComplete) { m_RequestComplete = requestComplete; }; + bool IsRequestComplete () const { return m_RequestComplete != nullptr; }; void Success (std::shared_ptr r); void Fail ();