From 44db5f44e3287f936754f5e8e4f4147079b56c51 Mon Sep 17 00:00:00 2001 From: Pierre Krieger <pierre.krieger1708@gmail.com> Date: Sun, 24 Mar 2019 11:49:38 +0100 Subject: [PATCH] Directly connect if notice that ban has expired (#2100) --- .../src/custom_proto/behaviour.rs | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/substrate/core/network-libp2p/src/custom_proto/behaviour.rs b/substrate/core/network-libp2p/src/custom_proto/behaviour.rs index 979273939d4..796ff32af16 100644 --- a/substrate/core/network-libp2p/src/custom_proto/behaviour.rs +++ b/substrate/core/network-libp2p/src/custom_proto/behaviour.rs @@ -332,15 +332,33 @@ impl<TMessage, TSubstream> CustomProto<TMessage, TSubstream> { }; match mem::replace(occ_entry.get_mut(), PeerState::Poisoned) { - PeerState::Banned { until } => { + PeerState::Banned { ref until } if *until > Instant::now() => { debug!(target: "sub-libp2p", "PSM => Connect({:?}): Will start to connect at \ until {:?}", occ_entry.key(), until); *occ_entry.into_mut() = PeerState::PendingRequest { - timer: tokio_timer::Delay::new(until), + timer: tokio_timer::Delay::new(until.clone()), }; }, - PeerState::Disabled { open, connected_point, banned_until: None } => { + PeerState::Banned { .. } => { + debug!(target: "sub-libp2p", "PSM => Connect({:?}): Starting to connect", occ_entry.key()); + debug!(target: "sub-libp2p", "Libp2p <= Dial {:?}", occ_entry.key()); + self.events.push(NetworkBehaviourAction::DialPeer { peer_id: occ_entry.key().clone() }); + *occ_entry.into_mut() = PeerState::Requested; + }, + + PeerState::Disabled { open, ref connected_point, banned_until: Some(ref banned) } + if *banned > Instant::now() => { + debug!(target: "sub-libp2p", "PSM => Connect({:?}): Has idle connection through \ + {:?} but node is banned until {:?}", occ_entry.key(), connected_point, banned); + *occ_entry.into_mut() = PeerState::DisabledPendingEnable { + connected_point: connected_point.clone(), + open, + timer: tokio_timer::Delay::new(banned.clone()), + }; + }, + + PeerState::Disabled { open, connected_point, banned_until: _ } => { debug!(target: "sub-libp2p", "PSM => Connect({:?}): Enabling previously-idle \ connection through {:?}", occ_entry.key(), connected_point); debug!(target: "sub-libp2p", "Handler({:?}) <= Enable", occ_entry.key()); @@ -351,16 +369,6 @@ impl<TMessage, TSubstream> CustomProto<TMessage, TSubstream> { *occ_entry.into_mut() = PeerState::Enabled { connected_point, open }; }, - PeerState::Disabled { open, connected_point, banned_until: Some(banned) } => { - debug!(target: "sub-libp2p", "PSM => Connect({:?}): Has idle connection through \ - {:?} but node is banned until {:?}", occ_entry.key(), connected_point, banned); - *occ_entry.into_mut() = PeerState::DisabledPendingEnable { - connected_point, - open, - timer: tokio_timer::Delay::new(banned), - }; - }, - PeerState::Incoming { connected_point, .. } => { debug!(target: "sub-libp2p", "PSM => Connect({:?}): Enabling incoming \ connection through {:?}", occ_entry.key(), connected_point); -- GitLab