aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p/relays.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-01 13:27:28 +0100
committertv <tv@krebsco.de>2026-11-01 13:27:28 +0100
commit497eab7136b9d35101f4a5ffa81797efb85da390 (patch)
tree42f905ae30e95e2ac94fea34a0879efc3bbee98f /src/transport/libp2p/relays.rs
parent5723367a26ae0ec5f470b2e325a792cb31d661a6 (diff)
libp2p: relays use address ignore/route filter
Diffstat (limited to 'src/transport/libp2p/relays.rs')
-rw-r--r--src/transport/libp2p/relays.rs25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/transport/libp2p/relays.rs b/src/transport/libp2p/relays.rs
index 41d7e1d..81a97fe 100644
--- a/src/transport/libp2p/relays.rs
+++ b/src/transport/libp2p/relays.rs
@@ -73,23 +73,30 @@ pub(super) fn pick_relays(
let now = tokio::time::Instant::now();
book.failed_relays.retain(|_, until| now < *until);
let failed = book.failed_relays.clone();
- let usable = |offers: &HashMap<PeerId, Multiaddr>| -> HashMap<PeerId, Multiaddr> {
+ // Not paused, and not in a range left out (ignored, or without a route): those
+ // would only be denied or fail, again and again.
+ let usable = |book: &mut Book, offers: HashMap<PeerId, Multiaddr>| {
offers
- .iter()
- .filter(|(relay, _)| !failed.contains_key(relay))
- .map(|(relay, address)| (*relay, address.clone()))
- .collect()
+ .into_iter()
+ .filter(|(relay, address)| !failed.contains_key(relay) && !book.left_out(address))
+ .collect::<HashMap<PeerId, Multiaddr>>()
};
let public = if relaying.public {
- usable(&book.public_relays)
+ let offers = book.public_relays.clone();
+ usable(&mut book, offers)
} else {
HashMap::new()
};
+ let (configured, listed, members) = (
+ book.named(Named::Configured),
+ book.named(Named::Listed),
+ book.relays.clone(),
+ );
(
!book.direct().is_empty(),
- usable(&book.named(Named::Configured)),
- usable(&book.named(Named::Listed)),
- usable(&book.relays),
+ usable(&mut book, configured),
+ usable(&mut book, listed),
+ usable(&mut book, members),
public,
)
};