mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-17 03:51:22 +00:00
swarm/: Allow disconnecting from Swarm and NetworkBehaviour (#2110)
Add `ExpandedSwarm::disconnect_peer_id` and `NetworkBehaviourAction::CloseConnection` to close connections to a specific peer via an `ExpandedSwarm` or `NetworkBehaviour`. Co-authored-by: Max Inden <mail@max-inden.de>
This commit is contained in:
@ -293,6 +293,23 @@ pub enum NetworkBehaviourAction<TInEvent, TOutEvent> {
|
||||
/// relative to other observed addresses.
|
||||
score: AddressScore,
|
||||
},
|
||||
|
||||
/// Instructs the `Swarm` to initiate a graceful close of one or all connections
|
||||
/// with the given peer.
|
||||
///
|
||||
/// Note: Closing a connection via
|
||||
/// [`NetworkBehaviourAction::CloseConnection`] does not inform the
|
||||
/// corresponding [`ProtocolsHandler`].
|
||||
/// Closing a connection via a [`ProtocolsHandler`] can be done
|
||||
/// either in a collaborative manner across [`ProtocolsHandler`]s
|
||||
/// with [`ProtocolsHandler::connection_keep_alive`] or directly with
|
||||
/// [`ProtocolsHandlerEvent::Close`](crate::ProtocolsHandlerEvent::Close).
|
||||
CloseConnection {
|
||||
/// The peer to disconnect.
|
||||
peer_id: PeerId,
|
||||
/// Whether to close a specific or all connections to the given peer.
|
||||
connection: CloseConnection,
|
||||
}
|
||||
}
|
||||
|
||||
impl<TInEvent, TOutEvent> NetworkBehaviourAction<TInEvent, TOutEvent> {
|
||||
@ -312,7 +329,9 @@ impl<TInEvent, TOutEvent> NetworkBehaviourAction<TInEvent, TOutEvent> {
|
||||
event: f(event)
|
||||
},
|
||||
NetworkBehaviourAction::ReportObservedAddr { address, score } =>
|
||||
NetworkBehaviourAction::ReportObservedAddr { address, score }
|
||||
NetworkBehaviourAction::ReportObservedAddr { address, score },
|
||||
NetworkBehaviourAction::CloseConnection { peer_id, connection } =>
|
||||
NetworkBehaviourAction::CloseConnection { peer_id, connection }
|
||||
}
|
||||
}
|
||||
|
||||
@ -328,7 +347,9 @@ impl<TInEvent, TOutEvent> NetworkBehaviourAction<TInEvent, TOutEvent> {
|
||||
NetworkBehaviourAction::NotifyHandler { peer_id, handler, event } =>
|
||||
NetworkBehaviourAction::NotifyHandler { peer_id, handler, event },
|
||||
NetworkBehaviourAction::ReportObservedAddr { address, score } =>
|
||||
NetworkBehaviourAction::ReportObservedAddr { address, score }
|
||||
NetworkBehaviourAction::ReportObservedAddr { address, score },
|
||||
NetworkBehaviourAction::CloseConnection { peer_id, connection } =>
|
||||
NetworkBehaviourAction::CloseConnection { peer_id, connection }
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -373,3 +394,18 @@ impl Default for DialPeerCondition {
|
||||
DialPeerCondition::Disconnected
|
||||
}
|
||||
}
|
||||
|
||||
/// The options which connections to close.
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum CloseConnection {
|
||||
/// Disconnect a particular connection.
|
||||
One(ConnectionId),
|
||||
/// Disconnect all connections.
|
||||
All,
|
||||
}
|
||||
|
||||
impl Default for CloseConnection {
|
||||
fn default() -> Self {
|
||||
CloseConnection::All
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user