diff --git a/build.rs b/build.rs index 6259a53..9f8c855 100644 --- a/build.rs +++ b/build.rs @@ -1,3 +1,3 @@ fn main() { - hbb_common::gen_version(); + hbb_common::gen_version(); } diff --git a/libs/hbb_common b/libs/hbb_common index be1f253..3f862ea 160000 --- a/libs/hbb_common +++ b/libs/hbb_common @@ -1 +1 @@ -Subproject commit be1f253e874c6df065c1d9ce22a5ab9e4ebd498a +Subproject commit 3f862eaa423823b6a4c9a62e6b36f3b692cfd06f diff --git a/src/lib.rs b/src/lib.rs index 72f8347..f0fd5b2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,6 @@ mod rendezvous_server; mod sled_async; -use sled_async::*; pub use rendezvous_server::*; +use sled_async::*; mod version; pub use version::*; diff --git a/src/rendezvous_server.rs b/src/rendezvous_server.rs index bce2f80..94a65dc 100644 --- a/src/rendezvous_server.rs +++ b/src/rendezvous_server.rs @@ -7,7 +7,7 @@ use hbb_common::{ stream::{SplitSink, StreamExt}, }, log, - protobuf::Message as _, + protobuf::{Message as _, MessageField}, rendezvous_proto::*, tcp::{new_listener, FramedStream}, timeout, @@ -236,12 +236,19 @@ impl RendezvousServer { allow_err!(rs.handle_local_addr(la, addr, None).await); break; } - Some(rendezvous_message::Union::test_nat_request(_)) => { + Some(rendezvous_message::Union::test_nat_request(tar)) => { let mut msg_out = RendezvousMessage::new(); - msg_out.set_test_nat_response(TestNatResponse { + let mut res = TestNatResponse { port: addr.port() as _, ..Default::default() - }); + } + if rs.serial > tar.serial { + let mut cu = ConfigUpdate::new(); + cu.serial = rs.serial; + cu.rendezvous_servers = rs.rendezvous_servers.clone(); + res.cu = MessageField::from_option(Some(cu)); + } + msg_out.set_test_nat_response(res); if let Some(tcp) = sender.as_mut() { if let Ok(bytes) = msg_out.write_to_bytes() { allow_err!(tcp.send(Bytes::from(bytes)).await);