From ac1aec9d25c9a5ea5ac939155346a2feed90d3e3 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Sun, 1 Nov 2020 23:33:00 +0100 Subject: [PATCH] Fix lost peng --- src/cloud.rs | 24 +++++++++++++++++------- src/crypto/mod.rs | 4 ++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/cloud.rs b/src/cloud.rs index bc8f7cc..988934b 100644 --- a/src/cloud.rs +++ b/src/cloud.rs @@ -717,14 +717,24 @@ impl GenericCloud { - self.pending_inits.insert(src, init); - Ok(res) + let mut result = None; + if let Some(peer) = self.peers.get_mut(&src) { + if peer.crypto.has_init() { + result = Some(peer.crypto.handle_message(data)) + } + } + if let Some(result) = result { + result + } else { + let mut init = self.crypto.peer_instance(self.create_node_info()); + let msg_result = init.handle_message(data); + match msg_result { + Ok(res) => { + self.pending_inits.insert(src, init); + Ok(res) + } + Err(err) => return Err(err) } - Err(err) => return Err(err) } } else if let Some(peer) = self.peers.get_mut(&src) { peer.crypto.handle_message(data) diff --git a/src/crypto/mod.rs b/src/crypto/mod.rs index 32745b6..75d6bda 100644 --- a/src/crypto/mod.rs +++ b/src/crypto/mod.rs @@ -269,6 +269,10 @@ impl PeerCrypto

{ } } + pub fn has_init(&self) -> bool { + self.init.is_some() + } + pub fn is_ready(&self) -> bool { self.core.is_some() }