From cb0005d0eb98796adceae0973f434ccdd4ec479b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 8 Nov 2019 16:12:04 -0500 Subject: [PATCH] tools: factor configuration parsing --- tools/dhtchat.cpp | 37 ++----------------------------------- tools/dhtnode.cpp | 41 ++++------------------------------------- tools/dhtscanner.cpp | 12 ++---------- tools/tools_common.h | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 82 deletions(-) diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp index 5c7e72c1..a07548e8 100644 --- a/tools/dhtchat.cpp +++ b/tools/dhtchat.cpp @@ -62,41 +62,8 @@ main(int argc, char **argv) DhtRunner dht; try { - if (not params.id.first) { - auto node_ca = std::make_unique<dht::crypto::Identity>(dht::crypto::generateEcIdentity("DHT Node CA")); - params.id = dht::crypto::generateIdentity("DHT Chat Node", *node_ca); - if (not params.save_identity.empty()) { - dht::crypto::saveIdentity(*node_ca, params.save_identity + "_ca", params.privkey_pwd); - dht::crypto::saveIdentity(params.id, params.save_identity, params.privkey_pwd); - } - } - - dht::DhtRunner::Config config {}; - config.dht_config.node_config.network = params.network; - config.dht_config.node_config.maintain_storage = false; - config.dht_config.node_config.persist_path = params.persist_path; - config.dht_config.id = params.id; - config.threaded = true; - config.proxy_server = params.proxyclient; - config.push_node_id = "dhtnode"; - config.push_token = params.devicekey; - config.peer_discovery = params.peer_discovery; - config.peer_publish = params.peer_discovery; - if (params.no_rate_limit) { - config.dht_config.node_config.max_req_per_sec = -1; - config.dht_config.node_config.max_peer_req_per_sec = -1; - } - - dht::DhtRunner::Context context {}; - if (params.log) { - if (params.syslog or (params.daemonize and params.logfile.empty())) - context.logger = log::getSyslogLogger("dhtnode"); - else if (not params.logfile.empty()) - context.logger = log::getFileLogger(params.logfile); - else - context.logger = log::getStdLogger(); - } - dht.run(params.port, config, std::move(context)); + auto dhtConf = getDhtConfig(params); + dht.run(params.port, dhtConf.first, std::move(dhtConf.second)); if (not params.bootstrap.first.empty()) dht.bootstrap(params.bootstrap.first.c_str(), params.bootstrap.second.c_str()); diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index 31eca901..85a6a037 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -532,41 +532,8 @@ main(int argc, char **argv) auto node = std::make_shared<DhtRunner>(); try { - if (not params.id.first and params.generate_identity) { - auto node_ca = std::make_unique<dht::crypto::Identity>(dht::crypto::generateEcIdentity("DHT Node CA")); - params.id = dht::crypto::generateIdentity("DHT Node", *node_ca); - if (not params.save_identity.empty()) { - dht::crypto::saveIdentity(*node_ca, params.save_identity + "_ca", params.privkey_pwd); - dht::crypto::saveIdentity(params.id, params.save_identity, params.privkey_pwd); - } - } - - dht::DhtRunner::Config config {}; - config.dht_config.node_config.network = params.network; - config.dht_config.node_config.maintain_storage = false; - config.dht_config.node_config.persist_path = params.persist_path; - config.dht_config.id = params.id; - config.threaded = true; - config.proxy_server = params.proxyclient; - config.push_node_id = "dhtnode"; - config.push_token = params.devicekey; - config.peer_discovery = params.peer_discovery; - config.peer_publish = params.peer_discovery; - if (params.no_rate_limit) { - config.dht_config.node_config.max_req_per_sec = -1; - config.dht_config.node_config.max_peer_req_per_sec = -1; - } - - dht::DhtRunner::Context context {}; - if (params.log) { - if (params.syslog or (params.daemonize and params.logfile.empty())) - context.logger = log::getSyslogLogger("dhtnode"); - else if (not params.logfile.empty()) - context.logger = log::getFileLogger(params.logfile); - else - context.logger = log::getStdLogger(); - } - node->run(params.port, config, std::move(context)); + auto dhtConf = getDhtConfig(params); + node->run(params.port, dhtConf.first, std::move(dhtConf.second)); if (not params.bootstrap.first.empty()) { std::cout << "Bootstrap: " << params.bootstrap.first << ":" << params.bootstrap.second << std::endl; @@ -580,13 +547,13 @@ main(int argc, char **argv) #ifdef OPENDHT_PROXY_SERVER proxies.emplace(params.proxyserverssl, std::unique_ptr<DhtProxyServer>( new DhtProxyServer(params.proxy_id, - node, params.proxyserverssl, params.pushserver, context.logger))); + node, params.proxyserverssl, params.pushserver, dhtConf.second.logger))); } if (params.proxyserver) { proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>( new DhtProxyServer( dht::crypto::Identity{}, - node, params.proxyserver, params.pushserver, context.logger))); + node, params.proxyserver, params.pushserver, dhtConf.second.logger))); #else std::cerr << "DHT proxy server requested but OpenDHT built without proxy server support." << std::endl; exit(EXIT_FAILURE); diff --git a/tools/dhtscanner.cpp b/tools/dhtscanner.cpp index 93337f85..befca481 100644 --- a/tools/dhtscanner.cpp +++ b/tools/dhtscanner.cpp @@ -85,16 +85,8 @@ main(int argc, char **argv) DhtRunner dht; try { - dht.run(params.port, {}, true, params.network); - - if (params.log) { - if (params.syslog) - log::enableSyslog(dht, "dhtnode"); - else if (not params.logfile.empty()) - log::enableFileLogging(dht, params.logfile); - else - log::enableLogging(dht); - } + auto dhtConf = getDhtConfig(params); + dht.run(params.port, dhtConf.first, std::move(dhtConf.second)); if (not params.bootstrap.first.empty()) dht.bootstrap(params.bootstrap.first.c_str(), params.bootstrap.second.c_str()); diff --git a/tools/tools_common.h b/tools/tools_common.h index f368afda..ac3aad7f 100644 --- a/tools/tools_common.h +++ b/tools/tools_common.h @@ -134,6 +134,46 @@ struct dht_params { bool no_rate_limit {false}; }; +std::pair<dht::DhtRunner::Config, dht::DhtRunner::Context> +getDhtConfig(dht_params& params) +{ + if (not params.id.first and params.generate_identity) { + auto node_ca = std::make_unique<dht::crypto::Identity>(dht::crypto::generateEcIdentity("DHT Node CA")); + params.id = dht::crypto::generateIdentity("DHT Node", *node_ca); + if (not params.save_identity.empty()) { + dht::crypto::saveIdentity(*node_ca, params.save_identity + "_ca", params.privkey_pwd); + dht::crypto::saveIdentity(params.id, params.save_identity, params.privkey_pwd); + } + } + + dht::DhtRunner::Config config {}; + config.dht_config.node_config.network = params.network; + config.dht_config.node_config.maintain_storage = false; + config.dht_config.node_config.persist_path = params.persist_path; + config.dht_config.id = params.id; + config.threaded = true; + config.proxy_server = params.proxyclient; + config.push_node_id = "dhtnode"; + config.push_token = params.devicekey; + config.peer_discovery = params.peer_discovery; + config.peer_publish = params.peer_discovery; + if (params.no_rate_limit) { + config.dht_config.node_config.max_req_per_sec = -1; + config.dht_config.node_config.max_peer_req_per_sec = -1; + } + + dht::DhtRunner::Context context {}; + if (params.log) { + if (params.syslog or (params.daemonize and params.logfile.empty())) + context.logger = dht::log::getSyslogLogger("dhtnode"); + else if (not params.logfile.empty()) + context.logger = dht::log::getFileLogger(params.logfile); + else + context.logger = dht::log::getStdLogger(); + } + return {std::move(config), std::move(context)}; +} + static const constexpr struct option long_options[] = { {"help", no_argument , nullptr, 'h'}, {"port", required_argument, nullptr, 'p'}, -- GitLab