From 497eab7136b9d35101f4a5ffa81797efb85da390 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 1 Nov 2026 13:27:28 +0100 Subject: libp2p: relays use address ignore/route filter --- src/transport/libp2p/relays.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'src/transport/libp2p/relays.rs') 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| -> HashMap { + // 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| { 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::>() }; 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, ) }; -- cgit v1.3.1