From 5bf9dd2aa9bf944434203128783925bdc2ad8c01 Mon Sep 17 00:00:00 2001 From: Andrei Eres <eresav@me.com> Date: Tue, 7 Jan 2025 10:53:04 +0100 Subject: [PATCH] Implement NetworkRequest for litep2p --- .../client/network/src/litep2p/service.rs | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/substrate/client/network/src/litep2p/service.rs b/substrate/client/network/src/litep2p/service.rs index d270e90efdf..2d4a117d156 100644 --- a/substrate/client/network/src/litep2p/service.rs +++ b/substrate/client/network/src/litep2p/service.rs @@ -28,8 +28,8 @@ use crate::{ peer_store::PeerStoreProvider, service::out_events, Event, IfDisconnected, NetworkDHTProvider, NetworkEventStream, NetworkPeers, NetworkRequest, - NetworkSigner, NetworkStateInfo, NetworkStatus, NetworkStatusProvider, ProtocolName, - RequestFailure, Signature, + NetworkSigner, NetworkStateInfo, NetworkStatus, NetworkStatusProvider, OutboundFailure, + ProtocolName, RequestFailure, Signature, }; use codec::DecodeAll; @@ -526,13 +526,23 @@ impl NetworkStateInfo for Litep2pNetworkService { impl NetworkRequest for Litep2pNetworkService { async fn request( &self, - _target: PeerId, - _protocol: ProtocolName, - _request: Vec<u8>, - _fallback_request: Option<(Vec<u8>, ProtocolName)>, - _connect: IfDisconnected, + target: PeerId, + protocol: ProtocolName, + request: Vec<u8>, + fallback_request: Option<(Vec<u8>, ProtocolName)>, + connect: IfDisconnected, ) -> Result<(Vec<u8>, ProtocolName), RequestFailure> { - unimplemented!(); + let (tx, rx) = oneshot::channel(); + + self.start_request(target, protocol, request, fallback_request, tx, connect); + + match rx.await { + Ok(v) => v, + // The channel can only be closed if the network worker no longer exists. If the + // network worker no longer exists, then all connections to `target` are necessarily + // closed, and we legitimately report this situation as a "ConnectionClosed". + Err(_) => Err(RequestFailure::Network(OutboundFailure::ConnectionClosed)), + } } fn start_request( -- GitLab