From 8930e21663dd664fff8634cd1f368c213b9d5770 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Tue, 22 Dec 2015 22:45:52 +0100 Subject: [PATCH] No longer encrypting multiple times --- CHANGELOG.md | 1 + src/cloud.rs | 33 +++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a26d61..f4ada03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ This project follows [semantic versioning](http://semver.org). - [changed] Logging more verbosely - [fixed] Removing NULL-bytes from interface name - [fixed] Supporting hostnames as peers +- [fixed] No longer encrypting multiple times ### v0.4 (2015-12-22) diff --git a/src/cloud.rs b/src/cloud.rs index 5b87216..c6d322c 100644 --- a/src/cloud.rs +++ b/src/cloud.rs @@ -131,11 +131,30 @@ impl GenericCloud

{ } } + #[inline] pub fn ifname(&self) -> &str { self.device.ifname() } - fn send_msg(&mut self, addr: Addr, msg: &mut Message) -> Result<(), Error> { + #[inline] + fn broadcast_msg(&mut self, msg: &mut Message) -> Result<(), Error> { + debug!("Broadcasting {:?}", msg); + let msg_data = encode(&mut self.options, msg, &mut self.buffer_out, &mut self.crypto); + for addr in &self.peers.as_vec() { + try!(match self.socket.send_to(msg_data, addr) { + Ok(written) if written == msg_data.len() => Ok(()), + Ok(_) => Err(Error::SocketError("Sent out truncated packet")), + Err(e) => { + error!("Failed to send via network {:?}", e); + Err(Error::SocketError("IOError when sending")) + } + }) + } + Ok(()) + } + + #[inline] + fn send_msg(&mut self, addr: SocketAddr, msg: &mut Message) -> Result<(), Error> { debug!("Sending {:?} to {}", msg, addr); let msg_data = encode(&mut self.options, msg, &mut self.buffer_out, &mut self.crypto); match self.socket.send_to(msg_data, addr) { @@ -190,9 +209,7 @@ impl GenericCloud

{ } let peers = self.peers.subset(peer_num); let mut msg = Message::Peers(peers); - for addr in &self.peers.as_vec() { - try!(self.send_msg(addr, &mut msg)); - } + try!(self.broadcast_msg(&mut msg)); self.next_peerlist = now() + self.update_freq as Time; } for addr in self.reconnect_peers.clone() { @@ -220,9 +237,7 @@ impl GenericCloud

{ } debug!("No destination for {} found, broadcasting", dst); let mut msg = Message::Data(payload, start, end); - for addr in &self.peers.as_vec() { - try!(self.send_msg(addr, &mut msg)); - } + try!(self.broadcast_msg(&mut msg)); } } Ok(()) @@ -332,8 +347,6 @@ impl GenericCloud

{ } } info!("Shutting down..."); - for p in &self.peers.as_vec() { - let _ = self.send_msg(p, &mut Message::Close); - } + self.broadcast_msg(&mut Message::Close).ok(); } }