mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-26 16:21:39 +00:00
Various fixes and improvements (#166)
This commit is contained in:
@ -156,14 +156,12 @@ where
|
||||
.get(&addr)
|
||||
.map(|c| c.clone())
|
||||
{
|
||||
debug!(target: "libp2p-swarm", "ConnectionReuse: Reusing multiplexed connection to {} \
|
||||
instead of dialing", addr);
|
||||
debug!(target: "libp2p-swarm", "Using existing multiplexed connection to {}", addr);
|
||||
let future = connec.outbound().map(|s| (s, addr));
|
||||
return Ok(Box::new(future) as Box<_>);
|
||||
}
|
||||
|
||||
debug!(target: "libp2p-swarm", "ConnectionReuse: No existing connection to {} ; dialing",
|
||||
addr);
|
||||
debug!(target: "libp2p-swarm", "No existing connection to {} ; dialing", addr);
|
||||
|
||||
// TODO: handle if we're already in the middle in dialing that same node?
|
||||
// TODO: try dialing again if the existing connection has dropped
|
||||
@ -171,6 +169,8 @@ where
|
||||
let dial = match self.inner.dial(addr) {
|
||||
Ok(l) => l,
|
||||
Err((inner, addr)) => {
|
||||
warn!(target: "libp2p-swarm", "Failed to dial {} because the underlying \
|
||||
transport doesn't support this address", addr);
|
||||
return Err((
|
||||
ConnectionReuse {
|
||||
inner: inner,
|
||||
@ -259,14 +259,13 @@ where
|
||||
}
|
||||
Ok(Async::NotReady) => {}
|
||||
Ok(Async::Ready(None)) => {
|
||||
debug!(target: "libp2p-swarm", "ConnectionReuse: listener has been closed");
|
||||
debug!(target: "libp2p-swarm", "listener has been closed");
|
||||
if self.connections.is_empty() && self.current_upgrades.is_empty() {
|
||||
return Ok(Async::Ready(None));
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
debug!(target: "libp2p-swarm", "ConnectionReuse: error while polling \
|
||||
listener: {:?}", err);
|
||||
debug!(target: "libp2p-swarm", "error while polling listener: {:?}", err);
|
||||
if self.connections.is_empty() && self.current_upgrades.is_empty() {
|
||||
return Err(err);
|
||||
}
|
||||
@ -295,8 +294,8 @@ where
|
||||
}
|
||||
Err(err) => {
|
||||
// Insert the rest of the pending upgrades, but not the current one.
|
||||
debug!(target: "libp2p-swarm", "ConnectionReuse: error while upgrading \
|
||||
listener connection: {:?}", err);
|
||||
debug!(target: "libp2p-swarm", "error while upgrading listener connection: \
|
||||
{:?}", err);
|
||||
return Ok(Async::Ready(Some(future::err(err))));
|
||||
}
|
||||
}
|
||||
@ -319,7 +318,7 @@ where
|
||||
self.connections.push((muxer, next_incoming, client_addr));
|
||||
}
|
||||
Err(err) => {
|
||||
debug!(target: "libp2p-swarm", "ConnectionReuse: error while upgrading the \
|
||||
debug!(target: "libp2p-swarm", "error while upgrading the \
|
||||
multiplexed incoming connection: {:?}", err);
|
||||
// Insert the rest of the pending connections, but not the current one.
|
||||
return Ok(Async::Ready(Some(future::err(err))));
|
||||
@ -374,6 +373,7 @@ where
|
||||
Ok(Async::Ready(value)) => {
|
||||
// A substream is ready ; push back the muxer for the next time this function
|
||||
// is called, then return.
|
||||
debug!(target: "libp2p-swarm", "New incoming substream");
|
||||
let next = muxer.clone().inbound();
|
||||
lock.next_incoming.push((muxer, next, addr.clone()));
|
||||
return Ok(Async::Ready(future::ok((value, addr))));
|
||||
|
@ -222,7 +222,7 @@ pub mod muxing;
|
||||
pub mod transport;
|
||||
|
||||
pub use self::connection_reuse::ConnectionReuse;
|
||||
pub use self::multiaddr::Multiaddr;
|
||||
pub use self::multiaddr::{AddrComponent, Multiaddr};
|
||||
pub use self::muxing::StreamMuxer;
|
||||
pub use self::swarm::{swarm, SwarmController, SwarmFuture};
|
||||
pub use self::transport::{ConnectionUpgrade, OrUpgrade, PlainTextConfig, Transport, UpgradedNode};
|
||||
|
@ -255,13 +255,12 @@ where
|
||||
|
||||
match self.next_incoming.poll() {
|
||||
Ok(Async::Ready(connec)) => {
|
||||
trace!(target: "libp2p-swarm", "Swarm received new multiplexed \
|
||||
debug!(target: "libp2p-swarm", "Swarm received new multiplexed \
|
||||
incoming connection");
|
||||
self.next_incoming = self.upgraded.clone().next_incoming();
|
||||
self.listeners_upgrade.push(connec);
|
||||
}
|
||||
Ok(Async::NotReady) => {}
|
||||
// TODO: may not be the best idea because we're killing the whole server
|
||||
Err(err) => {
|
||||
debug!(target: "libp2p-swarm", "Error in multiplexed incoming \
|
||||
connection: {:?}", err);
|
||||
@ -323,7 +322,7 @@ where
|
||||
match upgrade.poll() {
|
||||
Ok(Async::Ready((output, client_addr))) => {
|
||||
debug!(
|
||||
"Successfully upgraded listened connection with {}",
|
||||
"Successfully upgraded incoming connection with {}",
|
||||
client_addr
|
||||
);
|
||||
self.to_process.push(future::Either::A(
|
||||
|
@ -927,6 +927,7 @@ where
|
||||
.and_then(move |(connection, client_addr)| {
|
||||
let iter = upgrade.protocol_names()
|
||||
.map(|(name, id)| (name, <Bytes as PartialEq>::eq, id));
|
||||
debug!(target: "libp2p-swarm", "Starting protocol negotiation (dialer)");
|
||||
let negotiated = multistream_select::dialer_select_proto(connection, iter)
|
||||
.map_err(|err| IoError::new(IoErrorKind::Other, err));
|
||||
negotiated.map(|(upgrade_id, conn)| (upgrade_id, conn, upgrade, client_addr))
|
||||
@ -949,6 +950,14 @@ where
|
||||
debug!(target: "libp2p-swarm", "Trying to apply negotiated protocol with {}",
|
||||
client_addr);
|
||||
f.map(|v| (v, client_addr))
|
||||
})
|
||||
.then(|val| {
|
||||
match val {
|
||||
Ok(_) => debug!(target: "libp2p-swarm", "Successfully applied negotiated \
|
||||
protocol"),
|
||||
Err(_) => debug!(target: "libp2p-swarm", "Failed to apply negotiated protocol"),
|
||||
}
|
||||
val
|
||||
});
|
||||
|
||||
Ok(Box::new(future))
|
||||
@ -982,6 +991,7 @@ where
|
||||
let iter = upgrade
|
||||
.protocol_names()
|
||||
.map::<_, fn(_) -> _>(|(name, id)| (name, <Bytes as PartialEq>::eq, id));
|
||||
debug!(target: "libp2p-swarm", "Starting protocol negotiation (incoming)");
|
||||
let negotiated = multistream_select::listener_select_proto(connection, iter)
|
||||
.map_err(|err| IoError::new(IoErrorKind::Other, err));
|
||||
negotiated.map(move |(upgrade_id, conn)| (upgrade_id, conn, upgrade, addr))
|
||||
@ -1000,10 +1010,19 @@ where
|
||||
negotiated
|
||||
})
|
||||
.and_then(move |(upgrade_id, connection, upgrade, addr)| {
|
||||
let upg = upgrade.upgrade(connection, upgrade_id, Endpoint::Dialer, &addr);
|
||||
let upg = upgrade.upgrade(connection, upgrade_id, Endpoint::Listener, &addr);
|
||||
debug!(target: "libp2p-swarm", "Trying to apply negotiated protocol with {}",
|
||||
addr);
|
||||
upg.map(|u| (u, addr))
|
||||
})
|
||||
.then(|val| {
|
||||
match val {
|
||||
Ok(_) => debug!(target: "libp2p-swarm", "Successfully applied negotiated \
|
||||
protocol"),
|
||||
Err(_) => debug!(target: "libp2p-swarm", "Failed to apply negotiated \
|
||||
protocol"),
|
||||
}
|
||||
val
|
||||
});
|
||||
|
||||
Box::new(future) as Box<Future<Item = _, Error = _>>
|
||||
@ -1064,6 +1083,7 @@ where
|
||||
let iter = upgrade.protocol_names()
|
||||
.map::<_, fn(_) -> _>(|(n, t)| (n, <Bytes as PartialEq>::eq, t));
|
||||
let remote_addr2 = remote_addr.clone();
|
||||
debug!(target: "libp2p-swarm", "Starting protocol negotiation (listener)");
|
||||
multistream_select::listener_select_proto(connection, iter)
|
||||
.map_err(|err| IoError::new(IoErrorKind::Other, err))
|
||||
.then(move |negotiated| {
|
||||
|
Reference in New Issue
Block a user