diff options
| author | tv <tv@krebsco.de> | 2026-10-31 05:24:11 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 05:24:11 +0100 |
| commit | ec85763bf5345a394b6cad7c609867a4e04f659b (patch) | |
| tree | 29f9347e11dfb57241450c5919b44d4a42d57ca0 /src/transport/libp2p | |
| parent | d8a6cb52a8efcf8daa124dc97912e0d776beaf05 (diff) | |
libp2p: add without_peer helper
Diffstat (limited to 'src/transport/libp2p')
| -rw-r--r-- | src/transport/libp2p/book.rs | 29 | ||||
| -rw-r--r-- | src/transport/libp2p/errors.rs | 5 |
2 files changed, 15 insertions, 19 deletions
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<Multiaddr> { .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<PeerId> { match address.iter().last() { diff --git a/src/transport/libp2p/errors.rs b/src/transport/libp2p/errors.rs index 7eb4551..e024b1c 100644 --- a/src/transport/libp2p/errors.rs +++ b/src/transport/libp2p/errors.rs @@ -14,10 +14,7 @@ pub(super) fn describe_dial_error(error: &::libp2p::swarm::DialError) -> String let described: Vec<String> = errors .iter() .map(|(address, error)| { - let mut address = address.clone(); - if let Some(Protocol::P2p(_)) = address.iter().last() { - address.pop(); - } + let address = without_peer(address.clone()); format!("{address}: {}", innermost_causes(error)) }) .collect(); |
