From 08d70e6d14ca03655ba707b4b06b55eb575c5ad9 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 25 Feb 2019 07:46:40 -0500 Subject: [PATCH] track client rcs --- llarp/router/router.cpp | 8 ++++++-- llarp/router/router.hpp | 3 +++ llarp/router_contact.hpp | 9 +++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index e1e657932..870c2c0f4 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -509,6 +509,7 @@ namespace llarp static_cast< async_verify_context * >(job->user); auto router = ctx->router; PubKey pk(job->rc.pubkey); + router->m_ClientRCs[pk] = job->rc; router->FlushOutboundFor(pk, router->GetLinkWithSessionByPubkey(pk)); delete ctx; router->pendingVerifyRC.erase(pk); @@ -1039,6 +1040,7 @@ namespace llarp } paths.TickPaths(now); paths.ExpirePaths(now); + { auto itr = m_PersistingSessions.begin(); while(itr != m_PersistingSessions.end()) @@ -1051,7 +1053,7 @@ namespace llarp LogDebug("keepalive to ", itr->first); link->KeepAliveSessionTo(itr->first); } - else + else if(m_ClientRCs.count(itr->first) == 0) { LogDebug("establish to ", itr->first); TryEstablishTo(itr->first); @@ -1146,9 +1148,11 @@ namespace llarp void Router::SessionClosed(RouterID remote) { - __llarp_dht_remove_peer(dht(), remote.data()); + dht::Key_t k(remote); + dht()->impl->Nodes()->DelNode(k); // remove from valid routers if it's a valid router validRouters.erase(remote); + m_ClientRCs.erase(remote); LogInfo("Session to ", remote, " fully closed"); } diff --git a/llarp/router/router.hpp b/llarp/router/router.hpp index e15eb60a8..590e5a9cc 100644 --- a/llarp/router/router.hpp +++ b/llarp/router/router.hpp @@ -309,6 +309,9 @@ namespace llarp std::unordered_map< RouterID, llarp_time_t, RouterID::Hash > m_PersistingSessions; + // RCs of connected clients + std::unordered_map< RouterID, RouterContact, RouterID::Hash > m_ClientRCs; + // lokinet routers from lokid, maps pubkey to when we think it will expire, // set to max value right now std::unordered_map< RouterID, llarp_time_t, PubKey::Hash > lokinetRouters; diff --git a/llarp/router_contact.hpp b/llarp/router_contact.hpp index 65a758039..54bf0c6e5 100644 --- a/llarp/router_contact.hpp +++ b/llarp/router_contact.hpp @@ -82,6 +82,15 @@ namespace llarp { } + struct Hash + { + size_t + operator()(const RouterContact &r) const + { + return PubKey::Hash()(r.pubkey); + } + }; + // advertised addresses std::vector< AddressInfo > addrs; // network identifier