mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 08:14:15 +00:00
hold previous lookup response
This commit is contained in:
parent
447566fe14
commit
c5644ee3f9
43
NetDb.cpp
43
NetDb.cpp
@ -118,6 +118,7 @@ namespace data
|
|||||||
{
|
{
|
||||||
SaveUpdated ();
|
SaveUpdated ();
|
||||||
ManageLeaseSets ();
|
ManageLeaseSets ();
|
||||||
|
ManageLookupResponses ();
|
||||||
}
|
}
|
||||||
lastSave = ts;
|
lastSave = ts;
|
||||||
}
|
}
|
||||||
@ -671,13 +672,31 @@ namespace data
|
|||||||
if (!replyMsg)
|
if (!replyMsg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "NetDb: Requested ", key, " not found. ", numExcluded, " excluded");
|
LogPrint (eLogWarning, "NetDb: Requested ", key, " not found. ", numExcluded, " excluded");
|
||||||
std::set<IdentHash> excludedRouters;
|
// find or cleate response
|
||||||
for (int i = 0; i < numExcluded; i++)
|
std::vector<IdentHash> closestFloodfills;
|
||||||
{
|
bool found = false;
|
||||||
excludedRouters.insert (excluded);
|
if (!numExcluded)
|
||||||
excluded += 32;
|
{
|
||||||
|
auto it = m_LookupResponses.find (ident);
|
||||||
|
if (it != m_LookupResponses.end ())
|
||||||
|
{
|
||||||
|
closestFloodfills = it->second.first;
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
std::set<IdentHash> excludedRouters;
|
||||||
|
for (int i = 0; i < numExcluded; i++)
|
||||||
|
{
|
||||||
|
excludedRouters.insert (excluded);
|
||||||
|
excluded += 32;
|
||||||
|
}
|
||||||
|
closestFloodfills = GetClosestFloodfills (ident, 3, excludedRouters, true);
|
||||||
|
if (!numExcluded) // save if no excluded
|
||||||
|
m_LookupResponses[ident] = std::make_pair(closestFloodfills, i2p::util::GetSecondsSinceEpoch ());
|
||||||
}
|
}
|
||||||
replyMsg = CreateDatabaseSearchReply (ident, GetClosestFloodfills (ident, 3, excludedRouters, true));
|
replyMsg = CreateDatabaseSearchReply (ident, closestFloodfills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -972,5 +991,17 @@ namespace data
|
|||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetDb::ManageLookupResponses ()
|
||||||
|
{
|
||||||
|
auto ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
|
for (auto it = m_LookupResponses.begin (); it != m_LookupResponses.end ();)
|
||||||
|
{
|
||||||
|
if (ts > it->second.second + 180) // 3 minutes
|
||||||
|
it = m_LookupResponses.erase (it);
|
||||||
|
else
|
||||||
|
it++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
NetDb.h
3
NetDb.h
@ -84,6 +84,7 @@ namespace data
|
|||||||
void Publish ();
|
void Publish ();
|
||||||
void ManageLeaseSets ();
|
void ManageLeaseSets ();
|
||||||
void ManageRequests ();
|
void ManageRequests ();
|
||||||
|
void ManageLookupResponses ();
|
||||||
|
|
||||||
template<typename Filter>
|
template<typename Filter>
|
||||||
std::shared_ptr<const RouterInfo> GetRandomRouter (Filter filter) const;
|
std::shared_ptr<const RouterInfo> GetRandomRouter (Filter filter) const;
|
||||||
@ -108,6 +109,8 @@ namespace data
|
|||||||
|
|
||||||
friend class NetDbRequests;
|
friend class NetDbRequests;
|
||||||
NetDbRequests m_Requests;
|
NetDbRequests m_Requests;
|
||||||
|
|
||||||
|
std::map<IdentHash, std::pair<std::vector<IdentHash>, uint64_t> > m_LookupResponses; // ident->(closest FFs, timestamp)
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NetDb netdb;
|
extern NetDb netdb;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user