|
|
|
@ -78,7 +78,8 @@ namespace llarp
|
|
|
|
|
LinkLayer::RecvFrom(const Addr& from, ILinkSession::Packet_t pkt)
|
|
|
|
|
{
|
|
|
|
|
std::shared_ptr< ILinkSession > session;
|
|
|
|
|
auto itr = m_AuthedAddrs.find(from);
|
|
|
|
|
auto itr = m_AuthedAddrs.find(from);
|
|
|
|
|
bool isNewSession = false;
|
|
|
|
|
if(itr == m_AuthedAddrs.end())
|
|
|
|
|
{
|
|
|
|
|
ACQUIRE_LOCK(Lock_t lock, m_PendingMutex);
|
|
|
|
@ -86,6 +87,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
if(not permitInbound)
|
|
|
|
|
return;
|
|
|
|
|
isNewSession = true;
|
|
|
|
|
m_Pending.insert({from, std::make_shared< Session >(this, from)});
|
|
|
|
|
}
|
|
|
|
|
session = m_Pending.find(from)->second;
|
|
|
|
@ -98,7 +100,13 @@ namespace llarp
|
|
|
|
|
}
|
|
|
|
|
if(session)
|
|
|
|
|
{
|
|
|
|
|
session->Recv_LL(std::move(pkt));
|
|
|
|
|
bool success = session->Recv_LL(std::move(pkt));
|
|
|
|
|
if(!success and isNewSession)
|
|
|
|
|
{
|
|
|
|
|
LogWarn(
|
|
|
|
|
"Brand new session failed; removing from pending sessions list");
|
|
|
|
|
m_Pending.erase(m_Pending.find(from));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|