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

use public ip for relay server if it is 0.0.0.0

open-trade лет назад: 4
Родитель
Сommit
825a9b5b59
1 измененных файлов с 16 добавлено и 2 удалено
  1. 16 2
      src/rendezvous_server.rs

+ 16 - 2
src/rendezvous_server.rs

@@ -66,6 +66,10 @@ struct PeerMap {
66
     db: super::SledAsync,
66
     db: super::SledAsync,
67
 }
67
 }
68
 
68
 
69
+lazy_static::lazy_static! {
70
+    static ref PUBLIC_IP: Arc<RwLock<String>> = Default::default();
71
+}
72
+
69
 pub const DEFAULT_PORT: &'static str = "21116";
73
 pub const DEFAULT_PORT: &'static str = "21116";
70
 
74
 
71
 impl PeerMap {
75
 impl PeerMap {
@@ -218,6 +222,9 @@ impl RendezvousServer {
218
                 }
222
                 }
219
                 Ok((stream, addr)) = listener.accept() => {
223
                 Ok((stream, addr)) = listener.accept() => {
220
                     log::debug!("Tcp connection from {:?}", addr);
224
                     log::debug!("Tcp connection from {:?}", addr);
225
+                    if let Ok(local_addr) = stream.local_addr() {
226
+                        *PUBLIC_IP.write().unwrap() = local_addr.ip().to_string();
227
+                    }
221
                     let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
228
                     let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
222
                     let tcp_punch = rs.tcp_punch.clone();
229
                     let tcp_punch = rs.tcp_punch.clone();
223
                     let mut rs = rs.clone();
230
                     let mut rs = rs.clone();
@@ -593,7 +600,7 @@ impl RendezvousServer {
593
                 };
600
                 };
594
                 msg_out.set_fetch_local_addr(FetchLocalAddr {
601
                 msg_out.set_fetch_local_addr(FetchLocalAddr {
595
                     socket_addr,
602
                     socket_addr,
596
-                    relay_server: self.relay_servers[i].clone(),
603
+                    relay_server: check_relay_server(&self.relay_servers[i]),
597
                     ..Default::default()
604
                     ..Default::default()
598
                 });
605
                 });
599
             } else {
606
             } else {
@@ -610,7 +617,7 @@ impl RendezvousServer {
610
                 msg_out.set_punch_hole(PunchHole {
617
                 msg_out.set_punch_hole(PunchHole {
611
                     socket_addr,
618
                     socket_addr,
612
                     nat_type: ph.nat_type,
619
                     nat_type: ph.nat_type,
613
-                    relay_server: self.relay_servers[i].clone(),
620
+                    relay_server: check_relay_server(&self.relay_servers[i]),
614
                     ..Default::default()
621
                     ..Default::default()
615
                 });
622
                 });
616
             }
623
             }
@@ -698,3 +705,10 @@ pub fn test_if_valid_server(host: &str, name: &str) -> ResultType<SocketAddr> {
698
     }
705
     }
699
     res
706
     res
700
 }
707
 }
708
+
709
+fn check_relay_server(addr: &str) -> String {
710
+    if addr.contains("0.0.0.0") {
711
+        return addr.replace("0.0.0.0", &*PUBLIC_IP.read().unwrap());
712
+    }
713
+    addr.to_owned()
714
+}