From 103584ef27534a4db894899ab025d6f45f2c2c74 Mon Sep 17 00:00:00 2001 From: pgarg66 <40076733+pgarg66@users.noreply.github.com> Date: Tue, 17 Jul 2018 11:23:32 -0700 Subject: [PATCH] Use public IP for client gossip, if UPnP fails (#665) --- src/bin/client-demo.rs | 2 ++ src/nat.rs | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) mode change 100644 => 100755 src/nat.rs diff --git a/src/bin/client-demo.rs b/src/bin/client-demo.rs index 0c879ebab..3cbfb3ea7 100755 --- a/src/bin/client-demo.rs +++ b/src/bin/client-demo.rs @@ -365,6 +365,8 @@ fn spy_node() -> (NodeInfo, UdpSocket) { let gossip_socket_pair = udp_public_bind("gossip", 8000, 10000); let pubkey = KeyPair::new().pubkey(); let daddr = "0.0.0.0:0".parse().unwrap(); + assert!(!gossip_socket_pair.addr.ip().is_unspecified()); + assert!(!gossip_socket_pair.addr.ip().is_multicast()); let node = NodeInfo::new( pubkey, //gossip.local_addr().unwrap(), diff --git a/src/nat.rs b/src/nat.rs old mode 100644 new mode 100755 index 7481dd075..b8441a351 --- a/src/nat.rs +++ b/src/nat.rs @@ -106,9 +106,13 @@ pub fn udp_public_bind(label: &str, startport: u16, endport: u16) -> UdpSocketPa Err(_) => { let sender = udp_random_bind(startport, endport, 5).unwrap(); let local_addr = sender.local_addr().unwrap(); - info!("Using local address {} for {}", local_addr, label); + + let pub_ip = get_public_ip_addr().unwrap(); + let pub_addr = SocketAddr::new(pub_ip, local_addr.port()); + + info!("Using source address {} for {}", pub_addr, label); UdpSocketPair { - addr: private_addr, + addr: pub_addr, receiver: sender.try_clone().unwrap(), sender, }