From e8b215a086d91a8774210bb6ce8d1560aaaf0789 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Fri, 16 Oct 2020 11:10:17 -0400 Subject: [PATCH] Refactor test for existing peer connection into own function --- src/net.cpp | 7 ++++++- src/net.h | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/net.cpp b/src/net.cpp index 9680e9947d6..11e975c3a9c 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -354,6 +354,11 @@ CNode* CConnman::FindNode(const CService& addr) return nullptr; } +bool CConnman::AlreadyConnectedToAddress(const CAddress& addr) +{ + return FindNode(static_cast(addr)) || FindNode(addr.ToStringIPPort()); +} + bool CConnman::CheckIncomingNonce(uint64_t nonce) { LOCK(cs_vNodes); @@ -2160,7 +2165,7 @@ void CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai } if (!pszDest) { bool banned_or_discouraged = m_banman && (m_banman->IsDiscouraged(addrConnect) || m_banman->IsBanned(addrConnect)); - if (IsLocal(addrConnect) || FindNode(static_cast(addrConnect)) || banned_or_discouraged || FindNode(addrConnect.ToStringIPPort())) { + if (IsLocal(addrConnect) || banned_or_discouraged || AlreadyConnectedToAddress(addrConnect)) { return; } } else if (FindNode(std::string(pszDest))) diff --git a/src/net.h b/src/net.h index fc01f44dd2d..77649247d95 100644 --- a/src/net.h +++ b/src/net.h @@ -442,6 +442,12 @@ private: CNode* FindNode(const std::string& addrName); CNode* FindNode(const CService& addr); + /** + * Determine whether we're already connected to a given address, in order to + * avoid initiating duplicate connections. + */ + bool AlreadyConnectedToAddress(const CAddress& addr); + bool AttemptToEvictConnection(); CNode* ConnectNode(CAddress addrConnect, const char *pszDest, bool fCountFailure, ConnectionType conn_type); void AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNetAddr &addr) const;