Skip to content

Commit 909f50f

Browse files
authored
Swarm::dial adds addresses when pending (libp2p#919)
* Swarm::dial adds addresses when pending * Bump libp2p-core to 0.3.3
1 parent 479924f commit 909f50f

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "libp2p-core"
33
edition = "2018"
44
description = "Core traits and structs of libp2p"
5-
version = "0.3.2"
5+
version = "0.3.3"
66
authors = ["Parity Technologies <[email protected]>"]
77
license = "MIT"
88
repository = "https://github.com/libp2p/rust-libp2p"

core/src/nodes/raw_swarm.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,15 @@ where
16131613
self.attempt.get().next_attempts.iter()
16141614
}
16151615

1616+
/// Adds new multiaddrs to attempt if the current dialing fails.
1617+
///
1618+
/// Doesn't do anything for multiaddresses that are already in the queue.
1619+
pub fn append_multiaddr_attempts(&mut self, addrs: impl IntoIterator<Item = Multiaddr>) {
1620+
for addr in addrs {
1621+
self.append_multiaddr_attempt(addr);
1622+
}
1623+
}
1624+
16161625
/// Adds a new multiaddr to attempt if the current dialing fails.
16171626
///
16181627
/// Doesn't do anything if that multiaddress is already in the queue.

core/src/swarm.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ use crate::{
4747
nodes::{
4848
handled_node::NodeHandler,
4949
node::Substream,
50-
raw_swarm::{RawSwarm, RawSwarmEvent}
50+
raw_swarm::{self, RawSwarm, RawSwarmEvent}
5151
},
5252
protocols_handler::{NodeHandlerWrapperBuilder, NodeHandlerWrapper, IntoProtocolsHandler, ProtocolsHandler},
5353
transport::TransportError,
@@ -180,9 +180,15 @@ where TBehaviour: NetworkBehaviour,
180180
#[inline]
181181
pub fn dial(me: &mut Self, peer_id: PeerId) {
182182
let addrs = me.behaviour.addresses_of_peer(&peer_id);
183-
let handler = me.behaviour.new_handler().into_node_handler_builder();
184-
if let Some(peer) = me.raw_swarm.peer(peer_id).into_not_connected() {
185-
let _ = peer.connect_iter(addrs, handler);
183+
match me.raw_swarm.peer(peer_id.clone()) {
184+
raw_swarm::Peer::NotConnected(peer) => {
185+
let handler = me.behaviour.new_handler().into_node_handler_builder();
186+
let _ = peer.connect_iter(addrs, handler);
187+
},
188+
raw_swarm::Peer::PendingConnect(mut peer) => {
189+
peer.append_multiaddr_attempts(addrs)
190+
},
191+
raw_swarm::Peer::Connected(_) | raw_swarm::Peer::LocalNode => {}
186192
}
187193
}
188194

0 commit comments

Comments
 (0)