|
|
@ -118,7 +118,6 @@ namespace data |
|
|
|
{ |
|
|
|
{ |
|
|
|
SaveUpdated (); |
|
|
|
SaveUpdated (); |
|
|
|
ManageLeaseSets (); |
|
|
|
ManageLeaseSets (); |
|
|
|
ManageLookupResponses (); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
lastSave = ts; |
|
|
|
lastSave = ts; |
|
|
|
} |
|
|
|
} |
|
|
@ -857,37 +856,17 @@ namespace data |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!replyMsg) |
|
|
|
if (!replyMsg) |
|
|
|
{ |
|
|
|
{ |
|
|
|
LogPrint (eLogWarning, "NetDb: Requested ", key, " not found, ", numExcluded, " peers excluded"); |
|
|
|
std::set<IdentHash> excludedRouters; |
|
|
|
// find or cleate response
|
|
|
|
const uint8_t * exclude_ident = excluded; |
|
|
|
std::vector<IdentHash> closestFloodfills; |
|
|
|
for (int i = 0; i < numExcluded; i++) |
|
|
|
bool found = false; |
|
|
|
{ |
|
|
|
if (!numExcluded) |
|
|
|
excludedRouters.insert (exclude_ident); |
|
|
|
{ |
|
|
|
exclude_ident += 32; |
|
|
|
auto it = m_LookupResponses.find (ident); |
|
|
|
|
|
|
|
if (it != m_LookupResponses.end ()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
closestFloodfills = it->second.first; |
|
|
|
|
|
|
|
found = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!found) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
std::set<IdentHash> excludedRouters; |
|
|
|
|
|
|
|
const uint8_t * exclude_ident = excluded; |
|
|
|
|
|
|
|
for (int i = 0; i < numExcluded; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
excludedRouters.insert (exclude_ident); |
|
|
|
|
|
|
|
exclude_ident += 32; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
closestFloodfills = GetClosestFloodfills (ident, 3, excludedRouters, true); |
|
|
|
|
|
|
|
if (!numExcluded) // save if no excluded
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
m_LookupResponses[ident] = std::make_pair(closestFloodfills, i2p::util::GetSecondsSinceEpoch ()); |
|
|
|
|
|
|
|
if (lookupType != DATABASE_LOOKUP_TYPE_EXPLORATORY_LOOKUP && !closestFloodfills.empty ()) // we are not closest
|
|
|
|
|
|
|
|
RequestDestination (ident); // try to request for first time only
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
auto closestFloodfills = GetClosestFloodfills (ident, 3, excludedRouters, true); |
|
|
|
|
|
|
|
if (closestFloodfills.empty ()) |
|
|
|
|
|
|
|
LogPrint (eLogWarning, "NetDb: Requested ", key, " not found, ", numExcluded, " peers excluded"); |
|
|
|
replyMsg = CreateDatabaseSearchReply (ident, closestFloodfills); |
|
|
|
replyMsg = CreateDatabaseSearchReply (ident, closestFloodfills); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1195,17 +1174,5 @@ 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 + 120) // 2 minutes
|
|
|
|
|
|
|
|
it = m_LookupResponses.erase (it); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
++it; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|