Просмотр исходного кода

relay for local addr in case in different sub net

open-trade лет назад: 5
Родитель
Сommit
f3425044a6
2 измененных файлов с 26 добавлено и 26 удалено
  1. 1 1
      libs/hbb_common
  2. 25 25
      src/rendezvous_server.rs

+ 1 - 1
libs/hbb_common

@@ -1 +1 @@
1
-Subproject commit afce320583693795f971e081298528e32d2719bd
1
+Subproject commit e4313f5f0f317fecfb0e8d2dbf2be62ae99edc90

+ 25 - 25
src/rendezvous_server.rs

@@ -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 {