add rc expiration (again)

pull/1334/head
Jeff Becker 5 years ago
parent 28b10629de
commit cacc73db7b
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -1145,29 +1145,50 @@ namespace llarp
}
void
Router::ServiceNodeLookupRouterWhenExpired(RouterID router)
Router::LookupRouterWhenExpired(RouterID router)
{
dht()->impl->LookupRouter(router,
std::bind(&Router::HandleDHTLookupForExplore,
this, router, std::placeholders::_1));
LookupRouter(router,
std::bind(&Router::HandleRouterLookupForExpireUpdate, this,
router, std::placeholders::_1));
}
void
Router::HandleRouterLookupForExpireUpdate(
RouterID router, const std::vector< RouterContact > &result)
{
const auto now = Now();
RouterContact current;
if(nodedb()->Get(router, current))
{
if(current.IsExpired(now))
{
nodedb()->Remove(router);
}
}
if(result.size() == 1)
nodedb()->InsertAsync(result[0]);
}
void
Router::LookupRouter(RouterID remote, RouterLookupHandler resultHandler)
{
if(!resultHandler)
{
resultHandler = std::bind(&Router::HandleRouterLookupForExpireUpdate,
this, remote, std::placeholders::_1);
}
if(IsServiceNode())
{
if(resultHandler)
dht()->impl->LookupRouter(remote, resultHandler);
else
ServiceNodeLookupRouterWhenExpired(remote);
return;
dht()->impl->LookupRouter(remote, resultHandler);
}
else
{
_hiddenServiceContext.ForEachService(
[=](const std::string &,
const std::shared_ptr< service::Endpoint > &ep) -> bool {
return !ep->LookupRouterAnon(remote, resultHandler);
});
}
_hiddenServiceContext.ForEachService(
[=](const std::string &,
const std::shared_ptr< service::Endpoint > &ep) -> bool {
return !ep->LookupRouterAnon(remote, resultHandler);
});
}
bool
@ -1188,7 +1209,12 @@ namespace llarp
auto now = Now();
routerProfiling().Tick();
// update expired routers
nodedb()->visit([&](const RouterContact &rc) -> bool {
if(rc.ExpiresSoon(now, randint() % 10000))
LookupRouterWhenExpired(rc.pubkey);
return true;
});
if(IsServiceNode())
{
if(_rc.ExpiresSoon(now, randint() % 10000)
@ -1207,14 +1233,6 @@ namespace llarp
return !ConnectionToRouterAllowed(rc.pubkey);
});
*/
// only do this as service node
// client endpoints do this on their own
nodedb()->visit([&](const RouterContact &rc) -> bool {
if(rc.ExpiresSoon(now, randint() % 10000))
ServiceNodeLookupRouterWhenExpired(rc.pubkey);
return true;
});
}
else
{

@ -431,14 +431,18 @@ namespace llarp
void
TryEstablishTo(const RouterID &remote);
/// lookup a router by pubkey when it expires when we are a service node
/// lookup a router by pubkey when it expires
void
ServiceNodeLookupRouterWhenExpired(RouterID remote);
LookupRouterWhenExpired(RouterID remote);
void
HandleDHTLookupForExplore(
RouterID remote, const std::vector< RouterContact > &results) override;
void
HandleRouterLookupForExpireUpdate(
RouterID remote, const std::vector< RouterContact > &results);
void
ForEachPeer(std::function< void(const ILinkSession *, bool) > visit,
bool randomize = false) const override;

@ -231,28 +231,15 @@ namespace llarp
bool
RouterContact::IsExpired(llarp_time_t now) const
{
/*
auto expiresAt = last_updated + Lifetime;
const auto expiresAt = last_updated + Lifetime;
return now >= expiresAt;
*/
(void)now;
return false;
}
bool
RouterContact::ExpiresSoon(llarp_time_t now, llarp_time_t dlt) const
{
(void)now;
(void)dlt;
return false;
/*
if(IsExpired(now))
{
return true;
}
auto expiresAt = last_updated + Lifetime;
return expiresAt - now <= dlt;
*/
const auto expiresAt = last_updated + Lifetime;
return expiresAt >= now || expiresAt - now <= dlt;
}
std::string
@ -278,7 +265,7 @@ namespace llarp
}
bool
RouterContact::Verify(llarp_time_t now) const
RouterContact::Verify(llarp_time_t now, bool allowExpired) const
{
if(netID != NetID::DefaultValue())
{
@ -288,8 +275,12 @@ namespace llarp
}
if(IsExpired(now))
{
llarp::LogError("RC is expired");
return false;
if(!allowExpired)
{
llarp::LogError("RC is expired");
return false;
}
llarp::LogWarn("RC is expired");
}
for(const auto &a : addrs)
{

@ -164,7 +164,7 @@ namespace llarp
SetNick(const std::string &nick);
bool
Verify(llarp_time_t now) const;
Verify(llarp_time_t now, bool allowExpired = true) const;
bool
Sign(const llarp::SecretKey &secret);

Loading…
Cancel
Save