* add log warn

* throw if inbound link makes outbound session
pull/1693/head
Jeff Becker 3 years ago
parent 99379c5def
commit 977ea3d689
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -24,7 +24,7 @@ namespace llarp::iwp
keyManager, getrc, h, sign, before, est, reneg, timeout, closed, pumpDone, worker)
, m_Wakeup{ev->make_waker([this]() { HandleWakeupPlaintext(); })}
, m_PlaintextRecv{1024}
, permitInbound{allowInbound}
, m_Inbound{allowInbound}
{}
@ -48,10 +48,10 @@ namespace llarp::iwp
bool isNewSession = false;
if (itr == m_AuthedAddrs.end())
{
Lock_t lock(m_PendingMutex);
Lock_t lock{m_PendingMutex};
if (m_Pending.count(from) == 0)
{
if (not permitInbound)
if (not m_Inbound)
return;
isNewSession = true;
m_Pending.insert({from, std::make_shared<Session>(this, from)});
@ -60,14 +60,13 @@ namespace llarp::iwp
}
else
{
Lock_t lock(m_AuthedLinksMutex);
auto range = m_AuthedLinks.equal_range(itr->second);
session = range.first->second;
if(auto s_itr = m_AuthedLinks.find(itr->second); s_itr != m_AuthedLinks.end())
session = s_itr->second;
}
if (session)
{
bool success = session->Recv_LL(std::move(pkt));
if (!success and isNewSession)
if (not success and isNewSession)
{
LogWarn("Brand new session failed; removing from pending sessions list");
m_Pending.erase(m_Pending.find(from));
@ -78,7 +77,7 @@ namespace llarp::iwp
bool
LinkLayer::MapAddr(const RouterID& r, ILinkSession* s)
{
if (!ILinkLayer::MapAddr(r, s))
if (not ILinkLayer::MapAddr(r, s))
return false;
m_AuthedAddrs.emplace(s->GetRemoteEndpoint(), r);
return true;
@ -93,6 +92,8 @@ namespace llarp::iwp
std::shared_ptr<ILinkSession>
LinkLayer::NewOutboundSession(const RouterContact& rc, const AddressInfo& ai)
{
if(m_Inbound)
throw std::logic_error{"inbound link cannot make outbound sessions"};
return std::make_shared<Session>(this, rc, ai);
}

@ -63,7 +63,7 @@ namespace llarp::iwp
const std::shared_ptr<EventLoopWakeup> m_Wakeup;
std::unordered_map<SockAddr, std::weak_ptr<Session>> m_PlaintextRecv;
std::unordered_map<SockAddr, RouterID> m_AuthedAddrs;
const bool permitInbound;
const bool m_Inbound;
};
using LinkLayer_ptr = std::shared_ptr<LinkLayer>;

@ -12,8 +12,6 @@ static constexpr auto LINK_LAYER_TICK_INTERVAL = 100ms;
namespace llarp
{
static constexpr size_t MaxSessionsPerKey = 16;
ILinkLayer::ILinkLayer(
std::shared_ptr<KeyManager> keyManager,
GetRCFunc getrc,
@ -241,7 +239,7 @@ namespace llarp
auto itr = m_Pending.find(addr);
if (itr != m_Pending.end())
{
if (m_AuthedLinks.count(pk) > MaxSessionsPerKey)
if (m_AuthedLinks.count(pk))
{
LogWarn("too many session for ", pk);
s->Close();
@ -303,21 +301,24 @@ namespace llarp
{
{
Lock_t l(m_AuthedLinksMutex);
if (m_AuthedLinks.count(rc.pubkey) >= MaxSessionsPerKey)
if (m_AuthedLinks.count(rc.pubkey))
{
LogDebug("Too many links to ", RouterID{rc.pubkey}, ", not establishing another one");
LogWarn("Too many links to ", RouterID{rc.pubkey}, ", not establishing another one");
return false;
}
}
llarp::AddressInfo to;
if (!PickAddress(rc, to))
if (not PickAddress(rc, to))
{
LogWarn("router ", RouterID{rc.pubkey}, " has no acceptable inbound addresses");
return false;
}
const SockAddr address{to};
{
Lock_t l(m_PendingMutex);
if (m_Pending.count(address) >= MaxSessionsPerKey)
if (m_Pending.count(address))
{
LogDebug(
LogWarn(
"Too many pending connections to ",
address,
" while establishing to ",
@ -331,12 +332,12 @@ namespace llarp
{
BeforeConnect(std::move(rc));
}
if (PutSession(s))
if (not PutSession(s))
{
s->Start();
return true;
return false;
}
return false;
s->Start();
return true;
}
bool

Loading…
Cancel
Save