From 50990034793012cc0bd9a10025437e2a8dbeb4d9 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Wed, 11 May 2016 10:54:00 +0200 Subject: [PATCH] Repeatedly resolving connect addresses to allow DynDNS --- CHANGELOG.md | 1 + src/cloud.rs | 23 ++++++++++------------- src/main.rs | 5 +++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd23f85..5e9716c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ This project follows [semantic versioning](http://semver.org). ### Unreleased +- [changed] Repeatedly resolving connect addresses to allow DynDNS - [changed] Listening on IPv4 and IPv6 - [changed] Using SO_REUSEADDR to allow frequent rebinding - [changed] Building and using local libsodium library automatically diff --git a/src/cloud.rs b/src/cloud.rs index 7a21b5d..8d59c73 100644 --- a/src/cloud.rs +++ b/src/cloud.rs @@ -68,12 +68,12 @@ impl PeerList { } #[inline(always)] - fn contains_addr(&mut self, addr: &SocketAddr) -> bool { + fn contains_addr(&self, addr: &SocketAddr) -> bool { self.addresses.contains(addr) } #[inline(always)] - fn contains_node(&mut self, node_id: &NodeId) -> bool { + fn contains_node(&self, node_id: &NodeId) -> bool { self.nodes.contains_key(node_id) } @@ -134,7 +134,7 @@ pub struct GenericCloud { addresses: Vec, learning: bool, broadcast: bool, - reconnect_peers: Vec, + reconnect_peers: Vec, blacklist_peers: Vec, table: Box, socket4: UdpSocket, @@ -242,7 +242,11 @@ impl GenericCloud

{ self.peers.len() } - pub fn connect(&mut self, addr: Addr, reconnect: bool) -> Result<(), Error> { + pub fn add_reconnect_peer(&mut self, add: String) { + self.reconnect_peers.push(add) + } + + pub fn connect(&mut self, addr: Addr) -> Result<(), Error> { if let Ok(mut addrs) = addr.to_socket_addrs() { while let Some(a) = addrs.next() { if self.peers.contains_addr(&a) || self.blacklist_peers.contains(&a) { @@ -251,13 +255,6 @@ impl GenericCloud

{ } } debug!("Connecting to {}", addr); - if reconnect { - if let Ok(mut addrs) = addr.to_socket_addrs() { - while let Some(a) = addrs.next() { - self.reconnect_peers.push(a); - } - } - } let subnets = self.addresses.clone(); let node_id = self.node_id.clone(); let mut msg = Message::Init(0, node_id, subnets); @@ -291,7 +288,7 @@ impl GenericCloud

{ self.next_peerlist = now() + self.update_freq as Time; } for addr in self.reconnect_peers.clone() { - try!(self.connect(addr, false)); + try!(self.connect(&addr as &str)); } Ok(()) } @@ -348,7 +345,7 @@ impl GenericCloud

{ Message::Peers(peers) => { for p in &peers { if ! self.peers.contains_addr(p) && ! self.blacklist_peers.contains(p) { - try!(self.connect(p, false)); + try!(self.connect(p)); } } }, diff --git a/src/main.rs b/src/main.rs index 5203528..64793b3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -128,8 +128,9 @@ fn run (args: Args) { if let Some(script) = args.flag_ifup { run_script(script, cloud.ifname()); } - for addr in &args.flag_connect { - try_fail!(cloud.connect(&addr as &str, true), "Failed to send message to {}: {}", &addr); + for addr in args.flag_connect { + try_fail!(cloud.connect(&addr as &str), "Failed to send message to {}: {}", &addr); + cloud.add_reconnect_peer(addr); } cloud.run(); if let Some(script) = args.flag_ifdown {