|
|
@ -305,6 +305,22 @@ namespace data |
|
|
|
if (end - contentPos >= contentLength) |
|
|
|
if (end - contentPos >= contentLength) |
|
|
|
break; // we are beyond contentLength
|
|
|
|
break; // we are beyond contentLength
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (numFiles) // check if routers are not outdated
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
auto ts = i2p::util::GetMillisecondsSinceEpoch (); |
|
|
|
|
|
|
|
int numOutdated = 0; |
|
|
|
|
|
|
|
i2p::data::netdb.VisitRouterInfos ( |
|
|
|
|
|
|
|
[&numOutdated, ts](std::shared_ptr<const RouterInfo> r) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (r && ts > r->GetTimestamp () + i2p::data::NETDB_MAX_EXPIRATION_TIMEOUT*1000LL) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LogPrint (eLogError, "Reseed: router ", r->GetIdentHash().ToBase64 (), " is outdated by ", (ts - r->GetTimestamp ())/1000LL/3600LL, " hours"); |
|
|
|
|
|
|
|
numOutdated++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
if (numOutdated > numFiles/2) // more than half
|
|
|
|
|
|
|
|
LogPrint (eLogError, "Reseed: mammoth's shit"); |
|
|
|
|
|
|
|
} |
|
|
|
return numFiles; |
|
|
|
return numFiles; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|