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

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
                                         break;
196
                                         break;
197
                                     }
197
                                     }
198
                                     Some(rendezvous_message::Union::local_addr(la)) => {
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
                                         break;
200
                                         break;
201
                                     }
201
                                     }
202
                                     _ => {
202
                                     _ => {
@@ -231,13 +231,11 @@ impl RendezvousServer {
231
                         self.update_addr(rp.id, addr, socket).await?;
231
                         self.update_addr(rp.id, addr, socket).await?;
232
                         if self.serial > rp.serial {
232
                         if self.serial > rp.serial {
233
                             let mut msg_out = RendezvousMessage::new();
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
                                 serial: self.serial,
235
                                 serial: self.serial,
237
                                 rendezvous_servers: self.rendezvous_servers.clone(),
236
                                 rendezvous_servers: self.rendezvous_servers.clone(),
238
                                 ..Default::default()
237
                                 ..Default::default()
239
                             });
238
                             });
240
-                            msg_out.set_misc_info(mi);
241
                             socket.send(&msg_out, addr).await?;
239
                             socket.send(&msg_out, addr).await?;
242
                         }
240
                         }
243
                     }
241
                     }
@@ -286,28 +284,25 @@ impl RendezvousServer {
286
                     self.handle_hole_sent(phs, addr, Some(socket)).await?;
284
                     self.handle_hole_sent(phs, addr, Some(socket)).await?;
287
                 }
285
                 }
288
                 Some(rendezvous_message::Union::local_addr(la)) => {
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
     #[inline]
403
     #[inline]
409
     async fn handle_local_addr<'a>(
404
     async fn handle_local_addr<'a>(
410
         &mut self,
405
         &mut self,
411
-        la: &LocalAddr,
406
+        la: LocalAddr,
412
         addr: SocketAddr,
407
         addr: SocketAddr,
413
         socket: Option<&'a mut FramedSocket>,
408
         socket: Option<&'a mut FramedSocket>,
414
     ) -> ResultType<()> {
409
     ) -> ResultType<()> {
@@ -421,8 +416,13 @@ impl RendezvousServer {
421
             &addr
416
             &addr
422
         );
417
         );
423
         let mut msg_out = RendezvousMessage::new();
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
         msg_out.set_punch_hole_response(PunchHoleResponse {
423
         msg_out.set_punch_hole_response(PunchHoleResponse {
425
             socket_addr: la.local_addr.clone(),
424
             socket_addr: la.local_addr.clone(),
425
+            relay_server,
426
             ..Default::default()
426
             ..Default::default()
427
         });
427
         });
428
         if let Some(socket) = socket {
428
         if let Some(socket) = socket {