From cd4bfaee103591f212b88afd17969c16c1056eb6 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Fri, 23 Aug 2024 13:11:37 +0200 Subject: [PATCH] net: reduce CAddress usage to CService or CNetAddr * `CConnman::CalculateKeyedNetGroup()` needs `CNetAddr`, not `CAddress`, thus change its argument. * Both callers of `CConnman::CreateNodeFromAcceptedSocket()` create a dummy `CAddress` from `CService`, so use `CService` instead. * `GetBindAddress()` only needs to return `CService`. * `CNode::addrBind` only needs to be `CService`. --- src/net.cpp | 29 ++++++++++++++--------------- src/net.h | 12 ++++++------ src/test/net_tests.cpp | 6 +++--- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index c722ddfcb5f..134eccfba5c 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -380,10 +380,10 @@ bool CConnman::CheckIncomingNonce(uint64_t nonce) return true; } -/** Get the bind address for a socket as CAddress */ -static CAddress GetBindAddress(const Sock& sock) +/** Get the bind address for a socket as CService. */ +static CService GetBindAddress(const Sock& sock) { - CAddress addr_bind; + CService addr_bind; struct sockaddr_storage sockaddr_bind; socklen_t sockaddr_bind_len = sizeof(sockaddr_bind); if (!sock.GetSockName((struct sockaddr*)&sockaddr_bind, &sockaddr_bind_len)) { @@ -458,7 +458,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo // Connect std::unique_ptr sock; Proxy proxy; - CAddress addr_bind; + CService addr_bind; assert(!addr_bind.IsValid()); std::unique_ptr i2p_transient_session; @@ -495,7 +495,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo if (connected) { sock = std::move(conn.sock); - addr_bind = CAddress{conn.me, NODE_NONE}; + addr_bind = conn.me; } } else if (use_proxy) { LogPrintLevel(BCLog::PROXY, BCLog::Level::Debug, "Using proxy: %s to connect to %s\n", proxy.ToString(), target_addr.ToStringAddrPort()); @@ -1736,7 +1736,6 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { struct sockaddr_storage sockaddr; socklen_t len = sizeof(sockaddr); auto sock = hListenSocket.sock->Accept((struct sockaddr*)&sockaddr, &len); - CAddress addr; if (!sock) { const int nErr = WSAGetLastError(); @@ -1746,13 +1745,14 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { return; } + CService addr; if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr, len)) { LogPrintLevel(BCLog::NET, BCLog::Level::Warning, "Unknown socket family\n"); } else { - addr = CAddress{MaybeFlipIPv6toCJDNS(addr), NODE_NONE}; + addr = MaybeFlipIPv6toCJDNS(addr); } - const CAddress addr_bind{MaybeFlipIPv6toCJDNS(GetBindAddress(*sock)), NODE_NONE}; + const CService addr_bind{MaybeFlipIPv6toCJDNS(GetBindAddress(*sock))}; NetPermissionFlags permission_flags = NetPermissionFlags::None; hListenSocket.AddSocketPermissionFlags(permission_flags); @@ -1762,8 +1762,8 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr&& sock, NetPermissionFlags permission_flags, - const CAddress& addr_bind, - const CAddress& addr) + const CService& addr_bind, + const CService& addr) { int nInbound = 0; @@ -1830,7 +1830,7 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr&& sock, CNode* pnode = new CNode(id, std::move(sock), - addr, + CAddress{addr, NODE_NONE}, CalculateKeyedNetGroup(addr), nonce, addr_bind, @@ -3105,8 +3105,7 @@ void CConnman::ThreadI2PAcceptIncoming() continue; } - CreateNodeFromAcceptedSocket(std::move(conn.sock), NetPermissionFlags::None, - CAddress{conn.me, NODE_NONE}, CAddress{conn.peer, NODE_NONE}); + CreateNodeFromAcceptedSocket(std::move(conn.sock), NetPermissionFlags::None, conn.me, conn.peer); err_wait = err_wait_begin; } @@ -3796,7 +3795,7 @@ CNode::CNode(NodeId idIn, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, - const CAddress& addrBindIn, + const CService& addrBindIn, const std::string& addrNameIn, ConnectionType conn_type_in, bool inbound_onion, @@ -3933,7 +3932,7 @@ CSipHasher CConnman::GetDeterministicRandomizer(uint64_t id) const return CSipHasher(nSeed0, nSeed1).Write(id); } -uint64_t CConnman::CalculateKeyedNetGroup(const CAddress& address) const +uint64_t CConnman::CalculateKeyedNetGroup(const CNetAddr& address) const { std::vector vchNetGroup(m_netgroupman.GetGroup(address)); diff --git a/src/net.h b/src/net.h index 99a9d0da4b4..e64d9a67f46 100644 --- a/src/net.h +++ b/src/net.h @@ -211,7 +211,7 @@ public: // Address of this peer CAddress addr; // Bind address of our side of the connection - CAddress addrBind; + CService addrBind; // Network the peer connected through Network m_network; uint32_t m_mapped_as; @@ -707,7 +707,7 @@ public: // Address of this peer const CAddress addr; // Bind address of our side of the connection - const CAddress addrBind; + const CService addrBind; const std::string m_addr_name; /** The pszDest argument provided to ConnectNode(). Only used for reconnections. */ const std::string m_dest; @@ -883,7 +883,7 @@ public: const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, - const CAddress& addrBindIn, + const CService& addrBindIn, const std::string& addrNameIn, ConnectionType conn_type_in, bool inbound_onion, @@ -1312,8 +1312,8 @@ private: */ void CreateNodeFromAcceptedSocket(std::unique_ptr&& sock, NetPermissionFlags permission_flags, - const CAddress& addr_bind, - const CAddress& addr); + const CService& addr_bind, + const CService& addr); void DisconnectNodes() EXCLUSIVE_LOCKS_REQUIRED(!m_reconnections_mutex, !m_nodes_mutex); void NotifyNumConnectionsChanged(); @@ -1350,7 +1350,7 @@ private: void ThreadSocketHandler() EXCLUSIVE_LOCKS_REQUIRED(!m_total_bytes_sent_mutex, !mutexMsgProc, !m_nodes_mutex, !m_reconnections_mutex); void ThreadDNSAddressSeed() EXCLUSIVE_LOCKS_REQUIRED(!m_addr_fetches_mutex, !m_nodes_mutex); - uint64_t CalculateKeyedNetGroup(const CAddress& ad) const; + uint64_t CalculateKeyedNetGroup(const CNetAddr& ad) const; CNode* FindNode(const CNetAddr& ip); CNode* FindNode(const std::string& addrName); diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp index 384b1d7cc92..5f0f05c842a 100644 --- a/src/test/net_tests.cpp +++ b/src/test/net_tests.cpp @@ -671,7 +671,7 @@ BOOST_AUTO_TEST_CASE(get_local_addr_for_peer_port) /*addrIn=*/CAddress{CService{peer_out_in_addr, 8333}, NODE_NETWORK}, /*nKeyedNetGroupIn=*/0, /*nLocalHostNonceIn=*/0, - /*addrBindIn=*/CAddress{}, + /*addrBindIn=*/CService{}, /*addrNameIn=*/std::string{}, /*conn_type_in=*/ConnectionType::OUTBOUND_FULL_RELAY, /*inbound_onion=*/false}; @@ -692,7 +692,7 @@ BOOST_AUTO_TEST_CASE(get_local_addr_for_peer_port) /*addrIn=*/CAddress{CService{peer_in_in_addr, 8333}, NODE_NETWORK}, /*nKeyedNetGroupIn=*/0, /*nLocalHostNonceIn=*/0, - /*addrBindIn=*/CAddress{}, + /*addrBindIn=*/CService{}, /*addrNameIn=*/std::string{}, /*conn_type_in=*/ConnectionType::INBOUND, /*inbound_onion=*/false}; @@ -829,7 +829,7 @@ BOOST_AUTO_TEST_CASE(initial_advertise_from_version_message) /*addrIn=*/CAddress{CService{peer_in_addr, 8333}, NODE_NETWORK}, /*nKeyedNetGroupIn=*/0, /*nLocalHostNonceIn=*/0, - /*addrBindIn=*/CAddress{}, + /*addrBindIn=*/CService{}, /*addrNameIn=*/std::string{}, /*conn_type_in=*/ConnectionType::OUTBOUND_FULL_RELAY, /*inbound_onion=*/false};