From 766640539b76f8d7dbbc76a8a0cd1686aa3f255b Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 31 Oct 2026 05:24:11 +0100 Subject: libp2p: add without_peer helper --- src/transport/libp2p/book.rs | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'src/transport/libp2p/book.rs') diff --git a/src/transport/libp2p/book.rs b/src/transport/libp2p/book.rs index 5658c56..6706512 100644 --- a/src/transport/libp2p/book.rs +++ b/src/transport/libp2p/book.rs @@ -247,10 +247,7 @@ impl Book { .collect(); let mut direct = published(&direct); let confirmed = self.public_address.iter().filter_map(|address| { - let mut address = address.clone(); - if let Some(Protocol::P2p(_)) = address.iter().last() { - address.pop(); - } + let address = without_peer(address.clone()); (!address.is_empty() && !is_relayed(&address)).then_some(address) }); // First: the member list keeps only so many (`members::MAX_ADDRESSES`), and a @@ -437,20 +434,14 @@ impl Book { let Some(known) = self.addresses.get(&peer) else { return false; }; - addresses.iter().all(|address| { - let mut address = address.clone(); - if let Some(Protocol::P2p(_)) = address.iter().last() { - address.pop(); - } - known.contains(&address) - }) + addresses + .iter() + .all(|address| known.contains(&without_peer(address.clone()))) } /// `peer` is at `address` (without its `/p2p` part): kept first. - pub(super) fn remember(&mut self, peer: PeerId, mut address: Multiaddr) { - if let Some(Protocol::P2p(_)) = address.iter().last() { - address.pop(); - } + pub(super) fn remember(&mut self, peer: PeerId, address: Multiaddr) { + let address = without_peer(address); if !self.addresses.contains_key(&peer) && self.addresses.len() >= MAX_PEERS { return; } @@ -511,6 +502,14 @@ pub(super) fn dialable(known: &[Multiaddr], local: PeerId) -> Vec { .collect() } +/// `address` without the peer ID (`/p2p` part) it ends in, if it ends in one. +pub(super) fn without_peer(mut address: Multiaddr) -> Multiaddr { + if let Some(Protocol::P2p(_)) = address.iter().last() { + address.pop(); + } + address +} + /// `address` with the peer ID it ends in, if it ends in one. pub(super) fn split_peer(address: &Multiaddr) -> Option { match address.iter().last() { -- cgit v1.3.1