|
|
@@ -66,6 +66,10 @@ struct PeerMap {
|
|
66
|
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
|
73
|
pub const DEFAULT_PORT: &'static str = "21116";
|
|
70
|
74
|
|
|
71
|
75
|
impl PeerMap {
|
|
|
@@ -218,6 +222,9 @@ impl RendezvousServer {
|
|
218
|
222
|
}
|
|
219
|
223
|
Ok((stream, addr)) = listener.accept() => {
|
|
220
|
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
|
228
|
let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
|
|
222
|
229
|
let tcp_punch = rs.tcp_punch.clone();
|
|
223
|
230
|
let mut rs = rs.clone();
|
|
|
@@ -593,7 +600,7 @@ impl RendezvousServer {
|
|
593
|
600
|
};
|
|
594
|
601
|
msg_out.set_fetch_local_addr(FetchLocalAddr {
|
|
595
|
602
|
socket_addr,
|
|
596
|
|
- relay_server: self.relay_servers[i].clone(),
|
|
|
603
|
+ relay_server: check_relay_server(&self.relay_servers[i]),
|
|
597
|
604
|
..Default::default()
|
|
598
|
605
|
});
|
|
599
|
606
|
} else {
|
|
|
@@ -610,7 +617,7 @@ impl RendezvousServer {
|
|
610
|
617
|
msg_out.set_punch_hole(PunchHole {
|
|
611
|
618
|
socket_addr,
|
|
612
|
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
|
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
|
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
|
+}
|