|
|
@ -60,6 +60,18 @@ namespace data |
|
|
|
else if (!GetRandomRouter (i2p::context.GetSharedRouterInfo (), false)) |
|
|
|
else if (!GetRandomRouter (i2p::context.GetSharedRouterInfo (), false)) |
|
|
|
Reseed (); // we don't have a router we can connect to. Trying to reseed
|
|
|
|
Reseed (); // we don't have a router we can connect to. Trying to reseed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto it = m_RouterInfos.find (i2p::context.GetIdentHash ()); |
|
|
|
|
|
|
|
if (it != m_RouterInfos.end ()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// remove own router
|
|
|
|
|
|
|
|
m_RouterInfos.erase (it); |
|
|
|
|
|
|
|
m_Floodfills.remove (it->second); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// insert own router
|
|
|
|
|
|
|
|
m_RouterInfos.emplace (i2p::context.GetIdentHash (), i2p::context.GetSharedRouterInfo ()); |
|
|
|
|
|
|
|
if (i2p::context.IsFloodfill ()) |
|
|
|
|
|
|
|
m_Floodfills.push_back (i2p::context.GetSharedRouterInfo ()); |
|
|
|
|
|
|
|
|
|
|
|
i2p::config::GetOption("persist.profiles", m_PersistProfiles); |
|
|
|
i2p::config::GetOption("persist.profiles", m_PersistProfiles); |
|
|
|
|
|
|
|
|
|
|
|
m_IsRunning = true; |
|
|
|
m_IsRunning = true; |
|
|
@ -162,10 +174,18 @@ namespace data |
|
|
|
bool publish = false; |
|
|
|
bool publish = false; |
|
|
|
if (m_PublishReplyToken) |
|
|
|
if (m_PublishReplyToken) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
// next publishing attempt
|
|
|
|
if (ts - lastPublish >= NETDB_PUBLISH_CONFIRMATION_TIMEOUT) publish = true; |
|
|
|
if (ts - lastPublish >= NETDB_PUBLISH_CONFIRMATION_TIMEOUT) publish = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (i2p::context.GetLastUpdateTime () > lastPublish || |
|
|
|
else if (i2p::context.GetLastUpdateTime () > lastPublish || |
|
|
|
ts - lastPublish >= NETDB_PUBLISH_INTERVAL) publish = true; |
|
|
|
ts - lastPublish >= NETDB_PUBLISH_INTERVAL) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// new publish
|
|
|
|
|
|
|
|
m_PublishExcluded.clear (); |
|
|
|
|
|
|
|
if (i2p::context.IsFloodfill ()) |
|
|
|
|
|
|
|
m_PublishExcluded.insert (i2p::context.GetIdentHash ()); // do publish to ourselves
|
|
|
|
|
|
|
|
publish = true; |
|
|
|
|
|
|
|
} |
|
|
|
if (publish) // update timestamp and publish
|
|
|
|
if (publish) // update timestamp and publish
|
|
|
|
{ |
|
|
|
{ |
|
|
|
i2p::context.UpdateTimestamp (ts); |
|
|
|
i2p::context.UpdateTimestamp (ts); |
|
|
@ -567,8 +587,10 @@ namespace data |
|
|
|
expirationTimeout = i2p::context.IsFloodfill () ? NETDB_FLOODFILL_EXPIRATION_TIMEOUT*1000LL : |
|
|
|
expirationTimeout = i2p::context.IsFloodfill () ? NETDB_FLOODFILL_EXPIRATION_TIMEOUT*1000LL : |
|
|
|
NETDB_MIN_EXPIRATION_TIMEOUT*1000LL + (NETDB_MAX_EXPIRATION_TIMEOUT - NETDB_MIN_EXPIRATION_TIMEOUT)*1000LL*NETDB_MIN_ROUTERS/total; |
|
|
|
NETDB_MIN_EXPIRATION_TIMEOUT*1000LL + (NETDB_MAX_EXPIRATION_TIMEOUT - NETDB_MIN_EXPIRATION_TIMEOUT)*1000LL*NETDB_MIN_ROUTERS/total; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto own = i2p::context.GetSharedRouterInfo (); |
|
|
|
for (auto& it: m_RouterInfos) |
|
|
|
for (auto& it: m_RouterInfos) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
if (it.second == own) continue; // skip own
|
|
|
|
std::string ident = it.second->GetIdentHashBase64(); |
|
|
|
std::string ident = it.second->GetIdentHashBase64(); |
|
|
|
std::string path = m_Storage.Path(ident); |
|
|
|
std::string path = m_Storage.Path(ident); |
|
|
|
if (it.second->IsUpdated ()) |
|
|
|
if (it.second->IsUpdated ()) |
|
|
|