Bitcoin ABC 0.31.6
P2P Digital Currency
options.cpp
Go to the documentation of this file.
1// Copyright (c) 2022 The Bitcoin developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <seeder/options.h>
6
7#include <chainparams.h>
8#include <chainparamsbase.h>
9#include <clientversion.h>
10#include <common/args.h>
11
12#include <string>
13
14namespace seeder {
15
16int CDnsSeedOpts::ParseCommandLine(int argc, const char **argv) {
18
19 std::string error;
20 if (!argsManager->ParseParameters(argc, argv, error)) {
21 tfm::format(std::cerr, "Error parsing command line arguments: %s\n",
22 error);
23 return EXIT_FAILURE;
24 }
25 if (HelpRequested(*argsManager) || argsManager->IsArgSet("-version")) {
26 std::string strUsage =
27 PACKAGE_NAME " Seeder " + FormatFullVersion() + "\n";
29 strUsage +=
30 "\nUsage: bitcoin-seeder -host=<host> -ns=<ns> "
31 "[-mbox=<mbox>] [-threads=<threads>] [-port=<port>]\n\n" +
33 }
34
35 tfm::format(std::cout, "%s", strUsage);
36 return EXIT_SUCCESS;
37 }
38
39 dumpInterval = std::chrono::seconds(
41 if (dumpInterval.count() <= 0) {
43 std::cerr,
44 "Error: -dumpinterval argument expects only positive integers\n");
45 return EXIT_FAILURE;
46 }
47
49 if (nThreads <= 0) {
51 std::cerr,
52 "Error: -threads argument expects only positive integers\n");
53 return EXIT_FAILURE;
54 }
55
57 if (nPort < 0 || nPort > 65535) {
58 tfm::format(std::cerr, "Error: -port argument expects only positive "
59 "integers in the range 0 - 65535\n");
60 return EXIT_FAILURE;
61 }
62
65 if (nDnsThreads <= 0) {
67 std::cerr,
68 "Error: -dnsthreads argument expects only positive integers\n");
69 return EXIT_FAILURE;
70 }
71
82
83 // Both IPv4 and IPv6 addresses are valid, but the listening address is
84 // treated as IPv6 internally
85 if (ip_addr.find(':') == std::string::npos) {
86 ip_addr.insert(0, "::FFFF:");
87 }
88
89 if (argsManager->IsArgSet("-filter")) {
90 // Parse whitelist additions
91 std::string flagString = argsManager->GetArg("-filter", "");
92 size_t flagstartpos = 0;
93 while (flagstartpos < flagString.size()) {
94 size_t flagendpos = flagString.find_first_of(',', flagstartpos);
95 uint64_t flag = atoi64(
96 flagString.substr(flagstartpos, (flagendpos - flagstartpos)));
97 filter_whitelist.insert(flag);
98 if (flagendpos == std::string::npos) {
99 break;
100 }
101 flagstartpos = flagendpos + 1;
102 }
103 }
104 if (filter_whitelist.empty()) {
109 }
110 return CONTINUE_EXECUTION;
111}
112
117 "-help-debug", "Show all debugging options (usage: --help -help-debug)",
119
121
122 argsManager->AddArg("-version", "Print version and exit",
124 argsManager->AddArg("-host=<host>", "Hostname of the DNS seed",
126 argsManager->AddArg("-ns=<ns>", "Hostname of the nameserver",
128 argsManager->AddArg("-mbox=<mbox>",
129 "E-Mail address reported in SOA records",
132 "-dumpinterval=<seconds>",
133 strprintf("Number of seconds between each database dump (default: %d)",
137 "-threads=<threads>",
138 strprintf("Number of crawlers to run in parallel (default: %d)",
141 argsManager->AddArg("-dnsthreads=<threads>",
142 strprintf("Number of DNS server threads (default: %d)",
145 argsManager->AddArg("-address=<address>",
146 strprintf("Address to listen on (default: '%s')",
150 "-port=<port>",
151 strprintf("UDP port to listen on (default: %d)", DEFAULT_PORT),
153 argsManager->AddArg("-onion=<ip:port>", "Tor proxy IP/Port",
155 argsManager->AddArg("-overridednsseed",
156 "If set, only use the specified DNS seed when "
157 "querying for peer addresses via DNS lookup->",
159 argsManager->AddArg("-proxyipv4=<ip:port>", "IPV4 SOCKS5 proxy IP/Port",
161 argsManager->AddArg("-proxyipv6=<ip:port>", "IPV6 SOCKS5 proxy IP/Port",
163 argsManager->AddArg("-filter=<f1,f2,...>",
164 "Allow these flag combinations as filters",
166 argsManager->AddArg("-wipeban", "Wipe list of banned nodes",
168 argsManager->AddArg("-wipeignore", "Wipe list of ignored nodes",
170}
171
172} // namespace seeder
bool HelpRequested(const ArgsManager &args)
Definition: args.cpp:701
void SetupHelpOptions(ArgsManager &args)
Add help options to the args manager.
Definition: args.cpp:706
void SelectParams(const ChainType chain)
Sets the params returned by Params() to those for the given BIP70 chain name.
Definition: chainparams.cpp:50
void SetupChainParamsBaseOptions(ArgsManager &argsman)
Set the arguments for chainparams.
@ ALLOW_ANY
disable validation
Definition: args.h:114
ChainType GetChainType() const
Looks for -regtest, -testnet and returns the appropriate BIP70 chain name.
Definition: args.cpp:762
bool ParseParameters(int argc, const char *const argv[], std::string &error)
Definition: args.cpp:211
std::string GetHelpMessage() const
Get the help string.
Definition: args.cpp:622
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
Definition: args.cpp:372
int64_t GetIntArg(const std::string &strArg, int64_t nDefault) const
Return integer argument or default value.
Definition: args.cpp:495
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
Definition: args.cpp:463
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
Definition: args.cpp:525
void AddArg(const std::string &name, const std::string &help, unsigned int flags, const OptionsCategory &cat)
Add argument.
Definition: args.cpp:589
std::string ip_addr
Definition: options.h:45
std::chrono::seconds dumpInterval
Definition: options.h:35
std::string tor
Definition: options.h:44
std::string ipv4_proxy
Definition: options.h:46
std::string ns
Definition: options.h:42
int ParseCommandLine(int argc, const char **argv)
Definition: options.cpp:16
std::string host
Definition: options.h:43
std::string mbox
Definition: options.h:41
std::set< uint64_t > filter_whitelist
Definition: options.h:48
ArgsManager * argsManager
Definition: options.h:34
std::string ipv6_proxy
Definition: options.h:47
std::string FormatFullVersion()
bool error(const char *fmt, const Args &...args)
Definition: logging.h:296
static const bool DEFAULT_WIPE_BAN
Definition: options.h:22
static const int CONTINUE_EXECUTION
Definition: options.h:16
static const std::string DEFAULT_IPV4_PROXY
Definition: options.h:29
static const int DEFAULT_NUM_DNS_THREADS
Definition: options.h:21
static const std::string DEFAULT_IPV6_PROXY
Definition: options.h:30
static const int DEFAULT_DUMP_INTERVAL_SECONDS
Definition: options.h:18
static const std::string DEFAULT_HOST
Definition: options.h:26
static const std::string DEFAULT_LISTEN_ADDRESS
Definition: options.h:28
static const bool DEFAULT_WIPE_IGNORE
Definition: options.h:23
static const int DEFAULT_NUM_THREADS
Definition: options.h:19
static const std::string DEFAULT_EMAIL
Definition: options.h:24
static const std::string DEFAULT_TOR_PROXY
Definition: options.h:27
static const int DEFAULT_PORT
Definition: options.h:20
static const std::string DEFAULT_NAMESERVER
Definition: options.h:25
void format(std::ostream &out, const char *fmt, const Args &...args)
Format list of arguments to the stream according to given format string.
Definition: tinyformat.h:1112
@ NODE_NETWORK_LIMITED
Definition: protocol.h:366
@ NODE_BLOOM
Definition: protocol.h:353
@ NODE_NETWORK
Definition: protocol.h:343
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition: tinyformat.h:1202
int64_t atoi64(const std::string &str)
assert(!tx.IsCoinBase())