aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/libp2p/book.rs29
-rw-r--r--src/transport/libp2p/errors.rs5
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();