|
|
@@ -23,7 +23,7 @@ use std::{
|
|
23
|
23
|
time::Instant,
|
|
24
|
24
|
};
|
|
25
|
25
|
|
|
26
|
|
-#[derive(Clone)]
|
|
|
26
|
+#[derive(Clone, Debug)]
|
|
27
|
27
|
struct Peer {
|
|
28
|
28
|
socket_addr: SocketAddr,
|
|
29
|
29
|
last_reg_time: Instant,
|
|
|
@@ -80,6 +80,7 @@ impl PeerMap {
|
|
80
|
80
|
pk: pk.clone(),
|
|
81
|
81
|
},
|
|
82
|
82
|
);
|
|
|
83
|
+ drop(lock);
|
|
83
|
84
|
let ip = socket_addr.ip().to_string();
|
|
84
|
85
|
self.db.insert(id, PeerSerde { ip, uuid, pk });
|
|
85
|
86
|
}
|
|
|
@@ -192,13 +193,21 @@ impl RendezvousServer {
|
|
192
|
193
|
}
|
|
193
|
194
|
}
|
|
194
|
195
|
Some(rendezvous_message::Union::register_pk(rk)) => {
|
|
|
196
|
+ if rk.uuid.is_empty() {
|
|
|
197
|
+ return Ok(());
|
|
|
198
|
+ }
|
|
195
|
199
|
let id = rk.id;
|
|
196
|
200
|
let mut res = register_pk_response::Result::OK;
|
|
197
|
201
|
if let Some(peer) = self.pm.get(&id).await {
|
|
198
|
|
- if peer.uuid != rk.uuid {
|
|
199
|
|
- log::warn!("Peer {} pk mismatch: {:?} vs {:?}", id, rk.uuid, peer.uuid);
|
|
|
202
|
+ if !peer.uuid.is_empty() && peer.uuid != rk.uuid {
|
|
|
203
|
+ log::warn!(
|
|
|
204
|
+ "Peer {} uuid mismatch: {:?} vs {:?}",
|
|
|
205
|
+ id,
|
|
|
206
|
+ rk.uuid,
|
|
|
207
|
+ peer.uuid
|
|
|
208
|
+ );
|
|
200
|
209
|
res = register_pk_response::Result::UUID_MISMATCH;
|
|
201
|
|
- } else if peer.pk != rk.pk {
|
|
|
210
|
+ } else if peer.uuid.is_empty() || peer.pk != rk.pk {
|
|
202
|
211
|
self.pm.update_pk(id, addr, rk.uuid, rk.pk);
|
|
203
|
212
|
}
|
|
204
|
213
|
} else {
|