From 2fe82be3bcb326af04c4c862431237c576ed1152 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 23 Apr 2020 14:40:59 +0000 Subject: RPC to ourself do not pass through serialization + HTTPS --- src/block.rs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'src/block.rs') diff --git a/src/block.rs b/src/block.rs index 21ddf837..23222a7f 100644 --- a/src/block.rs +++ b/src/block.rs @@ -96,19 +96,27 @@ impl BlockManager { } fn register_handler(self: Arc, rpc_server: &mut RpcServer, path: String) { + let self2 = self.clone(); rpc_server.add_handler::(path, move |msg, _addr| { - let self2 = self.clone(); - async move { - match msg { - Message::PutBlock(m) => self2.write_block(&m.hash, &m.data).await, - Message::GetBlock(h) => self2.read_block(&h).await, - Message::NeedBlockQuery(h) => { - self2.need_block(&h).await.map(Message::NeedBlockReply) - } - _ => Err(Error::BadRequest(format!("Unexpected RPC message"))), - } - } + let self2 = self2.clone(); + async move { self2.handle(&msg).await } }); + + let self2 = self.clone(); + self.rpc_client + .set_local_handler(self.system.id, move |msg| { + let self2 = self2.clone(); + async move { self2.handle(&msg).await } + }); + } + + async fn handle(self: Arc, msg: &Message) -> Result { + match msg { + Message::PutBlock(m) => self.write_block(&m.hash, &m.data).await, + Message::GetBlock(h) => self.read_block(h).await, + Message::NeedBlockQuery(h) => self.need_block(h).await.map(Message::NeedBlockReply), + _ => Err(Error::BadRequest(format!("Unexpected RPC message"))), + } } pub async fn spawn_background_worker(self: Arc) { @@ -299,7 +307,7 @@ impl BlockManager { let msg = Arc::new(Message::NeedBlockQuery(*hash)); let who_needs_fut = who.iter().map(|to| { self.rpc_client - .call(to, msg.clone(), NEED_BLOCK_QUERY_TIMEOUT) + .call_arc(*to, msg.clone(), NEED_BLOCK_QUERY_TIMEOUT) }); let who_needs = join_all(who_needs_fut).await; -- cgit v1.2.3