mirror of https://github.com/dswd/vpncloud.git
Compare commits
2 Commits
bd839534e0
...
ac1aec9d25
Author | SHA1 | Date |
---|---|---|
Dennis Schwerdel | ac1aec9d25 | |
Dennis Schwerdel | 45ab0a4608 |
29
src/cloud.rs
29
src/cloud.rs
|
@ -339,9 +339,10 @@ impl<D: Device, P: Protocol, S: Socket, TS: TimeSource> GenericCloud<D, P, S, TS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for addr in del {
|
for addr in del {
|
||||||
self.peers.remove(&addr);
|
|
||||||
self.pending_inits.remove(&addr);
|
self.pending_inits.remove(&addr);
|
||||||
self.connect_sock(addr)?;
|
if self.peers.remove(&addr).is_some() {
|
||||||
|
self.connect_sock(addr)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -716,14 +717,24 @@ impl<D: Device, P: Protocol, S: Socket, TS: TimeSource> GenericCloud<D, P, S, TS
|
||||||
let msg_result = if let Some(init) = self.pending_inits.get_mut(&src) {
|
let msg_result = if let Some(init) = self.pending_inits.get_mut(&src) {
|
||||||
init.handle_message(data)
|
init.handle_message(data)
|
||||||
} else if is_init_message(data.message()) {
|
} else if is_init_message(data.message()) {
|
||||||
let mut init = self.crypto.peer_instance(self.create_node_info());
|
let mut result = None;
|
||||||
let msg_result = init.handle_message(data);
|
if let Some(peer) = self.peers.get_mut(&src) {
|
||||||
match msg_result {
|
if peer.crypto.has_init() {
|
||||||
Ok(res) => {
|
result = Some(peer.crypto.handle_message(data))
|
||||||
self.pending_inits.insert(src, init);
|
}
|
||||||
Ok(res)
|
}
|
||||||
|
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) {
|
} else if let Some(peer) = self.peers.get_mut(&src) {
|
||||||
peer.crypto.handle_message(data)
|
peer.crypto.handle_message(data)
|
||||||
|
|
|
@ -269,6 +269,10 @@ impl<P: Payload> PeerCrypto<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn has_init(&self) -> bool {
|
||||||
|
self.init.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_ready(&self) -> bool {
|
pub fn is_ready(&self) -> bool {
|
||||||
self.core.is_some()
|
self.core.is_some()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue