From b5efac03db11fc48f5ce470c7ca2b6177df1c894 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Tue, 14 Nov 2023 21:12:34 -0600 Subject: [PATCH] p2p, bugfix: correctly detect CJDNS addnode entries in AddNode() Rebased-From: 28823f30dc1a865cd44a6b7598ea968f92b75c56 --- src/net.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 5213cff139..a6afce6a92 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3447,12 +3447,17 @@ std::vector CConnman::GetAddresses(CNode& requestor, size_t max_addres bool CConnman::AddNode(const AddedNodeParams& add) { - const CService resolved(LookupNumeric(add.m_added_node, GetDefaultPort(add.m_added_node))); - const bool resolved_is_valid{resolved.IsValid()}; + const CService resolved{MaybeFlipIPv6toCJDNS(LookupNumeric(add.m_added_node, GetDefaultPort(add.m_added_node)))}; + const bool resolved_invalid{!resolved.IsValid()}; LOCK(m_added_nodes_mutex); for (const auto& it : m_added_node_params) { - if (add.m_added_node == it.m_added_node || (resolved_is_valid && resolved == LookupNumeric(it.m_added_node, GetDefaultPort(it.m_added_node)))) return false; + if (add.m_added_node == it.m_added_node) return false; + if (resolved_invalid) continue; + const CService service{MaybeFlipIPv6toCJDNS(LookupNumeric(it.m_added_node, GetDefaultPort(it.m_added_node)))}; + if (resolved == service) return false; + // Check if CJDNS address matches regardless of port to detect already-connected inbound peers. + if (resolved.IsCJDNS() && static_cast(resolved) == static_cast(service)) return false; } m_added_node_params.push_back(add);