Struct libp2p::request_response::RequestResponse
source · pub struct RequestResponse<TCodec>where
TCodec: RequestResponseCodec + Clone + Send + 'static,{ /* private fields */ }
Expand description
A request/response protocol for some message codec.
Implementations§
source§impl<TCodec> RequestResponse<TCodec>where
TCodec: RequestResponseCodec + Clone + Send + 'static,
impl<TCodec> RequestResponse<TCodec>where TCodec: RequestResponseCodec + Clone + Send + 'static,
sourcepub fn new<I>(
codec: TCodec,
protocols: I,
cfg: RequestResponseConfig
) -> RequestResponse<TCodec>where
I: IntoIterator<Item = (<TCodec as RequestResponseCodec>::Protocol, ProtocolSupport)>,
pub fn new<I>( codec: TCodec, protocols: I, cfg: RequestResponseConfig ) -> RequestResponse<TCodec>where I: IntoIterator<Item = (<TCodec as RequestResponseCodec>::Protocol, ProtocolSupport)>,
Creates a new RequestResponse
behaviour for the given
protocols, codec and configuration.
sourcepub fn send_request(
&mut self,
peer: &PeerId,
request: <TCodec as RequestResponseCodec>::Request
) -> RequestId
pub fn send_request( &mut self, peer: &PeerId, request: <TCodec as RequestResponseCodec>::Request ) -> RequestId
Initiates sending a request.
If the targeted peer is currently not connected, a dialing attempt is initiated and the request is sent as soon as a connection is established.
Note: In order for such a dialing attempt to succeed, the
RequestResonse
protocol must either be embedded in anotherNetworkBehaviour
that provides peer and address discovery, or known addresses of peers must be managed viaRequestResponse::add_address
andRequestResponse::remove_address
.
sourcepub fn send_response(
&mut self,
ch: ResponseChannel<<TCodec as RequestResponseCodec>::Response>,
rs: <TCodec as RequestResponseCodec>::Response
) -> Result<(), <TCodec as RequestResponseCodec>::Response>
pub fn send_response( &mut self, ch: ResponseChannel<<TCodec as RequestResponseCodec>::Response>, rs: <TCodec as RequestResponseCodec>::Response ) -> Result<(), <TCodec as RequestResponseCodec>::Response>
Initiates sending a response to an inbound request.
If the ResponseChannel
is already closed due to a timeout or the
connection being closed, the response is returned as an Err
for
further handling. Once the response has been successfully sent on the
corresponding connection, RequestResponseEvent::ResponseSent
is
emitted. In all other cases RequestResponseEvent::InboundFailure
will be or has been emitted.
The provided ResponseChannel
is obtained from an inbound
RequestResponseMessage::Request
.
sourcepub fn add_address(&mut self, peer: &PeerId, address: Multiaddr)
pub fn add_address(&mut self, peer: &PeerId, address: Multiaddr)
Adds a known address for a peer that can be used for
dialing attempts by the Swarm
, i.e. is returned
by NetworkBehaviour::addresses_of_peer
.
Addresses added in this way are only removed by remove_address
.
sourcepub fn remove_address(&mut self, peer: &PeerId, address: &Multiaddr)
pub fn remove_address(&mut self, peer: &PeerId, address: &Multiaddr)
Removes an address of a peer previously added via add_address
.
sourcepub fn is_connected(&self, peer: &PeerId) -> bool
pub fn is_connected(&self, peer: &PeerId) -> bool
Checks whether a peer is currently connected.
sourcepub fn is_pending_outbound(&self, peer: &PeerId, request_id: &RequestId) -> bool
pub fn is_pending_outbound(&self, peer: &PeerId, request_id: &RequestId) -> bool
Checks whether an outbound request to the peer with the provided
PeerId
initiated by RequestResponse::send_request
is still
pending, i.e. waiting for a response.
sourcepub fn is_pending_inbound(&self, peer: &PeerId, request_id: &RequestId) -> bool
pub fn is_pending_inbound(&self, peer: &PeerId, request_id: &RequestId) -> bool
Checks whether an inbound request from the peer with the provided
PeerId
is still pending, i.e. waiting for a response by the local
node through RequestResponse::send_response
.
Trait Implementations§
source§impl<TCodec> NetworkBehaviour for RequestResponse<TCodec>where
TCodec: RequestResponseCodec + Send + Clone + 'static,
impl<TCodec> NetworkBehaviour for RequestResponse<TCodec>where TCodec: RequestResponseCodec + Send + Clone + 'static,
§type ConnectionHandler = RequestResponseHandler<TCodec>
type ConnectionHandler = RequestResponseHandler<TCodec>
§type OutEvent = RequestResponseEvent<<TCodec as RequestResponseCodec>::Request, <TCodec as RequestResponseCodec>::Response, <TCodec as RequestResponseCodec>::Response>
type OutEvent = RequestResponseEvent<<TCodec as RequestResponseCodec>::Request, <TCodec as RequestResponseCodec>::Response, <TCodec as RequestResponseCodec>::Response>
NetworkBehaviour
and that the swarm will report back.source§fn new_handler(
&mut self
) -> <RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler
fn new_handler( &mut self ) -> <RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler
ConnectionHandler
for a connection with a peer. Read moresource§fn addresses_of_peer(&mut self, peer: &PeerId) -> Vec<Multiaddr, Global>
fn addresses_of_peer(&mut self, peer: &PeerId) -> Vec<Multiaddr, Global>
source§fn on_swarm_event(
&mut self,
event: FromSwarm<'_, <RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler>
)
fn on_swarm_event( &mut self, event: FromSwarm<'_, <RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler> )
Swarm
.source§fn on_connection_handler_event(
&mut self,
peer: PeerId,
connection: ConnectionId,
event: <<<RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::OutEvent
)
fn on_connection_handler_event( &mut self, peer: PeerId, connection: ConnectionId, event: <<<RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::OutEvent )
ConnectionHandler
dedicated to the
peer identified by peer_id
. for the behaviour. Read moresource§fn poll(
&mut self,
_: &mut Context<'_>,
_: &mut impl PollParameters
) -> Poll<NetworkBehaviourAction<<RequestResponse<TCodec> as NetworkBehaviour>::OutEvent, <RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler, <<<RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::InEvent>>
fn poll( &mut self, _: &mut Context<'_>, _: &mut impl PollParameters ) -> Poll<NetworkBehaviourAction<<RequestResponse<TCodec> as NetworkBehaviour>::OutEvent, <RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler, <<<RequestResponse<TCodec> as NetworkBehaviour>::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::InEvent>>
source§fn inject_connection_established(
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
endpoint: &ConnectedPoint,
failed_addresses: Option<&Vec<Multiaddr, Global>>,
other_established: usize
)
fn inject_connection_established( &mut self, peer_id: &PeerId, connection_id: &ConnectionId, endpoint: &ConnectedPoint, failed_addresses: Option<&Vec<Multiaddr, Global>>, other_established: usize )
FromSwarm::ConnectionEstablished
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_connection_closed(
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
endpoint: &ConnectedPoint,
handler: <Self::ConnectionHandler as IntoConnectionHandler>::Handler,
remaining_established: usize
)
fn inject_connection_closed( &mut self, peer_id: &PeerId, connection_id: &ConnectionId, endpoint: &ConnectedPoint, handler: <Self::ConnectionHandler as IntoConnectionHandler>::Handler, remaining_established: usize )
FromSwarm::ConnectionClosed
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_address_change(
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
old: &ConnectedPoint,
new: &ConnectedPoint
)
fn inject_address_change( &mut self, peer_id: &PeerId, connection_id: &ConnectionId, old: &ConnectedPoint, new: &ConnectedPoint )
FromSwarm::AddressChange
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.ConnectedPoint
of an existing connection has changed.source§fn inject_event(
&mut self,
peer_id: PeerId,
connection: ConnectionId,
event: <<Self::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::OutEvent
)
fn inject_event( &mut self, peer_id: PeerId, connection: ConnectionId, event: <<Self::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::OutEvent )
NetworkBehaviour::on_connection_handler_event
instead. The default implementation of this inject_*
method delegates to it.peer_id
.
for the behaviour. Read moresource§fn inject_dial_failure(
&mut self,
peer_id: Option<PeerId>,
handler: Self::ConnectionHandler,
error: &DialError
)
fn inject_dial_failure( &mut self, peer_id: Option<PeerId>, handler: Self::ConnectionHandler, error: &DialError )
InEvent::DialFailure
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_listen_failure(
&mut self,
local_addr: &Multiaddr,
send_back_addr: &Multiaddr,
handler: Self::ConnectionHandler
)
fn inject_listen_failure( &mut self, local_addr: &Multiaddr, send_back_addr: &Multiaddr, handler: Self::ConnectionHandler )
FromSwarm::ListenFailure
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_new_listener(&mut self, id: ListenerId)
fn inject_new_listener(&mut self, id: ListenerId)
FromSwarm::NewListener
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_new_listen_addr(&mut self, id: ListenerId, addr: &Multiaddr)
fn inject_new_listen_addr(&mut self, id: ListenerId, addr: &Multiaddr)
FromSwarm::NewListenAddr
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_expired_listen_addr(&mut self, id: ListenerId, addr: &Multiaddr)
fn inject_expired_listen_addr(&mut self, id: ListenerId, addr: &Multiaddr)
FromSwarm::ExpiredListenAddr
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_listener_error(&mut self, id: ListenerId, err: &(dyn Error + 'static))
fn inject_listener_error(&mut self, id: ListenerId, err: &(dyn Error + 'static))
FromSwarm::ListenerError
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_listener_closed(&mut self, id: ListenerId, reason: Result<(), &Error>)
fn inject_listener_closed(&mut self, id: ListenerId, reason: Result<(), &Error>)
FromSwarm::ListenerClosed
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_new_external_addr(&mut self, addr: &Multiaddr)
fn inject_new_external_addr(&mut self, addr: &Multiaddr)
FromSwarm::NewExternalAddr
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.source§fn inject_expired_external_addr(&mut self, addr: &Multiaddr)
fn inject_expired_external_addr(&mut self, addr: &Multiaddr)
FromSwarm::ExpiredExternalAddr
in NetworkBehaviour::on_swarm_event
instead. The default implementation of this inject_*
method delegates to it.