|
|
@@ -7,7 +7,7 @@ use hbb_common::{
|
|
7
|
7
|
stream::{SplitSink, StreamExt},
|
|
8
|
8
|
},
|
|
9
|
9
|
log,
|
|
10
|
|
- protobuf::Message as _,
|
|
|
10
|
+ protobuf::{Message as _, MessageField},
|
|
11
|
11
|
rendezvous_proto::*,
|
|
12
|
12
|
tcp::{new_listener, FramedStream},
|
|
13
|
13
|
timeout,
|
|
|
@@ -236,12 +236,19 @@ impl RendezvousServer {
|
|
236
|
236
|
allow_err!(rs.handle_local_addr(la, addr, None).await);
|
|
237
|
237
|
break;
|
|
238
|
238
|
}
|
|
239
|
|
- Some(rendezvous_message::Union::test_nat_request(_)) => {
|
|
|
239
|
+ Some(rendezvous_message::Union::test_nat_request(tar)) => {
|
|
240
|
240
|
let mut msg_out = RendezvousMessage::new();
|
|
241
|
|
- msg_out.set_test_nat_response(TestNatResponse {
|
|
|
241
|
+ let mut res = TestNatResponse {
|
|
242
|
242
|
port: addr.port() as _,
|
|
243
|
243
|
..Default::default()
|
|
244
|
|
- });
|
|
|
244
|
+ }
|
|
|
245
|
+ if rs.serial > tar.serial {
|
|
|
246
|
+ let mut cu = ConfigUpdate::new();
|
|
|
247
|
+ cu.serial = rs.serial;
|
|
|
248
|
+ cu.rendezvous_servers = rs.rendezvous_servers.clone();
|
|
|
249
|
+ res.cu = MessageField::from_option(Some(cu));
|
|
|
250
|
+ }
|
|
|
251
|
+ msg_out.set_test_nat_response(res);
|
|
245
|
252
|
if let Some(tcp) = sender.as_mut() {
|
|
246
|
253
|
if let Ok(bytes) = msg_out.write_to_bytes() {
|
|
247
|
254
|
allow_err!(tcp.send(Bytes::from(bytes)).await);
|