Просмотр исходного кода

more clean style for config file and args for taud and ircd net options

ghassmo 4 лет назад
Родитель
Сommit
e92efdcf0c

+ 1 - 0
Cargo.lock

@@ -1149,6 +1149,7 @@ dependencies = [
  "socket2",
  "sqlx",
  "structopt",
+ "structopt-toml",
  "subtle",
  "termion",
  "thiserror",

+ 2 - 0
Cargo.toml

@@ -76,6 +76,7 @@ num-bigint = {version = "0.4.3", features = ["serde"], optional = true}
 serde_json = {version = "1.0.79", optional = true}
 serde = {version = "1.0.136", features = ["derive"], optional = true}
 structopt = {version= "0.3.26", optional = true}
+structopt-toml = {version= "0.5.0", optional = true}
 
 # Utilities
 url = {version = "2.2.2", features = ["serde"], optional = true}
@@ -210,6 +211,7 @@ net = [
 	"regex",
 	"rustls-pemfile",
 	"structopt",
+	"structopt-toml",
 
 	"util",
 	"system",

+ 33 - 20
bin/ircd2/ircd_config.toml

@@ -1,20 +1,33 @@
-# JSON-RPC listen URL
-rpc_listen="127.0.0.1:8857"
-# IRC listen URL
-irc_listen="127.0.0.1:8855"
-# Sets Datastore Path
-datastore="~/.config/tau"
-
-# Raft net settings
-type="Net"
-[args]
-inbound="127.0.0.1:11002"
-outbound_connections=0
-manual_attempt_limit=0
-seed_query_timeout_seconds=8
-connect_timeout_seconds=10
-channel_handshake_seconds=4
-channel_heartbeat_seconds=10
-external_addr="127.0.0.1:11002"
-peers=["127.0.0.1:11003"]
-seeds=["127.0.0.1:11001"]
+## JSON-RPC listen URL
+#rpc_listen="127.0.0.1:8857"
+
+## IRC listen URL
+#irc_listen="127.0.0.1:8855"
+
+## Sets Datastore Path
+#datastore="~/.config/ircd"
+
+## Raft net settings
+[net]
+## P2P accept address
+#inbound="127.0.0.1:11002" 
+
+## Connection slots
+#outbound_connections=0 
+
+## P2P external address
+#external_addr="127.0.0.1:11002"
+
+## Peers to connect to
+#peers=["127.0.0.1:11003"]
+
+## Seed nodes to connect to 
+#seeds=["127.0.0.1:11001"]
+
+## these are the default configuration for the p2p network
+#manual_attempt_limit=0
+#seed_query_timeout_seconds=8
+#connect_timeout_seconds=10
+#channel_handshake_seconds=4
+#channel_heartbeat_seconds=10
+

+ 3 - 6
bin/ircd2/src/main.rs

@@ -30,7 +30,7 @@ use crate::{
     privmsg::Privmsg,
     rpc::JsonRpcInterface,
     server::IrcServerConnection,
-    settings::{Args, Command, CONFIG_FILE, CONFIG_FILE_CONTENTS},
+    settings::{Args, CONFIG_FILE, CONFIG_FILE_CONTENTS},
 };
 
 async fn process_user_input(
@@ -105,10 +105,7 @@ async fn realmain(settings: Args, executor: Arc<Executor<'_>>) -> Result<()> {
 
     let datastore_path = PathBuf::from(&settings.datastore);
 
-    let net_settings = match settings.command {
-        Command::Net(s) => s,
-    };
-
+    let net_settings = settings.net;
     //
     //Raft
     //
@@ -168,7 +165,7 @@ async fn realmain(settings: Args, executor: Arc<Executor<'_>>) -> Result<()> {
     .unwrap();
 
     // blocking
-    raft.start(net_settings, executor.clone(), shutdown.clone()).await?;
+    raft.start(net_settings.into(), executor.clone(), shutdown.clone()).await?;
 
     Ok(())
 }

+ 6 - 13
bin/ircd2/src/settings.rs

@@ -4,7 +4,7 @@ use serde::Deserialize;
 use structopt::StructOpt;
 use structopt_toml::StructOptToml;
 
-use darkfi::net;
+use darkfi::net::settings::SettingsOpt;
 
 pub const CONFIG_FILE: &str = "ircd_config.toml";
 pub const CONFIG_FILE_CONTENTS: &str = include_str!("../ircd_config.toml");
@@ -18,24 +18,17 @@ pub struct Args {
     #[structopt(long)]
     pub config: Option<String>,
     /// JSON-RPC listen URL
-    #[structopt(long, default_value = "127.0.0.1:8857")]
+    #[structopt(long = "rpc", default_value = "127.0.0.1:8857")]
     pub rpc_listen: SocketAddr,
     /// IRC listen URL
-    #[structopt(long, default_value = "127.0.0.1:8855")]
+    #[structopt(long = "irc", default_value = "127.0.0.1:8855")]
     pub irc_listen: SocketAddr,
     /// Sets Datastore Path
-    #[structopt(long, default_value = "~/.config/tau")]
+    #[structopt(long, default_value = "~/.config/ircd")]
     pub datastore: String,
-    #[structopt(subcommand)]
-    pub command: Command,
+    #[structopt(flatten)]
+    pub net: SettingsOpt,
     /// Increase verbosity
     #[structopt(short, parse(from_occurrences))]
     pub verbose: u8,
 }
-
-#[derive(Clone, Debug, Deserialize, StructOpt)]
-#[serde(tag = "type", content = "args")]
-pub enum Command {
-    /// Raft net settings
-    Net(net::Settings),
-}

+ 3 - 10
bin/tau/taud/src/main.rs

@@ -32,7 +32,7 @@ use crate::{
     error::TaudResult,
     jsonrpc::JsonRpcInterface,
     month_tasks::MonthTasks,
-    settings::{Args, Command, CONFIG_FILE, CONFIG_FILE_CONTENTS},
+    settings::{Args, CONFIG_FILE, CONFIG_FILE_CONTENTS},
     task_info::TaskInfo,
 };
 
@@ -63,14 +63,7 @@ async fn realmain(settings: Args, executor: Arc<Executor<'_>>) -> Result<()> {
     let rpc_listener_taks =
         executor_cloned.spawn(listen_and_serve(server_config, rpc_interface, executor.clone()));
 
-    let net_settings = match settings.command {
-        Some(Command::Net(s)) => s,
-        None => {
-            warn!("run without connecting to raft and p2p network");
-            rpc_listener_taks.await?;
-            return Ok(())
-        }
-    };
+    let net_settings = settings.net; 
 
     //
     //Raft
@@ -124,7 +117,7 @@ async fn realmain(settings: Args, executor: Arc<Executor<'_>>) -> Result<()> {
     .unwrap();
 
     // blocking
-    raft.start(net_settings, executor.clone(), shutdown.clone()).await?;
+    raft.start(net_settings.into(), executor.clone(), shutdown.clone()).await?;
 
     Ok(())
 }

+ 5 - 11
bin/tau/taud/src/settings.rs

@@ -1,10 +1,11 @@
 use std::net::SocketAddr;
 
-use darkfi::net;
 use serde::Deserialize;
 use structopt::StructOpt;
 use structopt_toml::StructOptToml;
 
+use darkfi::net::settings::SettingsOpt;
+
 pub const CONFIG_FILE: &str = "taud_config.toml";
 pub const CONFIG_FILE_CONTENTS: &str = include_str!("../../taud_config.toml");
 
@@ -17,22 +18,15 @@ pub struct Args {
     #[structopt(long)]
     pub config: Option<String>,
     /// JSON-RPC listen URL
-    #[structopt(long, default_value = "127.0.0.1:8857")]
+    #[structopt(long = "rpc", default_value = "127.0.0.1:8857")]
     pub rpc_listen: SocketAddr,
     /// Sets Datastore Path
     #[structopt(long, default_value = "~/.config/tau")]
     pub datastore: String,
-    #[structopt(subcommand)]
-    pub command: Option<Command>,
+    #[structopt(flatten)]
+    pub net: SettingsOpt,
     /// Increase verbosity
     #[structopt(short, parse(from_occurrences))]
     pub verbose: u8,
 }
 
-#[derive(Clone, Debug, Deserialize, StructOpt)]
-#[serde(tag = "type", content = "args")]
-pub enum Command {
-    /// Raft net settings
-    /// Note: Wihtout passing this flag, tau will work locally  
-    Net(net::Settings),
-}

+ 28 - 17
bin/tau/taud_config.toml

@@ -1,18 +1,29 @@
-# JSON-RPC listen URL
-rpc_listen="127.0.0.1:8857"
-# Sets Datastore Path
-datastore="~/.config/tau"
+## JSON-RPC listen URL
+#rpc_listen="127.0.0.1:8857"
 
-# Raft net settings
-type="Net"
-[args]
-inbound="127.0.0.1:11002"
-outbound_connections=0
-manual_attempt_limit=0
-seed_query_timeout_seconds=8
-connect_timeout_seconds=10
-channel_handshake_seconds=4
-channel_heartbeat_seconds=10
-external_addr="127.0.0.1:11002"
-peers=["127.0.0.1:11003"]
-seeds=["127.0.0.1:11001"]
+## Sets Datastore Path
+#datastore="~/.config/tau"
+
+## Raft net settings
+[net]
+## P2P accept address
+#inbound="127.0.0.1:11002" 
+
+## Connection slots
+#outbound_connections=0 
+
+## P2P external address
+#external_addr="127.0.0.1:11002"
+
+## Peers to connect to
+#peers=["127.0.0.1:11003"]
+
+## Seed nodes to connect to 
+#seeds=["127.0.0.1:11001"]
+
+## these are the default configuration for the p2p network
+#manual_attempt_limit=0
+#seed_query_timeout_seconds=8
+#connect_timeout_seconds=10
+#channel_handshake_seconds=4
+#channel_heartbeat_seconds=10

+ 56 - 12
src/net/settings.rs

@@ -2,33 +2,23 @@ use std::{net::SocketAddr, sync::Arc};
 
 use serde::Deserialize;
 use structopt::StructOpt;
+use structopt_toml::StructOptToml;
 
 /// Atomic pointer to network settings.
 pub type SettingsPtr = Arc<Settings>;
 
 /// Defines the network settings.
-#[derive(Clone, Debug, Deserialize, StructOpt)]
-#[structopt()]
+#[derive(Clone, Debug)]
 pub struct Settings {
-    #[structopt(short, long)]
     pub inbound: Option<SocketAddr>,
-    #[structopt(long, default_value = "0")]
     pub outbound_connections: u32,
-    #[structopt(long, default_value = "0")]
     pub manual_attempt_limit: u32,
-    #[structopt(long, default_value = "8")]
     pub seed_query_timeout_seconds: u32,
-    #[structopt(long, default_value = "10")]
     pub connect_timeout_seconds: u32,
-    #[structopt(long, default_value = "4")]
     pub channel_handshake_seconds: u32,
-    #[structopt(long, default_value = "10")]
     pub channel_heartbeat_seconds: u32,
-    #[structopt(short, long)]
     pub external_addr: Option<SocketAddr>,
-    #[structopt(short, long)]
     pub peers: Vec<SocketAddr>,
-    #[structopt(short, long)]
     pub seeds: Vec<SocketAddr>,
 }
 
@@ -48,3 +38,57 @@ impl Default for Settings {
         }
     }
 }
+
+/// Defines the network settings.
+#[derive(Clone, Debug, Deserialize, StructOpt, StructOptToml)]
+#[serde(default)]
+#[structopt()]
+pub struct SettingsOpt {
+    /// P2P accept address
+    #[structopt(long = "accept")]
+    pub inbound: Option<SocketAddr>,     
+
+    /// Connection slots
+    #[structopt(long = "slots", default_value = "0")]
+    pub outbound_connections: u32,
+
+    /// P2P external address
+    #[structopt(long)]
+    pub external_addr: Option<SocketAddr>,
+
+    /// Peer nodes to connect to 
+    #[structopt(long)]
+    pub peers: Vec<SocketAddr>,
+
+    /// Seed nodes to connect to 
+    #[structopt(long)]
+    pub seeds: Vec<SocketAddr>,
+
+    #[structopt(skip = 0 as u32)]
+    pub manual_attempt_limit: u32,
+    #[structopt(skip = 8 as u32)]
+    pub seed_query_timeout_seconds: u32,
+    #[structopt(skip = 10 as u32)]
+    pub connect_timeout_seconds: u32,
+    #[structopt(skip = 4 as u32)]
+    pub channel_handshake_seconds: u32,
+    #[structopt(skip = 10 as u32)]
+    pub channel_heartbeat_seconds: u32,
+}
+
+impl Into<Settings> for SettingsOpt {
+    fn into(self) -> Settings {
+        Settings {
+            inbound: self.inbound,
+            outbound_connections: self.outbound_connections,
+            manual_attempt_limit: self.manual_attempt_limit,
+            seed_query_timeout_seconds: self.seed_query_timeout_seconds,
+            connect_timeout_seconds: self.connect_timeout_seconds,
+            channel_handshake_seconds: self.channel_handshake_seconds,
+            channel_heartbeat_seconds: self.channel_heartbeat_seconds,
+            external_addr: self.external_addr,
+            peers: self.peers,
+            seeds: self.seeds,
+        }
+    }
+}