diff --git a/doc/dhtnode.1 b/doc/dhtnode.1 index 368ba94dce68ec093cfea5666a3a823946c698a0..2aca2c673edac16f811b3c166677d28d1f48aeff 100644 --- a/doc/dhtnode.1 +++ b/doc/dhtnode.1 @@ -1,4 +1,4 @@ -.TH DHTNODE 1 2016-06-27 +.TH DHTNODE 1 2016-07-29 .SH NAME .B dhtnode @@ -7,7 +7,7 @@ .SH SYNOPSIS .B dhtnode [-h] -.B dhtnode [-v[\fIlogfile\fP]] [-i] [-d] [-n \fInetwork_id\fP] [-p \fIlocal_port\fP] [-b[\fIbootstrap_host\fP[:\fIport\fP]]] +.B dhtnode [-v [-l \fIlogfile\fP]] [-i] [-d] [-n \fInetwork_id\fP] [-p \fIlocal_port\fP] [-b \fIbootstrap_host\fP[:\fIport\fP]] .SH DESCRIPTION diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index cbaed12318ae81831033caf7dc310a35d3d7b02d..656ed30506b017d90c3b1ca851bcfe5745c0b3b0 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -29,7 +29,7 @@ extern "C" { using namespace dht; void print_usage() { - std::cout << "Usage: dhtnode [-v[logfile]] [-i] [-d] [-n network_id] [-p local_port] [-b[bootstrap_host[:port]]]" << std::endl << std::endl; + std::cout << "Usage: dhtnode [-v [-l logfile]] [-i] [-d] [-n network_id] [-p local_port] [-b bootstrap_host[:port]]" << std::endl << std::endl; std::cout << "dhtnode, a simple OpenDHT command line node runner." << std::endl; std::cout << "Report bugs to: http://opendht.net" << std::endl; } @@ -40,8 +40,6 @@ void print_id_req() { void print_node_info(const DhtRunner& dht, const dht_params& params) { std::cout << "OpenDht node " << dht.getNodeId() << " running on port " << dht.getBoundPort() << std::endl; - if (params.is_bootstrap_node) - std::cout << "Running in bootstrap mode (discouraged)." << std::endl; if (params.generate_identity) std::cout << "Public key ID " << dht.getId() << std::endl; } diff --git a/tools/tools_common.h b/tools/tools_common.h index 07418b4edb96b31236ff54aa59ed8007ded140e9..45f6b8273e0fbc71973894f3d6b58dcf1e0f2ff7 100644 --- a/tools/tools_common.h +++ b/tools/tools_common.h @@ -143,57 +143,55 @@ struct dht_params { std::string logfile {}; in_port_t port {0}; dht::NetId network {0}; - bool is_bootstrap_node {false}; bool generate_identity {false}; bool daemonize {false}; std::pair<std::string, std::string> bootstrap {}; }; static const constexpr struct option long_options[] = { - {"help", no_argument, nullptr, 'h'}, + {"help", no_argument , nullptr, 'h'}, {"port", required_argument, nullptr, 'p'}, {"net", required_argument, nullptr, 'n'}, - {"bootstrap", optional_argument, nullptr, 'b'}, + {"bootstrap", required_argument, nullptr, 'b'}, {"identity", no_argument , nullptr, 'i'}, - {"verbose", optional_argument, nullptr, 'v'}, + {"verbose", no_argument , nullptr, 'v'}, {"daemonize", no_argument , nullptr, 'd'}, - {nullptr, 0, nullptr, 0} + {"logfile", required_argument, nullptr, 'l'}, + {nullptr, 0 , nullptr, 0} }; dht_params parseArgs(int argc, char **argv) { dht_params params; int opt; - while ((opt = getopt_long(argc, argv, "hidv::p:n:b::", long_options, nullptr)) != -1) { + while ((opt = getopt_long(argc, argv, "hidvp:n:b:l:", long_options, nullptr)) != -1) { switch (opt) { case 'p': { int port_arg = atoi(optarg); if (port_arg >= 0 && port_arg < 0x10000) params.port = port_arg; else - std::cerr << "Invalid port: " << port_arg << std::endl; + std::cout << "Invalid port: " << port_arg << std::endl; } break; case 'n': params.network = strtoul(optarg, nullptr, 0); break; case 'b': - if (optarg) { - params.bootstrap = splitPort((optarg[0] == '=') ? optarg+1 : optarg); - if (not params.bootstrap.first.empty() and params.bootstrap.second.empty()) { - std::stringstream ss; - ss << DHT_DEFAULT_PORT; - params.bootstrap.second = ss.str(); - } - } else - params.is_bootstrap_node = true; + params.bootstrap = splitPort((optarg[0] == '=') ? optarg+1 : optarg); + if (not params.bootstrap.first.empty() and params.bootstrap.second.empty()) { + std::stringstream ss; + ss << DHT_DEFAULT_PORT; + params.bootstrap.second = ss.str(); + } break; case 'h': params.help = true; break; + case 'l': + params.logfile = optarg; + break; case 'v': - if (optarg) - params.logfile = optarg; params.log = true; break; case 'i': @@ -202,9 +200,6 @@ parseArgs(int argc, char **argv) { case 'd': params.daemonize = true; break; - case '?': - std::cerr << "unrecognized option -- '" << static_cast<char>(optopt) << '\'' << std::endl; - exit(EXIT_FAILURE); default: break; }