|
|
@ -295,7 +295,8 @@ namespace data |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
r = std::make_shared<RouterInfo> (buf, len); |
|
|
|
r = std::make_shared<RouterInfo> (buf, len); |
|
|
|
if (!r->IsUnreachable () && r->HasValidAddresses ()) |
|
|
|
if (!r->IsUnreachable () && r->HasValidAddresses () && |
|
|
|
|
|
|
|
i2p::util::GetMillisecondsSinceEpoch () + NETDB_EXPIRATION_TIMEOUT_THRESHOLD*1000LL > r->GetTimestamp ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool inserted = false; |
|
|
|
bool inserted = false; |
|
|
|
{ |
|
|
|
{ |
|
|
@ -365,15 +366,16 @@ namespace data |
|
|
|
|
|
|
|
|
|
|
|
bool NetDb::AddLeaseSet2 (const IdentHash& ident, const uint8_t * buf, int len, uint8_t storeType) |
|
|
|
bool NetDb::AddLeaseSet2 (const IdentHash& ident, const uint8_t * buf, int len, uint8_t storeType) |
|
|
|
{ |
|
|
|
{ |
|
|
|
std::unique_lock<std::mutex> lock(m_LeaseSetsMutex); |
|
|
|
|
|
|
|
auto leaseSet = std::make_shared<LeaseSet2> (storeType, buf, len, false); // we don't need leases in netdb
|
|
|
|
auto leaseSet = std::make_shared<LeaseSet2> (storeType, buf, len, false); // we don't need leases in netdb
|
|
|
|
if (leaseSet->IsValid ()) |
|
|
|
if (leaseSet->IsValid ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
std::unique_lock<std::mutex> lock(m_LeaseSetsMutex); |
|
|
|
auto it = m_LeaseSets.find(ident); |
|
|
|
auto it = m_LeaseSets.find(ident); |
|
|
|
if (it == m_LeaseSets.end () || it->second->GetStoreType () != storeType || |
|
|
|
if (it == m_LeaseSets.end () || it->second->GetStoreType () != storeType || |
|
|
|
leaseSet->GetPublishedTimestamp () > it->second->GetPublishedTimestamp ()) |
|
|
|
leaseSet->GetPublishedTimestamp () > it->second->GetPublishedTimestamp ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (leaseSet->IsPublic () && !leaseSet->IsExpired ()) |
|
|
|
if (leaseSet->IsPublic () && !leaseSet->IsExpired () && |
|
|
|
|
|
|
|
i2p::util::GetSecondsSinceEpoch () + NETDB_EXPIRATION_TIMEOUT_THRESHOLD > leaseSet->GetPublishedTimestamp ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// TODO: implement actual update
|
|
|
|
// TODO: implement actual update
|
|
|
|
LogPrint (eLogInfo, "NetDb: LeaseSet2 updated: ", ident.ToBase32()); |
|
|
|
LogPrint (eLogInfo, "NetDb: LeaseSet2 updated: ", ident.ToBase32()); |
|
|
@ -382,7 +384,7 @@ namespace data |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
LogPrint (eLogWarning, "NetDb: Unpublished or expired LeaseSet2 received: ", ident.ToBase32()); |
|
|
|
LogPrint (eLogWarning, "NetDb: Unpublished or expired or future LeaseSet2 received: ", ident.ToBase32()); |
|
|
|
m_LeaseSets.erase (ident); |
|
|
|
m_LeaseSets.erase (ident); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -494,8 +496,7 @@ namespace data |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto r = std::make_shared<RouterInfo>(path); |
|
|
|
auto r = std::make_shared<RouterInfo>(path); |
|
|
|
if (r->GetRouterIdentity () && !r->IsUnreachable () && r->HasValidAddresses () && |
|
|
|
if (r->GetRouterIdentity () && !r->IsUnreachable () && r->HasValidAddresses () && |
|
|
|
ts < r->GetTimestamp () + 24*60*60*NETDB_MAX_OFFLINE_EXPIRATION_TIMEOUT*1000LL && // too old
|
|
|
|
ts < r->GetTimestamp () + 24*60*60*NETDB_MAX_OFFLINE_EXPIRATION_TIMEOUT*1000LL) // too old
|
|
|
|
ts + NETDB_EXPIRATION_TIMEOUT_THRESHOLD*1000LL > r->GetTimestamp ()) // from future
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
r->DeleteBuffer (); |
|
|
|
r->DeleteBuffer (); |
|
|
|
if (m_RouterInfos.emplace (r->GetIdentHash (), r).second) |
|
|
|
if (m_RouterInfos.emplace (r->GetIdentHash (), r).second) |
|
|
|