mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-15 02:51:25 +00:00
feat: report changes in supported protocols to ConnectionHandler
With this patch, implementations of `ConnectionHandler` (which are typically composed in a tree) can exchange information about the supported protocols of a remote with each other via `ConnectionHandlerEvent::ReportRemoteProtocols`. The provided `ProtocolSupport` enum can describe either additions or removals of the remote peer's protocols. This information is aggregated in the connection and passed down to the `ConnectionHandler` via `ConnectionEvent::RemoteProtocolsChange`. Similarly, if the listen protocols of a connection change, all `ConnectionHandler`s on the connection will be notified via `ConnectionEvent::LocalProtocolsChange`. This will allow us to eventually remove `PollParameters` from `NetworkBehaviour`. This pattern allows protocols on a connection to communicate with each other. For example, protocols like identify can share the list of (supposedly) supported protocols by the remote with all other handlers. A protocol like kademlia can accurately add and remove a remote from its routing table as a result. Resolves: #2680. Related: #3124. Pull-Request: #3651.
This commit is contained in:
@ -28,7 +28,7 @@ use libp2p_core::{
|
||||
};
|
||||
use libp2p_identity as identity;
|
||||
use libp2p_identity::PublicKey;
|
||||
use libp2p_swarm::{ConnectionId, StreamProtocol};
|
||||
use libp2p_swarm::StreamProtocol;
|
||||
use log::{debug, trace};
|
||||
use std::convert::TryFrom;
|
||||
use std::{io, iter, pin::Pin};
|
||||
@ -41,13 +41,6 @@ pub const PROTOCOL_NAME: StreamProtocol = StreamProtocol::new("/ipfs/id/1.0.0");
|
||||
|
||||
pub const PUSH_PROTOCOL_NAME: StreamProtocol = StreamProtocol::new("/ipfs/id/push/1.0.0");
|
||||
|
||||
/// The type of the Substream protocol.
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub enum Protocol {
|
||||
Identify(ConnectionId),
|
||||
Push,
|
||||
}
|
||||
|
||||
/// Substream upgrade protocol for `/ipfs/id/1.0.0`.
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Identify;
|
||||
|
Reference in New Issue
Block a user