0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-22 12:23:34 -05:00

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`.
This commit is contained in:
Vasil Dimov 2024-08-23 13:11:37 +02:00
parent 55cf39e4c5
commit cd4bfaee10
No known key found for this signature in database
GPG key ID: 54DF06F64B55CBBF
3 changed files with 23 additions and 24 deletions

View file

@ -380,10 +380,10 @@ bool CConnman::CheckIncomingNonce(uint64_t nonce)
return true; return true;
} }
/** Get the bind address for a socket as CAddress */ /** Get the bind address for a socket as CService. */
static CAddress GetBindAddress(const Sock& sock) static CService GetBindAddress(const Sock& sock)
{ {
CAddress addr_bind; CService addr_bind;
struct sockaddr_storage sockaddr_bind; struct sockaddr_storage sockaddr_bind;
socklen_t sockaddr_bind_len = sizeof(sockaddr_bind); socklen_t sockaddr_bind_len = sizeof(sockaddr_bind);
if (!sock.GetSockName((struct sockaddr*)&sockaddr_bind, &sockaddr_bind_len)) { 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 // Connect
std::unique_ptr<Sock> sock; std::unique_ptr<Sock> sock;
Proxy proxy; Proxy proxy;
CAddress addr_bind; CService addr_bind;
assert(!addr_bind.IsValid()); assert(!addr_bind.IsValid());
std::unique_ptr<i2p::sam::Session> i2p_transient_session; std::unique_ptr<i2p::sam::Session> i2p_transient_session;
@ -495,7 +495,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
if (connected) { if (connected) {
sock = std::move(conn.sock); sock = std::move(conn.sock);
addr_bind = CAddress{conn.me, NODE_NONE}; addr_bind = conn.me;
} }
} else if (use_proxy) { } else if (use_proxy) {
LogPrintLevel(BCLog::PROXY, BCLog::Level::Debug, "Using proxy: %s to connect to %s\n", proxy.ToString(), target_addr.ToStringAddrPort()); 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; struct sockaddr_storage sockaddr;
socklen_t len = sizeof(sockaddr); socklen_t len = sizeof(sockaddr);
auto sock = hListenSocket.sock->Accept((struct sockaddr*)&sockaddr, &len); auto sock = hListenSocket.sock->Accept((struct sockaddr*)&sockaddr, &len);
CAddress addr;
if (!sock) { if (!sock) {
const int nErr = WSAGetLastError(); const int nErr = WSAGetLastError();
@ -1746,13 +1745,14 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
return; return;
} }
CService addr;
if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr, len)) { if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr, len)) {
LogPrintLevel(BCLog::NET, BCLog::Level::Warning, "Unknown socket family\n"); LogPrintLevel(BCLog::NET, BCLog::Level::Warning, "Unknown socket family\n");
} else { } 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; NetPermissionFlags permission_flags = NetPermissionFlags::None;
hListenSocket.AddSocketPermissionFlags(permission_flags); hListenSocket.AddSocketPermissionFlags(permission_flags);
@ -1762,8 +1762,8 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock, void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
NetPermissionFlags permission_flags, NetPermissionFlags permission_flags,
const CAddress& addr_bind, const CService& addr_bind,
const CAddress& addr) const CService& addr)
{ {
int nInbound = 0; int nInbound = 0;
@ -1830,7 +1830,7 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
CNode* pnode = new CNode(id, CNode* pnode = new CNode(id,
std::move(sock), std::move(sock),
addr, CAddress{addr, NODE_NONE},
CalculateKeyedNetGroup(addr), CalculateKeyedNetGroup(addr),
nonce, nonce,
addr_bind, addr_bind,
@ -3105,8 +3105,7 @@ void CConnman::ThreadI2PAcceptIncoming()
continue; continue;
} }
CreateNodeFromAcceptedSocket(std::move(conn.sock), NetPermissionFlags::None, CreateNodeFromAcceptedSocket(std::move(conn.sock), NetPermissionFlags::None, conn.me, conn.peer);
CAddress{conn.me, NODE_NONE}, CAddress{conn.peer, NODE_NONE});
err_wait = err_wait_begin; err_wait = err_wait_begin;
} }
@ -3796,7 +3795,7 @@ CNode::CNode(NodeId idIn,
const CAddress& addrIn, const CAddress& addrIn,
uint64_t nKeyedNetGroupIn, uint64_t nKeyedNetGroupIn,
uint64_t nLocalHostNonceIn, uint64_t nLocalHostNonceIn,
const CAddress& addrBindIn, const CService& addrBindIn,
const std::string& addrNameIn, const std::string& addrNameIn,
ConnectionType conn_type_in, ConnectionType conn_type_in,
bool inbound_onion, bool inbound_onion,
@ -3933,7 +3932,7 @@ CSipHasher CConnman::GetDeterministicRandomizer(uint64_t id) const
return CSipHasher(nSeed0, nSeed1).Write(id); return CSipHasher(nSeed0, nSeed1).Write(id);
} }
uint64_t CConnman::CalculateKeyedNetGroup(const CAddress& address) const uint64_t CConnman::CalculateKeyedNetGroup(const CNetAddr& address) const
{ {
std::vector<unsigned char> vchNetGroup(m_netgroupman.GetGroup(address)); std::vector<unsigned char> vchNetGroup(m_netgroupman.GetGroup(address));

View file

@ -211,7 +211,7 @@ public:
// Address of this peer // Address of this peer
CAddress addr; CAddress addr;
// Bind address of our side of the connection // Bind address of our side of the connection
CAddress addrBind; CService addrBind;
// Network the peer connected through // Network the peer connected through
Network m_network; Network m_network;
uint32_t m_mapped_as; uint32_t m_mapped_as;
@ -707,7 +707,7 @@ public:
// Address of this peer // Address of this peer
const CAddress addr; const CAddress addr;
// Bind address of our side of the connection // Bind address of our side of the connection
const CAddress addrBind; const CService addrBind;
const std::string m_addr_name; const std::string m_addr_name;
/** The pszDest argument provided to ConnectNode(). Only used for reconnections. */ /** The pszDest argument provided to ConnectNode(). Only used for reconnections. */
const std::string m_dest; const std::string m_dest;
@ -883,7 +883,7 @@ public:
const CAddress& addrIn, const CAddress& addrIn,
uint64_t nKeyedNetGroupIn, uint64_t nKeyedNetGroupIn,
uint64_t nLocalHostNonceIn, uint64_t nLocalHostNonceIn,
const CAddress& addrBindIn, const CService& addrBindIn,
const std::string& addrNameIn, const std::string& addrNameIn,
ConnectionType conn_type_in, ConnectionType conn_type_in,
bool inbound_onion, bool inbound_onion,
@ -1312,8 +1312,8 @@ private:
*/ */
void CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock, void CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
NetPermissionFlags permission_flags, NetPermissionFlags permission_flags,
const CAddress& addr_bind, const CService& addr_bind,
const CAddress& addr); const CService& addr);
void DisconnectNodes() EXCLUSIVE_LOCKS_REQUIRED(!m_reconnections_mutex, !m_nodes_mutex); void DisconnectNodes() EXCLUSIVE_LOCKS_REQUIRED(!m_reconnections_mutex, !m_nodes_mutex);
void NotifyNumConnectionsChanged(); 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 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); 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 CNetAddr& ip);
CNode* FindNode(const std::string& addrName); CNode* FindNode(const std::string& addrName);

View file

@ -671,7 +671,7 @@ BOOST_AUTO_TEST_CASE(get_local_addr_for_peer_port)
/*addrIn=*/CAddress{CService{peer_out_in_addr, 8333}, NODE_NETWORK}, /*addrIn=*/CAddress{CService{peer_out_in_addr, 8333}, NODE_NETWORK},
/*nKeyedNetGroupIn=*/0, /*nKeyedNetGroupIn=*/0,
/*nLocalHostNonceIn=*/0, /*nLocalHostNonceIn=*/0,
/*addrBindIn=*/CAddress{}, /*addrBindIn=*/CService{},
/*addrNameIn=*/std::string{}, /*addrNameIn=*/std::string{},
/*conn_type_in=*/ConnectionType::OUTBOUND_FULL_RELAY, /*conn_type_in=*/ConnectionType::OUTBOUND_FULL_RELAY,
/*inbound_onion=*/false}; /*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}, /*addrIn=*/CAddress{CService{peer_in_in_addr, 8333}, NODE_NETWORK},
/*nKeyedNetGroupIn=*/0, /*nKeyedNetGroupIn=*/0,
/*nLocalHostNonceIn=*/0, /*nLocalHostNonceIn=*/0,
/*addrBindIn=*/CAddress{}, /*addrBindIn=*/CService{},
/*addrNameIn=*/std::string{}, /*addrNameIn=*/std::string{},
/*conn_type_in=*/ConnectionType::INBOUND, /*conn_type_in=*/ConnectionType::INBOUND,
/*inbound_onion=*/false}; /*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}, /*addrIn=*/CAddress{CService{peer_in_addr, 8333}, NODE_NETWORK},
/*nKeyedNetGroupIn=*/0, /*nKeyedNetGroupIn=*/0,
/*nLocalHostNonceIn=*/0, /*nLocalHostNonceIn=*/0,
/*addrBindIn=*/CAddress{}, /*addrBindIn=*/CService{},
/*addrNameIn=*/std::string{}, /*addrNameIn=*/std::string{},
/*conn_type_in=*/ConnectionType::OUTBOUND_FULL_RELAY, /*conn_type_in=*/ConnectionType::OUTBOUND_FULL_RELAY,
/*inbound_onion=*/false}; /*inbound_onion=*/false};