more close changes

pull/947/head
Jeff Becker 5 years ago
parent 3410f25fd0
commit 9be4092a2a
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -170,10 +170,10 @@ namespace llarp
if(m_State == State::Closed)
return;
auto close_msg = CreatePacket(Command::eCLOS, 0, 16, 16);
EncryptAndSend(std::move(close_msg));
if(m_State == State::Ready)
m_Parent->UnmapAddr(m_RemoteAddr);
m_State = State::Closed;
EncryptAndSend(std::move(close_msg));
LogInfo("closing connection to ", m_RemoteAddr);
}

@ -287,7 +287,6 @@ namespace llarp
ILinkLayer::Start(std::shared_ptr< Logic > l,
std::shared_ptr< thread::ThreadPool > worker)
{
m_Recv = std::make_shared< TrafficQueue_t >();
m_Worker = worker;
m_Logic = l;
ScheduleTick(100);
@ -316,6 +315,17 @@ namespace llarp
++itr;
}
}
{
// decay recently closed list
auto itr = m_RecentlyClosed.begin();
while(itr != m_RecentlyClosed.end())
{
if(itr->second >= now)
itr = m_RecentlyClosed.erase(itr);
else
++itr;
}
}
}
void
@ -341,12 +351,13 @@ namespace llarp
++itr;
}
}
m_Recv.reset();
}
void
ILinkLayer::CloseSessionTo(const RouterID& remote)
{
static constexpr llarp_time_t CloseGraceWindow = 5000;
const auto now = Now();
ACQUIRE_LOCK(Lock_t l, m_AuthedLinksMutex);
RouterID r = remote;
llarp::LogInfo("Closing all to ", r);
@ -355,7 +366,9 @@ namespace llarp
while(itr != range.second)
{
itr->second->Close();
++itr;
m_RecentlyClosed.emplace(itr->second->GetRemoteEndpoint(),
now + CloseGraceWindow);
itr = m_AuthedLinks.erase(itr);
}
}
@ -463,7 +476,11 @@ namespace llarp
auto itr = pkts->begin();
while(itr != pkts->end())
{
link->RecvFrom(itr->remote, std::move(itr->pkt));
if(link->m_RecentlyClosed.find(itr->remote)
== link->m_RecentlyClosed.end())
{
link->RecvFrom(itr->remote, std::move(itr->pkt));
}
++itr;
}
link->Pump();

@ -52,7 +52,7 @@ namespace llarp
struct ILinkLayer
{
ILinkLayer(std::shared_ptr<KeyManager> keyManager, GetRCFunc getrc,
ILinkLayer(std::shared_ptr< KeyManager > keyManager, GetRCFunc getrc,
LinkMessageHandler handler, SignBufferFunc signFunc,
SessionEstablishedHandler sessionEstablish,
SessionRenegotiateHandler renegotiate, TimeoutHandler timeout,
@ -179,7 +179,7 @@ namespace llarp
SessionClosedHandler SessionClosed;
SessionRenegotiateHandler SessionRenegotiate;
PumpDoneHandler PumpDone;
std::shared_ptr<KeyManager> keyManager;
std::shared_ptr< KeyManager > keyManager;
std::shared_ptr< Logic >
logic()
@ -256,10 +256,8 @@ namespace llarp
ACQUIRED_AFTER(m_AuthedLinksMutex));
Pending m_Pending GUARDED_BY(m_PendingMutex);
using TrafficEvent_t = std::pair< Addr, ILinkSession::Packet_t >;
using TrafficQueue_t = std::vector< TrafficEvent_t >;
std::shared_ptr< TrafficQueue_t > m_Recv;
std::unordered_map< llarp::Addr, llarp_time_t, llarp::Addr::Hash >
m_RecentlyClosed;
};
using LinkLayer_ptr = std::shared_ptr< ILinkLayer >;

Loading…
Cancel
Save