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() }