From 63cf340ab496d6b90912af0451fab4ed85ecff19 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Wed, 16 Oct 2019 15:16:29 -0700 Subject: [PATCH] Add fields to zebra-network Config. --- zebra-network/src/config.rs | 18 ++++++++++++++++++ zebra-network/src/network.rs | 2 +- zebra-network/src/peer/connector.rs | 13 +++---------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/zebra-network/src/config.rs b/zebra-network/src/config.rs index c7fb0002..e2fc0854 100644 --- a/zebra-network/src/config.rs +++ b/zebra-network/src/config.rs @@ -1,15 +1,33 @@ +use std::{net::SocketAddr, time::Duration}; + +use crate::network::Network; + /// Configuration for networking code. #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(deny_unknown_fields)] pub struct Config { + /// The network to connect to. + pub network: Network, /// The user-agent to advertise. pub user_agent: String, + /// A list of initial peers for the peerset. + /// + /// XXX this should be replaced with DNS names, not SocketAddrs + pub initial_peers: Vec, + /// The default RTT estimate for peer responses, used in load-balancing. + pub ewma_default_rtt: Duration, + /// The decay time for the exponentially-weighted moving average response time. + pub ewma_decay_time: Duration, } impl Default for Config { fn default() -> Config { Config { user_agent: crate::constants::USER_AGENT.to_owned(), + network: Network::Mainnet, + initial_peers: Vec::new(), + ewma_default_rtt: Duration::from_secs(1), + ewma_decay_time: Duration::from_secs(60), } } } diff --git a/zebra-network/src/network.rs b/zebra-network/src/network.rs index 81d9ffe6..febbb1f2 100644 --- a/zebra-network/src/network.rs +++ b/zebra-network/src/network.rs @@ -1,7 +1,7 @@ use crate::{constants::magics, protocol::types::Magic}; /// An enum describing the possible network choices. -#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] +#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] pub enum Network { /// The production mainnet. Mainnet, diff --git a/zebra-network/src/peer/connector.rs b/zebra-network/src/peer/connector.rs index b736a09d..66682e6e 100644 --- a/zebra-network/src/peer/connector.rs +++ b/zebra-network/src/peer/connector.rs @@ -27,7 +27,6 @@ use super::{error::ErrorSlot, server::ServerState, HandshakeError, PeerClient, P /// A [`Service`] that connects to a remote peer and constructs a client/server pair. pub struct PeerConnector { config: Config, - network: Network, internal_service: S, sender: mpsc::Sender, nonces: Arc>>, @@ -39,12 +38,7 @@ where S::Future: Send, { /// Construct a new `PeerConnector`. - pub fn new( - config: Config, - network: Network, - internal_service: S, - collector: &TimestampCollector, - ) -> Self { + pub fn new(config: Config, internal_service: S, collector: &TimestampCollector) -> Self { // XXX this function has too many parameters, but it's not clear how to // do a nice builder as all fields are mandatory. Could have Builder1, // Builder2, ..., with Builder1::with_config() -> Builder2; @@ -53,7 +47,6 @@ where let sender = collector.sender_handle(); PeerConnector { config, - network, internal_service, sender, nonces: Arc::new(Mutex::new(HashSet::new())), @@ -82,11 +75,11 @@ where let connection_span = span!(Level::INFO, "peer", addr = ?addr); // Clone these upfront, so they can be moved into the future. - let network = self.network.clone(); + let nonces = self.nonces.clone(); let internal_service = self.internal_service.clone(); let sender = self.sender.clone(); let user_agent = self.config.user_agent.clone(); - let nonces = self.nonces.clone(); + let network = self.config.network.clone(); let fut = async move { info!("connecting to remote peer");