From 53d132ff902ff07198b0e01f8c1a030f06aa562b Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 1 Nov 2026 13:30:12 +0100 Subject: libp2p: one Book::usable for all dials --- src/transport/libp2p/relays.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'src/transport/libp2p/relays.rs') diff --git a/src/transport/libp2p/relays.rs b/src/transport/libp2p/relays.rs index 81a97fe..1a57635 100644 --- a/src/transport/libp2p/relays.rs +++ b/src/transport/libp2p/relays.rs @@ -137,18 +137,12 @@ pub(super) fn upgrade( local: PeerId, ) { let (direct, now, wait) = { - let book = lock(book); + let mut book = lock(book); if book.connection(&peer) != Some(Connection::Relayed) { return; } - let direct: Vec = book - .addresses - .get(&peer) - .map(|known| dialable(known, local)) - .unwrap_or_default() - .into_iter() - .filter(|address| !is_relayed(address) && !ignored(&book.ignored, address)) - .collect(); + let mut direct = book.usable(&peer, local); + direct.retain(|address| !is_relayed(address)); if direct.is_empty() { return; } @@ -227,13 +221,16 @@ pub(super) fn retry_punches(swarm: &mut Swarm, book: &Mutex, lo Some(Connection::Relayed) if now < *next => return true, Some(Connection::Relayed) => {} } + // As `Book::usable`, by parts: `punching` is borrowed. let through: Vec = book .addresses .get(peer) .map(|known| dialable(known, local)) .unwrap_or_default() .into_iter() - .filter(is_relayed) + .filter(|address| { + is_relayed(address) && !excluded(&book.ignored, &mut book.routes, address) + }) .collect(); // Until its punch fails again (or the peer tries from its side). *next = now + PUNCH_RETRIES[(*failed).min(PUNCH_RETRIES.len() - 1)]; -- cgit v1.3.1