|
|
@ -13,6 +13,7 @@ namespace llarp
|
|
|
|
, m_ExitRouter(router)
|
|
|
|
, m_ExitRouter(router)
|
|
|
|
, m_WritePacket(writepkt)
|
|
|
|
, m_WritePacket(writepkt)
|
|
|
|
, m_Counter(0)
|
|
|
|
, m_Counter(0)
|
|
|
|
|
|
|
|
, m_LastUse(0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
r->crypto.identity_keygen(m_ExitIdentity);
|
|
|
|
r->crypto.identity_keygen(m_ExitIdentity);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -76,10 +77,10 @@ namespace llarp
|
|
|
|
bool
|
|
|
|
bool
|
|
|
|
BaseSession::HandleGotExit(llarp::path::Path* p, llarp_time_t b)
|
|
|
|
BaseSession::HandleGotExit(llarp::path::Path* p, llarp_time_t b)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
m_LastUse = router->Now();
|
|
|
|
if(b == 0)
|
|
|
|
if(b == 0)
|
|
|
|
{
|
|
|
|
|
|
|
|
llarp::LogInfo("obtained an exit via ", p->Endpoint());
|
|
|
|
llarp::LogInfo("obtained an exit via ", p->Endpoint());
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -88,7 +89,13 @@ namespace llarp
|
|
|
|
{
|
|
|
|
{
|
|
|
|
(void)p;
|
|
|
|
(void)p;
|
|
|
|
if(m_WritePacket)
|
|
|
|
if(m_WritePacket)
|
|
|
|
return m_WritePacket(pkt);
|
|
|
|
{
|
|
|
|
|
|
|
|
if(!m_WritePacket(pkt))
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
m_LastUse = router->Now();
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -133,9 +140,16 @@ namespace llarp
|
|
|
|
return AvailablePaths(llarp::path::ePathRoleExit) > 0;
|
|
|
|
return AvailablePaths(llarp::path::ePathRoleExit) > 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
|
|
|
BaseSession::IsExpired(llarp_time_t now) const
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return m_LastUse && now > m_LastUse && now - m_LastUse > LifeSpan;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
bool
|
|
|
|
BaseSession::FlushUpstreamTraffic()
|
|
|
|
BaseSession::FlushUpstreamTraffic()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
auto now = router->Now();
|
|
|
|
auto path = PickRandomEstablishedPath(llarp::path::ePathRoleExit);
|
|
|
|
auto path = PickRandomEstablishedPath(llarp::path::ePathRoleExit);
|
|
|
|
if(!path)
|
|
|
|
if(!path)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -151,7 +165,8 @@ namespace llarp
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto& msg = queue.front();
|
|
|
|
auto& msg = queue.front();
|
|
|
|
msg.S = path->NextSeqNo();
|
|
|
|
msg.S = path->NextSeqNo();
|
|
|
|
path->SendRoutingMessage(&msg, router);
|
|
|
|
if(path->SendRoutingMessage(&msg, router))
|
|
|
|
|
|
|
|
m_LastUse = now;
|
|
|
|
queue.pop_front();
|
|
|
|
queue.pop_front();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|