From d26902468df9e7eaa42bb231e01277ceac9b7fcb Mon Sep 17 00:00:00 2001 From: SChernykh Date: Thu, 21 Oct 2021 15:55:00 +0200 Subject: [PATCH] P2PServer: peer list tweaks - Increase outgoing connections to 10 - Stricter handling of peer list responses --- src/p2p_server.cpp | 17 ++++++++++++----- src/tcp_server.inl | 1 - 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/p2p_server.cpp b/src/p2p_server.cpp index 5850f1f..303f820 100644 --- a/src/p2p_server.cpp +++ b/src/p2p_server.cpp @@ -225,8 +225,8 @@ void P2PServer::update_peer_connections() peer_list = m_peerList; } - // Try to have at least 8 outgoing connections - for (uint32_t i = m_numConnections - m_numIncomingConnections; (i < 8) && !peer_list.empty();) { + // Try to have at least 10 outgoing connections + for (uint32_t i = m_numConnections - m_numIncomingConnections; (i < 10) && !peer_list.empty();) { const uint64_t k = get_random64() % peer_list.size(); const Peer& peer = peer_list[k]; @@ -1041,7 +1041,7 @@ bool P2PServer::P2PClient::on_read(char* data, uint32_t size) LOGINFO(5, "peer " << log::Gray() << static_cast(m_addrString) << log::NoColor() << " sent PEER_LIST_RESPONSE"); if (bytes_left >= 2) { - const uint8_t num_peers = buf[1]; + const uint32_t num_peers = buf[1]; if (num_peers > PEER_LIST_RESPONSE_MAX_PEERS) { LOGWARN(5, "peer " << log::Gray() << static_cast(m_addrString) << log::NoColor() << " sent too long peer list (" << num_peers << ')'); ban(DEFAULT_BAN_TIME); @@ -1049,8 +1049,8 @@ bool P2PServer::P2PClient::on_read(char* data, uint32_t size) return false; } - if (bytes_left >= 2u + num_peers * 19) { - bytes_read = 2u + num_peers * 19; + if (bytes_left >= 2u + num_peers * 19u) { + bytes_read = 2u + num_peers * 19u; --m_peerListPendingRequests; if (!on_peer_list_response(buf + 1)) { @@ -1609,6 +1609,13 @@ bool P2PServer::P2PClient::on_peer_list_response(const uint8_t* buf) const memcpy(ip.data, buf, sizeof(ip.data)); buf += sizeof(ip.data); + // Fill in default bytes for IPv4 addresses + if (!is_v6) { + memset(ip.data, 0, 10); + ip.data[10] = 0xFF; + ip.data[11] = 0xFF; + } + int port = 0; memcpy(&port, buf, 2); buf += 2; diff --git a/src/tcp_server.inl b/src/tcp_server.inl index f841902..b2a8563 100644 --- a/src/tcp_server.inl +++ b/src/tcp_server.inl @@ -308,7 +308,6 @@ bool TCPServer::connect_to_peer(bool is_v6, const return connect_to_peer_nolock(client, is_v6, reinterpret_cast(&addr)); } - template void TCPServer::on_connect_failed(bool, const raw_ip&, int) {