From b2cc5ba7e1456c0278f63ffea77174c7a114ddc1 Mon Sep 17 00:00:00 2001 From: Yoni Date: Mon, 31 Dec 2018 18:49:05 +0200 Subject: [PATCH 1/3] Enable setting a fixed dandelion peer --- config/src/comments.rs | 4 ++++ p2p/src/peers.rs | 40 +++++++++++++++++++++++++++------------- p2p/src/types.rs | 3 +++ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/config/src/comments.rs b/config/src/comments.rs index 6622b5f9..7eaad916 100644 --- a/config/src/comments.rs +++ b/config/src/comments.rs @@ -230,6 +230,10 @@ fn comments() -> HashMap { # 15 = Bit flags for FULL_NODE #This structure needs to be changed internally, to make it more configurable + +# A prefered dandelion_peer, mainly used for testing dandelion +# dandelion_peer = \"10.0.0.1:13144\" + " .to_string(), ); diff --git a/p2p/src/peers.rs b/p2p/src/peers.rs index 96402ac2..8e0817d4 100644 --- a/p2p/src/peers.rs +++ b/p2p/src/peers.rs @@ -83,24 +83,38 @@ impl Peers { // Update the dandelion relay pub fn update_dandelion_relay(&self) { let peers = self.outgoing_connected_peers(); - - match thread_rng().choose(&peers) { - Some(peer) => { - // Clear the map and add new relay - let dandelion_relay = &self.dandelion_relay; - dandelion_relay.write().clear(); - dandelion_relay - .write() - .insert(Utc::now().timestamp(), peer.clone()); - debug!( - "Successfully updated Dandelion relay to: {}", - peer.info.addr - ); + match &self.config.dandelion_peer { + Some(ip) => { + for peer in &peers { + if peer.info.addr == *ip { + debug!("Found predefined dandelion peer, setting as relay"); + self.set_dandelion_relay(peer); + return; + } + } + debug!("Could not find predefined dandelion peer among connected peers, choosing random") } + None => {} + } + match thread_rng().choose(&peers) { + Some(peer) => self.set_dandelion_relay(peer), None => debug!("Could not update dandelion relay"), }; } + fn set_dandelion_relay(&self, peer: &Arc) { + // Clear the map and add new relay + let dandelion_relay = &self.dandelion_relay; + dandelion_relay.write().clear(); + dandelion_relay + .write() + .insert(Utc::now().timestamp(), peer.clone()); + debug!( + "Successfully updated Dandelion relay to: {}", + peer.info.addr + ); + } + // Get the dandelion relay pub fn get_dandelion_relay(&self) -> HashMap> { self.dandelion_relay.read().clone() diff --git a/p2p/src/types.rs b/p2p/src/types.rs index c9cbc269..98c14678 100644 --- a/p2p/src/types.rs +++ b/p2p/src/types.rs @@ -124,6 +124,8 @@ pub struct P2PConfig { pub peer_max_count: Option, pub peer_min_preferred_count: Option, + + pub dandelion_peer: Option, } /// Default address for peer-to-peer connections. @@ -142,6 +144,7 @@ impl Default for P2PConfig { ban_window: None, peer_max_count: None, peer_min_preferred_count: None, + dandelion_peer: None } } } From a5e5ae83b69d4fb954876960c35f9a3ae9cee229 Mon Sep 17 00:00:00 2001 From: Yoni Date: Mon, 31 Dec 2018 20:00:33 +0200 Subject: [PATCH 2/3] typo + styling --- config/src/comments.rs | 2 +- p2p/src/types.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/src/comments.rs b/config/src/comments.rs index 7eaad916..f8b49aff 100644 --- a/config/src/comments.rs +++ b/config/src/comments.rs @@ -231,7 +231,7 @@ fn comments() -> HashMap { # 15 = Bit flags for FULL_NODE #This structure needs to be changed internally, to make it more configurable -# A prefered dandelion_peer, mainly used for testing dandelion +# A preferred dandelion_peer, mainly used for testing dandelion # dandelion_peer = \"10.0.0.1:13144\" " diff --git a/p2p/src/types.rs b/p2p/src/types.rs index 98c14678..36a674bd 100644 --- a/p2p/src/types.rs +++ b/p2p/src/types.rs @@ -144,7 +144,7 @@ impl Default for P2PConfig { ban_window: None, peer_max_count: None, peer_min_preferred_count: None, - dandelion_peer: None + dandelion_peer: None, } } } From 972cea5fe9c16d2d65276e4722fbc97e5042c654 Mon Sep 17 00:00:00 2001 From: Yoni Date: Mon, 31 Dec 2018 22:48:24 +0200 Subject: [PATCH 3/3] more idiomatic way of picking the peer --- p2p/src/peers.rs | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/p2p/src/peers.rs b/p2p/src/peers.rs index 8e0817d4..271fa566 100644 --- a/p2p/src/peers.rs +++ b/p2p/src/peers.rs @@ -83,23 +83,17 @@ impl Peers { // Update the dandelion relay pub fn update_dandelion_relay(&self) { let peers = self.outgoing_connected_peers(); - match &self.config.dandelion_peer { - Some(ip) => { - for peer in &peers { - if peer.info.addr == *ip { - debug!("Found predefined dandelion peer, setting as relay"); - self.set_dandelion_relay(peer); - return; - } - } - debug!("Could not find predefined dandelion peer among connected peers, choosing random") - } - None => {} - } - match thread_rng().choose(&peers) { + + let peer = &self + .config + .dandelion_peer + .and_then(|ip| peers.iter().find(|x| x.info.addr == ip)) + .or(thread_rng().choose(&peers)); + + match peer { Some(peer) => self.set_dandelion_relay(peer), None => debug!("Could not update dandelion relay"), - }; + } } fn set_dandelion_relay(&self, peer: &Arc) {