diff --git a/src/msg/fbuf/p2pmsg_conversion.cpp b/src/msg/fbuf/p2pmsg_conversion.cpp index f07b19b2..12ede0cc 100644 --- a/src/msg/fbuf/p2pmsg_conversion.cpp +++ b/src/msg/fbuf/p2pmsg_conversion.cpp @@ -648,8 +648,14 @@ namespace msg::fbuf::p2pmsg { std::vector> fbvec; fbvec.reserve(peers.size()); - for (auto peer : peers) + for (const auto &peer : peers) { + if (peer.ip_port.host_address.empty()) + { + LOG_DEBUG << "Skip sending peer with blank host address : " << peer.ip_port.to_string(); + continue; + } + // Skipping the requestedc peer from the peer list response. if (!skipping_ip_port.has_value() || peer.ip_port != skipping_ip_port.value()) fbvec.push_back(CreatePeerProperties( diff --git a/src/p2p/p2p.cpp b/src/p2p/p2p.cpp index 3dc866d4..66996f7a 100644 --- a/src/p2p/p2p.cpp +++ b/src/p2p/p2p.cpp @@ -125,8 +125,9 @@ namespace p2p ctx.server->req_known_remotes.erase(std::remove_if(ctx.server->req_known_remotes.begin(), ctx.server->req_known_remotes.end(), [&](const p2p::peer_properties &peer) { - return peer.ip_port.port == session.known_ipport->port; - })); + return peer.ip_port == session.known_ipport; + }), + ctx.server->req_known_remotes.end()); ctx.server->known_remote_count = ctx.server->req_known_remotes.size(); } LOG_DEBUG << "Loopback connection detected: Removed self from the peer list."; @@ -465,7 +466,7 @@ namespace p2p * @param remove_peers Peers that must be removed from existing known peers. * @param from The session that sent us the peer list. */ - void merge_peer_list(const std::vector *merge_peers, const std::vector *remove_peers, const p2p::peer_comm_session *from) + void merge_peer_list(const std::string &caller, const std::vector *merge_peers, const std::vector *remove_peers, const p2p::peer_comm_session *from) { std::scoped_lock lock(ctx.server->req_known_remotes_mutex); @@ -473,6 +474,12 @@ namespace p2p { for (const peer_properties &peer : *merge_peers) { + if (peer.ip_port.host_address.empty()) + { + LOG_DEBUG << caller << " : Skip received peer with blank host address " << peer.ip_port.to_string() << " from " << peer.ip_port.to_string(); + continue; + } + // If the peer address is indicated as empty, that is the entry for the peer who sent us this. // We then fill that up with the host address we see for that peer. // if (from && peer.ip_port.host_address.empty()) diff --git a/src/p2p/p2p.hpp b/src/p2p/p2p.hpp index 9802a9d7..688d0802 100644 --- a/src/p2p/p2p.hpp +++ b/src/p2p/p2p.hpp @@ -237,7 +237,7 @@ namespace p2p void update_known_peer_available_capacity(const conf::peer_ip_port &ip_port, const int16_t available_capacity, const uint64_t ×tamp); - void merge_peer_list(const std::vector *merge_peers, const std::vector *remove_peers, const p2p::peer_comm_session *from = NULL); + void merge_peer_list(const std::string &caller, const std::vector *merge_peers, const std::vector *remove_peers, const p2p::peer_comm_session *from = NULL); void sort_known_remotes(); diff --git a/src/p2p/peer_comm_server.cpp b/src/p2p/peer_comm_server.cpp index 69257473..badcef52 100644 --- a/src/p2p/peer_comm_server.cpp +++ b/src/p2p/peer_comm_server.cpp @@ -151,6 +151,12 @@ namespace p2p if (peer.available_capacity == 0) continue; + if (peer.ip_port.host_address.empty()) + { + LOG_DEBUG << "Skip connecting to known peer with blank host address " << peer.ip_port.to_string(); + continue; + } + // Check if we are already connected to this remote party. if (std::find(known_remotes.begin(), known_remotes.end(), peer.ip_port) != known_remotes.end()) continue; diff --git a/src/p2p/peer_session_handler.cpp b/src/p2p/peer_session_handler.cpp index 409aa3de..a2c604c7 100644 --- a/src/p2p/peer_session_handler.cpp +++ b/src/p2p/peer_session_handler.cpp @@ -150,7 +150,7 @@ namespace p2p if (mi.type == p2pmsg::P2PMsgContent_PeerListResponseMsg) { const std::vector merge_peers = p2pmsg::create_peer_list_response_from_msg(mi); - p2p::merge_peer_list(&merge_peers, NULL, &session); + p2p::merge_peer_list("Peer_Discovery", &merge_peers, NULL, &session); } else if (mi.type == p2pmsg::P2PMsgContent_PeerListRequestMsg) { diff --git a/src/sc/sc.cpp b/src/sc/sc.cpp index ebe7c94c..9ad47e3d 100644 --- a/src/sc/sc.cpp +++ b/src/sc/sc.cpp @@ -1099,7 +1099,7 @@ namespace sc std::vector added_peers; std::vector removed_peers; if (parser.extract_peer_changeset(added_peers, removed_peers) != -1) - p2p::merge_peer_list(&added_peers, &removed_peers); + p2p::merge_peer_list("Control_MSG", &added_peers, &removed_peers); } }