From cd8e9e59fa75476aae649af1e065488665855b65 Mon Sep 17 00:00:00 2001
From: orignal <i2porignal@yandex.ru>
Date: Tue, 3 Feb 2015 16:14:33 -0500
Subject: [PATCH] don't request same RouterInfo twice

---
 NetDb.cpp | 11 ++++++++++-
 NetDb.h   |  1 +
 2 files changed, 11 insertions(+), 1 deletion(-)

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<RouterInfo> r);
 			void Fail ();