mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
subscribe to LeaseSet
This commit is contained in:
parent
ce722e7a5e
commit
1545a21682
|
@ -156,7 +156,7 @@ namespace util
|
||||||
auto leaseSet = i2p::data::netdb.FindLeaseSet (destination);
|
auto leaseSet = i2p::data::netdb.FindLeaseSet (destination);
|
||||||
if (!leaseSet || !leaseSet->HasNonExpiredLeases ())
|
if (!leaseSet || !leaseSet->HasNonExpiredLeases ())
|
||||||
{
|
{
|
||||||
i2p::data::netdb.RequestDestination (i2p::data::IdentHash (destination), true);
|
i2p::data::netdb.Subscribe(destination);
|
||||||
std::this_thread::sleep_for (std::chrono::seconds(10)); // wait for 10 seconds
|
std::this_thread::sleep_for (std::chrono::seconds(10)); // wait for 10 seconds
|
||||||
leaseSet = i2p::data::netdb.FindLeaseSet (destination);
|
leaseSet = i2p::data::netdb.FindLeaseSet (destination);
|
||||||
if (!leaseSet || !leaseSet->HasNonExpiredLeases ()) // still no LeaseSet
|
if (!leaseSet || !leaseSet->HasNonExpiredLeases ()) // still no LeaseSet
|
||||||
|
@ -170,13 +170,6 @@ namespace util
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// we found LeaseSet
|
|
||||||
if (leaseSet->HasExpiredLeases ())
|
|
||||||
{
|
|
||||||
// we should re-request LeaseSet
|
|
||||||
LogPrint ("LeaseSet re-requested");
|
|
||||||
i2p::data::netdb.RequestDestination (i2p::data::IdentHash (destination), true);
|
|
||||||
}
|
|
||||||
auto s = i2p::stream::CreateStream (leaseSet);
|
auto s = i2p::stream::CreateStream (leaseSet);
|
||||||
if (s)
|
if (s)
|
||||||
{
|
{
|
||||||
|
|
33
NetDb.cpp
33
NetDb.cpp
|
@ -120,10 +120,13 @@ namespace data
|
||||||
Explore ();
|
Explore ();
|
||||||
|
|
||||||
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
|
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
if (ts - lastSave >= 60) // save routers every minute
|
if (ts - lastSave >= 60) // save routers and validate subscriptions every minute
|
||||||
{
|
{
|
||||||
if (lastSave)
|
if (lastSave)
|
||||||
|
{
|
||||||
SaveUpdated (m_NetDbPath);
|
SaveUpdated (m_NetDbPath);
|
||||||
|
ValidateSubscriptions ();
|
||||||
|
}
|
||||||
lastSave = ts;
|
lastSave = ts;
|
||||||
}
|
}
|
||||||
if (ts - lastPublish >= 600) // publish every 10 minutes
|
if (ts - lastPublish >= 600) // publish every 10 minutes
|
||||||
|
@ -660,5 +663,33 @@ namespace data
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetDb::Subscribe (const IdentHash& ident)
|
||||||
|
{
|
||||||
|
LeaseSet * leaseSet = FindLeaseSet (ident);
|
||||||
|
if (!leaseSet)
|
||||||
|
{
|
||||||
|
LogPrint ("LeaseSet requested");
|
||||||
|
RequestDestination (ident, true);
|
||||||
|
}
|
||||||
|
m_Subscriptions.insert (ident);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetDb::Unsubscribe (const IdentHash& ident)
|
||||||
|
{
|
||||||
|
m_Subscriptions.erase (ident);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetDb::ValidateSubscriptions ()
|
||||||
|
{
|
||||||
|
for (auto it : m_Subscriptions)
|
||||||
|
{
|
||||||
|
LeaseSet * leaseSet = FindLeaseSet (it);
|
||||||
|
if (!leaseSet || leaseSet->HasExpiredLeases ())
|
||||||
|
{
|
||||||
|
LogPrint ("LeaseSet re-requested");
|
||||||
|
RequestDestination (it, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
6
NetDb.h
6
NetDb.h
|
@ -63,7 +63,9 @@ namespace data
|
||||||
void AddLeaseSet (uint8_t * buf, int len);
|
void AddLeaseSet (uint8_t * buf, int len);
|
||||||
RouterInfo * FindRouter (const IdentHash& ident) const;
|
RouterInfo * FindRouter (const IdentHash& ident) const;
|
||||||
LeaseSet * FindLeaseSet (const IdentHash& destination) const;
|
LeaseSet * FindLeaseSet (const IdentHash& destination) const;
|
||||||
|
void Subscribe (const IdentHash& ident); // keep LeaseSets upto date
|
||||||
|
void Unsubscribe (const IdentHash& ident);
|
||||||
|
|
||||||
void RequestDestination (const char * b32); // in base32
|
void RequestDestination (const char * b32); // in base32
|
||||||
void RequestDestination (const IdentHash& destination, bool isLeaseSet = false);
|
void RequestDestination (const IdentHash& destination, bool isLeaseSet = false);
|
||||||
|
|
||||||
|
@ -83,6 +85,7 @@ namespace data
|
||||||
void Run (); // exploratory thread
|
void Run (); // exploratory thread
|
||||||
void Explore ();
|
void Explore ();
|
||||||
void Publish ();
|
void Publish ();
|
||||||
|
void ValidateSubscriptions ();
|
||||||
const RouterInfo * GetClosestFloodfill (const IdentHash& destination, const std::set<IdentHash>& excluded) const;
|
const RouterInfo * GetClosestFloodfill (const IdentHash& destination, const std::set<IdentHash>& excluded) const;
|
||||||
|
|
||||||
RequestedDestination * CreateRequestedDestination (const IdentHash& dest,
|
RequestedDestination * CreateRequestedDestination (const IdentHash& dest,
|
||||||
|
@ -95,6 +98,7 @@ namespace data
|
||||||
std::map<IdentHash, LeaseSet *> m_LeaseSets;
|
std::map<IdentHash, LeaseSet *> m_LeaseSets;
|
||||||
std::map<IdentHash, RouterInfo *> m_RouterInfos;
|
std::map<IdentHash, RouterInfo *> m_RouterInfos;
|
||||||
std::map<IdentHash, RequestedDestination *> m_RequestedDestinations;
|
std::map<IdentHash, RequestedDestination *> m_RequestedDestinations;
|
||||||
|
std::set<IdentHash> m_Subscriptions;
|
||||||
|
|
||||||
bool m_IsRunning;
|
bool m_IsRunning;
|
||||||
int m_ReseedRetries;
|
int m_ReseedRetries;
|
||||||
|
|
Loading…
Reference in a new issue