|
|
@@ -196,7 +196,7 @@ impl RendezvousServer {
|
|
196
|
196
|
break;
|
|
197
|
197
|
}
|
|
198
|
198
|
Some(rendezvous_message::Union::local_addr(la)) => {
|
|
199
|
|
- allow_err!(rs.handle_local_addr(&la, addr, None).await);
|
|
|
199
|
+ allow_err!(rs.handle_local_addr(la, addr, None).await);
|
|
200
|
200
|
break;
|
|
201
|
201
|
}
|
|
202
|
202
|
_ => {
|
|
|
@@ -231,13 +231,11 @@ impl RendezvousServer {
|
|
231
|
231
|
self.update_addr(rp.id, addr, socket).await?;
|
|
232
|
232
|
if self.serial > rp.serial {
|
|
233
|
233
|
let mut msg_out = RendezvousMessage::new();
|
|
234
|
|
- let mut mi = MiscInfo::new();
|
|
235
|
|
- mi.set_configure_update(ConfigUpdate {
|
|
|
234
|
+ msg_out.set_configure_update(ConfigUpdate {
|
|
236
|
235
|
serial: self.serial,
|
|
237
|
236
|
rendezvous_servers: self.rendezvous_servers.clone(),
|
|
238
|
237
|
..Default::default()
|
|
239
|
238
|
});
|
|
240
|
|
- msg_out.set_misc_info(mi);
|
|
241
|
239
|
socket.send(&msg_out, addr).await?;
|
|
242
|
240
|
}
|
|
243
|
241
|
}
|
|
|
@@ -286,28 +284,25 @@ impl RendezvousServer {
|
|
286
|
284
|
self.handle_hole_sent(phs, addr, Some(socket)).await?;
|
|
287
|
285
|
}
|
|
288
|
286
|
Some(rendezvous_message::Union::local_addr(la)) => {
|
|
289
|
|
- self.handle_local_addr(&la, addr, Some(socket)).await?;
|
|
|
287
|
+ self.handle_local_addr(la, addr, Some(socket)).await?;
|
|
290
|
288
|
}
|
|
291
|
|
- Some(rendezvous_message::Union::misc_info(mi)) => match mi.union {
|
|
292
|
|
- Some(misc_info::Union::configure_update(mut cu)) => {
|
|
293
|
|
- if addr.ip() == std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))
|
|
294
|
|
- && cu.serial > self.serial
|
|
295
|
|
- {
|
|
296
|
|
- self.serial = cu.serial;
|
|
297
|
|
- self.rendezvous_servers = cu
|
|
298
|
|
- .rendezvous_servers
|
|
299
|
|
- .drain(..)
|
|
300
|
|
- .filter(|x| test_if_valid_server(x).is_ok())
|
|
301
|
|
- .collect();
|
|
302
|
|
- log::info!(
|
|
303
|
|
- "configure updated: serial={} rendezvous-servers={:?}",
|
|
304
|
|
- self.serial,
|
|
305
|
|
- self.rendezvous_servers
|
|
306
|
|
- );
|
|
307
|
|
- }
|
|
|
289
|
+ Some(rendezvous_message::Union::configure_update(mut cu)) => {
|
|
|
290
|
+ if addr.ip() == std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))
|
|
|
291
|
+ && cu.serial > self.serial
|
|
|
292
|
+ {
|
|
|
293
|
+ self.serial = cu.serial;
|
|
|
294
|
+ self.rendezvous_servers = cu
|
|
|
295
|
+ .rendezvous_servers
|
|
|
296
|
+ .drain(..)
|
|
|
297
|
+ .filter(|x| test_if_valid_server(x).is_ok())
|
|
|
298
|
+ .collect();
|
|
|
299
|
+ log::info!(
|
|
|
300
|
+ "configure updated: serial={} rendezvous-servers={:?}",
|
|
|
301
|
+ self.serial,
|
|
|
302
|
+ self.rendezvous_servers
|
|
|
303
|
+ );
|
|
308
|
304
|
}
|
|
309
|
|
- _ => {}
|
|
310
|
|
- },
|
|
|
305
|
+ }
|
|
311
|
306
|
_ => {}
|
|
312
|
307
|
}
|
|
313
|
308
|
}
|
|
|
@@ -408,7 +403,7 @@ impl RendezvousServer {
|
|
408
|
403
|
#[inline]
|
|
409
|
404
|
async fn handle_local_addr<'a>(
|
|
410
|
405
|
&mut self,
|
|
411
|
|
- la: &LocalAddr,
|
|
|
406
|
+ la: LocalAddr,
|
|
412
|
407
|
addr: SocketAddr,
|
|
413
|
408
|
socket: Option<&'a mut FramedSocket>,
|
|
414
|
409
|
) -> ResultType<()> {
|
|
|
@@ -421,8 +416,13 @@ impl RendezvousServer {
|
|
421
|
416
|
&addr
|
|
422
|
417
|
);
|
|
423
|
418
|
let mut msg_out = RendezvousMessage::new();
|
|
|
419
|
+ let mut relay_server = la.relay_server;
|
|
|
420
|
+ if relay_server.is_empty() {
|
|
|
421
|
+ relay_server = self.relay_server.clone();
|
|
|
422
|
+ }
|
|
424
|
423
|
msg_out.set_punch_hole_response(PunchHoleResponse {
|
|
425
|
424
|
socket_addr: la.local_addr.clone(),
|
|
|
425
|
+ relay_server,
|
|
426
|
426
|
..Default::default()
|
|
427
|
427
|
});
|
|
428
|
428
|
if let Some(socket) = socket {
|