|
|
@ -21,7 +21,7 @@ namespace llarp
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Endpoint::Endpoint(const std::string& name, AbstractRouter* r,
|
|
|
|
Endpoint::Endpoint(const std::string& name, AbstractRouter* r,
|
|
|
|
Context* parent)
|
|
|
|
Context* parent)
|
|
|
|
: path::Builder(r, r->dht(), 3, DEFAULT_HOP_LENGTH)
|
|
|
|
: path::Builder(r, r->dht(), 3, path::default_len)
|
|
|
|
, context(parent)
|
|
|
|
, context(parent)
|
|
|
|
, m_Router(r)
|
|
|
|
, m_Router(r)
|
|
|
|
, m_Name(name)
|
|
|
|
, m_Name(name)
|
|
|
@ -729,10 +729,10 @@ namespace llarp
|
|
|
|
// make sure we have all paths that are established
|
|
|
|
// make sure we have all paths that are established
|
|
|
|
// in our introset
|
|
|
|
// in our introset
|
|
|
|
bool should = false;
|
|
|
|
bool should = false;
|
|
|
|
ForEachPath([&](const path::Path *p) {
|
|
|
|
ForEachPath([&](const path::Path* p) {
|
|
|
|
if(!p->IsReady())
|
|
|
|
if(!p->IsReady())
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
for(const auto & i : m_IntroSet.I)
|
|
|
|
for(const auto& i : m_IntroSet.I)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(i == p->intro)
|
|
|
|
if(i == p->intro)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -866,7 +866,8 @@ namespace llarp
|
|
|
|
job->hook = nullptr;
|
|
|
|
job->hook = nullptr;
|
|
|
|
job->rc = msg->R[0];
|
|
|
|
job->rc = msg->R[0];
|
|
|
|
llarp_nodedb_async_verify(job);
|
|
|
|
llarp_nodedb_async_verify(job);
|
|
|
|
router->routerProfiling().MarkSuccess(msg->R[0].pubkey);
|
|
|
|
const RouterID k(msg->R[0].pubkey);
|
|
|
|
|
|
|
|
m_Router->routerProfiling().MarkSuccess(k);
|
|
|
|
m_PendingRouters.erase(itr);
|
|
|
|
m_PendingRouters.erase(itr);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1137,7 +1138,7 @@ namespace llarp
|
|
|
|
bool
|
|
|
|
bool
|
|
|
|
Endpoint::CheckPathIsDead(path::Path*, llarp_time_t dlt)
|
|
|
|
Endpoint::CheckPathIsDead(path::Path*, llarp_time_t dlt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return dlt > 20000;
|
|
|
|
return dlt > path::alive_timeout;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
bool
|
|
|
@ -1242,7 +1243,7 @@ namespace llarp
|
|
|
|
Endpoint::OutboundContext::OutboundContext(const IntroSet& introset,
|
|
|
|
Endpoint::OutboundContext::OutboundContext(const IntroSet& introset,
|
|
|
|
Endpoint* parent)
|
|
|
|
Endpoint* parent)
|
|
|
|
: path::Builder(parent->m_Router, parent->m_Router->dht(), 3,
|
|
|
|
: path::Builder(parent->m_Router, parent->m_Router->dht(), 3,
|
|
|
|
DEFAULT_HOP_LENGTH)
|
|
|
|
path::default_len)
|
|
|
|
, SendContext(introset.A, {}, this, parent)
|
|
|
|
, SendContext(introset.A, {}, this, parent)
|
|
|
|
, currentIntroSet(introset)
|
|
|
|
, currentIntroSet(introset)
|
|
|
|
|
|
|
|
|
|
|
@ -1251,10 +1252,7 @@ namespace llarp
|
|
|
|
for(const auto intro : introset.I)
|
|
|
|
for(const auto intro : introset.I)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(intro.expiresAt > m_NextIntro.expiresAt)
|
|
|
|
if(intro.expiresAt > m_NextIntro.expiresAt)
|
|
|
|
{
|
|
|
|
|
|
|
|
m_NextIntro = intro;
|
|
|
|
m_NextIntro = intro;
|
|
|
|
remoteIntro = intro;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1875,7 +1873,7 @@ namespace llarp
|
|
|
|
auto itr = m_BadIntros.begin();
|
|
|
|
auto itr = m_BadIntros.begin();
|
|
|
|
while(itr != m_BadIntros.end())
|
|
|
|
while(itr != m_BadIntros.end())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(now - itr->second > DEFAULT_PATH_LIFETIME)
|
|
|
|
if(now - itr->second > path::default_lifetime)
|
|
|
|
itr = m_BadIntros.erase(itr);
|
|
|
|
itr = m_BadIntros.erase(itr);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
++itr;
|
|
|
|
++itr;
|
|
|
@ -1917,15 +1915,14 @@ namespace llarp
|
|
|
|
RouterContact& cur, size_t hop,
|
|
|
|
RouterContact& cur, size_t hop,
|
|
|
|
llarp::path::PathRole roles)
|
|
|
|
llarp::path::PathRole roles)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(m_NextIntro.router.IsZero())
|
|
|
|
if(remoteIntro.router.IsZero())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
llarp::LogError("intro is not set, cannot select hops");
|
|
|
|
SwapIntros();
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(hop == numHops - 1)
|
|
|
|
if(hop == numHops - 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_Endpoint->EnsureRouterIsKnown(m_NextIntro.router);
|
|
|
|
m_Endpoint->EnsureRouterIsKnown(remoteIntro.router);
|
|
|
|
if(db->Get(m_NextIntro.router, cur))
|
|
|
|
if(db->Get(remoteIntro.router, cur))
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
++m_BuildFails;
|
|
|
|
++m_BuildFails;
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
@ -1933,7 +1930,7 @@ namespace llarp
|
|
|
|
else if(hop == numHops - 2)
|
|
|
|
else if(hop == numHops - 2)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return db->select_random_hop_excluding(
|
|
|
|
return db->select_random_hop_excluding(
|
|
|
|
cur, {prev.pubkey, m_NextIntro.router});
|
|
|
|
cur, {prev.pubkey, remoteIntro.router});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return path::Builder::SelectHop(db, prev, cur, hop, roles);
|
|
|
|
return path::Builder::SelectHop(db, prev, cur, hop, roles);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1971,7 +1968,7 @@ namespace llarp
|
|
|
|
auto dlt = now - intro.expiresAt;
|
|
|
|
auto dlt = now - intro.expiresAt;
|
|
|
|
return should
|
|
|
|
return should
|
|
|
|
|| ( // try spacing tunnel builds out evenly in time
|
|
|
|
|| ( // try spacing tunnel builds out evenly in time
|
|
|
|
(dlt < (DEFAULT_PATH_LIFETIME / 2))
|
|
|
|
(dlt < (path::default_lifetime / 2))
|
|
|
|
&& (NumInStatus(path::ePathBuilding) < m_NumPaths)
|
|
|
|
&& (NumInStatus(path::ePathBuilding) < m_NumPaths)
|
|
|
|
&& (dlt > buildIntervalLimit));
|
|
|
|
&& (dlt > buildIntervalLimit));
|
|
|
|
}
|
|
|
|
}
|
|
|
|