Skip to content

Commit 41987aa

Browse files
committed
Merge #9494: Introduce an ArgsManager class encapsulating cs_args, mapArgs and mapMultiArgs
78da882 Util: Small improvements in gArgs usage (Jorge Timón) 5292245 Util: Put mapMultiArgs inside ArgsManager (Jorge Timón) b3cbd55 scripted-diff: Util: Encapsulate mapMultiArgs behind gArgs (Jorge Timón) f2957ce Util: Create ArgsManager class... (Jorge Timón) Tree-SHA512: 7d58250da440ad0f41745f46ab6021d6ecbb292035cab3d86fb08ce6bd822df604ac31b3ded6fd6914f7cfd12ba531cbc06a76eb500f629627f47ae6ac8350a7
2 parents 87abe20 + 78da882 commit 41987aa

File tree

7 files changed

+165
-96
lines changed

7 files changed

+165
-96
lines changed

src/httprpc.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ static bool multiUserAuthorized(std::string strUserPass)
9393
std::string strUser = strUserPass.substr(0, strUserPass.find(":"));
9494
std::string strPass = strUserPass.substr(strUserPass.find(":") + 1);
9595

96-
if (mapMultiArgs.count("-rpcauth") > 0) {
96+
if (gArgs.IsArgSet("-rpcauth")) {
9797
//Search for multi-user login/pass "rpcauth" from config
98-
BOOST_FOREACH(std::string strRPCAuth, mapMultiArgs.at("-rpcauth"))
98+
BOOST_FOREACH(std::string strRPCAuth, gArgs.GetArgs("-rpcauth"))
9999
{
100100
std::vector<std::string> vFields;
101101
boost::split(vFields, strRPCAuth, boost::is_any_of(":$"));

src/httpserver.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,8 @@ static bool InitHTTPAllowList()
196196
LookupHost("::1", localv6, false);
197197
rpc_allow_subnets.push_back(CSubNet(localv4, 8)); // always allow IPv4 local subnet
198198
rpc_allow_subnets.push_back(CSubNet(localv6)); // always allow IPv6 localhost
199-
if (mapMultiArgs.count("-rpcallowip")) {
200-
const std::vector<std::string>& vAllow = mapMultiArgs.at("-rpcallowip");
201-
for (std::string strAllow : vAllow) {
199+
if (gArgs.IsArgSet("-rpcallowip")) {
200+
for (const std::string& strAllow : gArgs.GetArgs("-rpcallowip")) {
202201
CSubNet subnet;
203202
LookupSubNet(strAllow.c_str(), subnet);
204203
if (!subnet.IsValid()) {
@@ -321,12 +320,11 @@ static bool HTTPBindAddresses(struct evhttp* http)
321320
if (IsArgSet("-rpcbind")) {
322321
LogPrintf("WARNING: option -rpcbind was ignored because -rpcallowip was not specified, refusing to allow everyone to connect\n");
323322
}
324-
} else if (mapMultiArgs.count("-rpcbind")) { // Specific bind address
325-
const std::vector<std::string>& vbind = mapMultiArgs.at("-rpcbind");
326-
for (std::vector<std::string>::const_iterator i = vbind.begin(); i != vbind.end(); ++i) {
323+
} else if (gArgs.IsArgSet("-rpcbind")) { // Specific bind address
324+
for (const std::string& strRPCBind : gArgs.GetArgs("-rpcbind")) {
327325
int port = defaultPort;
328326
std::string host;
329-
SplitHostPort(*i, port, host);
327+
SplitHostPort(strRPCBind, port, host);
330328
endpoints.push_back(std::make_pair(host, port));
331329
}
332330
} else { // No specific bind address specified, bind to any

src/init.cpp

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ void InitParameterInteraction()
746746
LogPrintf("%s: parameter interaction: -whitebind set -> setting -listen=1\n", __func__);
747747
}
748748

749-
if (mapMultiArgs.count("-connect") && mapMultiArgs.at("-connect").size() > 0) {
749+
if (gArgs.IsArgSet("-connect")) {
750750
// when only connecting to trusted nodes, do not seed via DNS, or listen by default
751751
if (SoftSetBoolArg("-dnsseed", false))
752752
LogPrintf("%s: parameter interaction: -connect set -> setting -dnsseed=0\n", __func__);
@@ -900,8 +900,8 @@ bool AppInitParameterInteraction()
900900

901901
// Make sure enough file descriptors are available
902902
int nBind = std::max(
903-
(mapMultiArgs.count("-bind") ? mapMultiArgs.at("-bind").size() : 0) +
904-
(mapMultiArgs.count("-whitebind") ? mapMultiArgs.at("-whitebind").size() : 0), size_t(1));
903+
(gArgs.IsArgSet("-bind") ? gArgs.GetArgs("-bind").size() : 0) +
904+
(gArgs.IsArgSet("-whitebind") ? gArgs.GetArgs("-whitebind").size() : 0), size_t(1));
905905
nUserMaxConnections = GetArg("-maxconnections", DEFAULT_MAX_PEER_CONNECTIONS);
906906
nMaxConnections = std::max(nUserMaxConnections, 0);
907907

@@ -916,9 +916,9 @@ bool AppInitParameterInteraction()
916916
InitWarning(strprintf(_("Reducing -maxconnections from %d to %d, because of system limitations."), nUserMaxConnections, nMaxConnections));
917917

918918
// ********************************************************* Step 3: parameter-to-internal-flags
919-
if (mapMultiArgs.count("-debug") > 0) {
919+
if (gArgs.IsArgSet("-debug")) {
920920
// Special-case: if -debug=0/-nodebug is set, turn off debugging messages
921-
const std::vector<std::string>& categories = mapMultiArgs.at("-debug");
921+
const std::vector<std::string> categories = gArgs.GetArgs("-debug");
922922

923923
if (find(categories.begin(), categories.end(), std::string("0")) == categories.end()) {
924924
for (const auto& cat : categories) {
@@ -933,9 +933,8 @@ bool AppInitParameterInteraction()
933933
}
934934

935935
// Now remove the logging categories which were explicitly excluded
936-
if (mapMultiArgs.count("-debugexclude") > 0) {
937-
const std::vector<std::string>& excludedCategories = mapMultiArgs.at("-debugexclude");
938-
for (const auto& cat : excludedCategories) {
936+
if (gArgs.IsArgSet("-debugexclude")) {
937+
for (const std::string& cat : gArgs.GetArgs("-debugexclude")) {
939938
uint32_t flag = 0;
940939
if (!GetLogCategory(&flag, &cat)) {
941940
InitWarning(strprintf(_("Unsupported logging category %s=%s."), "-debugexclude", cat));
@@ -1105,15 +1104,14 @@ bool AppInitParameterInteraction()
11051104
fEnableReplacement = (std::find(vstrReplacementModes.begin(), vstrReplacementModes.end(), "fee") != vstrReplacementModes.end());
11061105
}
11071106

1108-
if (mapMultiArgs.count("-bip9params")) {
1107+
if (gArgs.IsArgSet("-bip9params")) {
11091108
// Allow overriding BIP9 parameters for testing
11101109
if (!chainparams.MineBlocksOnDemand()) {
11111110
return InitError("BIP9 parameters may only be overridden on regtest.");
11121111
}
1113-
const std::vector<std::string>& deployments = mapMultiArgs.at("-bip9params");
1114-
for (auto i : deployments) {
1112+
for (const std::string& strDeployment : gArgs.GetArgs("-bip9params")) {
11151113
std::vector<std::string> vDeploymentParams;
1116-
boost::split(vDeploymentParams, i, boost::is_any_of(":"));
1114+
boost::split(vDeploymentParams, strDeployment, boost::is_any_of(":"));
11171115
if (vDeploymentParams.size() != 3) {
11181116
return InitError("BIP9 parameters malformed, expecting deployment:start:end");
11191117
}
@@ -1259,8 +1257,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
12591257

12601258
// sanitize comments per BIP-0014, format user agent and check total size
12611259
std::vector<std::string> uacomments;
1262-
if (mapMultiArgs.count("-uacomment")) {
1263-
BOOST_FOREACH(std::string cmt, mapMultiArgs.at("-uacomment"))
1260+
if (gArgs.IsArgSet("-uacomment")) {
1261+
BOOST_FOREACH(std::string cmt, gArgs.GetArgs("-uacomment"))
12641262
{
12651263
if (cmt != SanitizeString(cmt, SAFE_CHARS_UA_COMMENT))
12661264
return InitError(strprintf(_("User Agent comment (%s) contains unsafe characters."), cmt));
@@ -1273,9 +1271,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
12731271
strSubVersion.size(), MAX_SUBVERSION_LENGTH));
12741272
}
12751273

1276-
if (mapMultiArgs.count("-onlynet")) {
1274+
if (gArgs.IsArgSet("-onlynet")) {
12771275
std::set<enum Network> nets;
1278-
BOOST_FOREACH(const std::string& snet, mapMultiArgs.at("-onlynet")) {
1276+
BOOST_FOREACH(const std::string& snet, gArgs.GetArgs("-onlynet")) {
12791277
enum Network net = ParseNetwork(snet);
12801278
if (net == NET_UNROUTABLE)
12811279
return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet));
@@ -1288,8 +1286,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
12881286
}
12891287
}
12901288

1291-
if (mapMultiArgs.count("-whitelist")) {
1292-
BOOST_FOREACH(const std::string& net, mapMultiArgs.at("-whitelist")) {
1289+
if (gArgs.IsArgSet("-whitelist")) {
1290+
BOOST_FOREACH(const std::string& net, gArgs.GetArgs("-whitelist")) {
12931291
CSubNet subnet;
12941292
LookupSubNet(net.c_str(), subnet);
12951293
if (!subnet.IsValid())
@@ -1350,16 +1348,16 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
13501348

13511349
if (fListen) {
13521350
bool fBound = false;
1353-
if (mapMultiArgs.count("-bind")) {
1354-
BOOST_FOREACH(const std::string& strBind, mapMultiArgs.at("-bind")) {
1351+
if (gArgs.IsArgSet("-bind")) {
1352+
BOOST_FOREACH(const std::string& strBind, gArgs.GetArgs("-bind")) {
13551353
CService addrBind;
13561354
if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false))
13571355
return InitError(ResolveErrMsg("bind", strBind));
13581356
fBound |= Bind(connman, addrBind, (BF_EXPLICIT | BF_REPORT_ERROR));
13591357
}
13601358
}
1361-
if (mapMultiArgs.count("-whitebind")) {
1362-
BOOST_FOREACH(const std::string& strBind, mapMultiArgs.at("-whitebind")) {
1359+
if (gArgs.IsArgSet("-whitebind")) {
1360+
BOOST_FOREACH(const std::string& strBind, gArgs.GetArgs("-whitebind")) {
13631361
CService addrBind;
13641362
if (!Lookup(strBind.c_str(), addrBind, 0, false))
13651363
return InitError(ResolveErrMsg("whitebind", strBind));
@@ -1368,7 +1366,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
13681366
fBound |= Bind(connman, addrBind, (BF_EXPLICIT | BF_REPORT_ERROR | BF_WHITELIST));
13691367
}
13701368
}
1371-
if (!mapMultiArgs.count("-bind") && !mapMultiArgs.count("-whitebind")) {
1369+
if (!gArgs.IsArgSet("-bind") && !gArgs.IsArgSet("-whitebind")) {
13721370
struct in_addr inaddr_any;
13731371
inaddr_any.s_addr = INADDR_ANY;
13741372
fBound |= Bind(connman, CService(in6addr_any, GetListenPort()), BF_NONE);
@@ -1378,8 +1376,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
13781376
return InitError(_("Failed to listen on any port. Use -listen=0 if you want this."));
13791377
}
13801378

1381-
if (mapMultiArgs.count("-externalip")) {
1382-
BOOST_FOREACH(const std::string& strAddr, mapMultiArgs.at("-externalip")) {
1379+
if (gArgs.IsArgSet("-externalip")) {
1380+
BOOST_FOREACH(const std::string& strAddr, gArgs.GetArgs("-externalip")) {
13831381
CService addrLocal;
13841382
if (Lookup(strAddr.c_str(), addrLocal, GetListenPort(), fNameLookup) && addrLocal.IsValid())
13851383
AddLocal(addrLocal, LOCAL_MANUAL);
@@ -1388,8 +1386,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
13881386
}
13891387
}
13901388

1391-
if (mapMultiArgs.count("-seednode")) {
1392-
BOOST_FOREACH(const std::string& strDest, mapMultiArgs.at("-seednode"))
1389+
if (gArgs.IsArgSet("-seednode")) {
1390+
BOOST_FOREACH(const std::string& strDest, gArgs.GetArgs("-seednode"))
13931391
connman.AddOneShot(strDest);
13941392
}
13951393

@@ -1615,9 +1613,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
16151613
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
16161614

16171615
std::vector<fs::path> vImportFiles;
1618-
if (mapMultiArgs.count("-loadblock"))
1616+
if (gArgs.IsArgSet("-loadblock"))
16191617
{
1620-
BOOST_FOREACH(const std::string& strFile, mapMultiArgs.at("-loadblock"))
1618+
BOOST_FOREACH(const std::string& strFile, gArgs.GetArgs("-loadblock"))
16211619
vImportFiles.push_back(strFile);
16221620
}
16231621

src/net.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,12 +1670,12 @@ void CConnman::ProcessOneShot()
16701670
void CConnman::ThreadOpenConnections()
16711671
{
16721672
// Connect to specific addresses
1673-
if (mapMultiArgs.count("-connect") && mapMultiArgs.at("-connect").size() > 0)
1673+
if (gArgs.IsArgSet("-connect") && gArgs.GetArgs("-connect").size() > 0)
16741674
{
16751675
for (int64_t nLoop = 0;; nLoop++)
16761676
{
16771677
ProcessOneShot();
1678-
BOOST_FOREACH(const std::string& strAddr, mapMultiArgs.at("-connect"))
1678+
BOOST_FOREACH(const std::string& strAddr, gArgs.GetArgs("-connect"))
16791679
{
16801680
CAddress addr(CService(), NODE_NONE);
16811681
OpenNetworkConnection(addr, false, NULL, strAddr.c_str());
@@ -1877,8 +1877,8 @@ void CConnman::ThreadOpenAddedConnections()
18771877
{
18781878
{
18791879
LOCK(cs_vAddedNodes);
1880-
if (mapMultiArgs.count("-addnode"))
1881-
vAddedNodes = mapMultiArgs.at("-addnode");
1880+
if (gArgs.IsArgSet("-addnode"))
1881+
vAddedNodes = gArgs.GetArgs("-addnode");
18821882
}
18831883

18841884
while (true)
@@ -2289,7 +2289,7 @@ bool CConnman::Start(CScheduler& scheduler, std::string& strNodeError, Options c
22892289
threadOpenAddedConnections = std::thread(&TraceThread<std::function<void()> >, "addcon", std::function<void()>(std::bind(&CConnman::ThreadOpenAddedConnections, this)));
22902290

22912291
// Initiate outbound connections unless connect=0
2292-
if (!mapMultiArgs.count("-connect") || mapMultiArgs.at("-connect").size() != 1 || mapMultiArgs.at("-connect")[0] != "0")
2292+
if (!gArgs.IsArgSet("-connect") || gArgs.GetArgs("-connect").size() != 1 || gArgs.GetArgs("-connect")[0] != "0")
22932293
threadOpenConnections = std::thread(&TraceThread<std::function<void()> >, "opencon", std::function<void()>(std::bind(&CConnman::ThreadOpenConnections, this)));
22942294

22952295
// Process messages

src/test/util_tests.cpp

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
#include <boost/test/unit_test.hpp>
1919

20-
extern std::map<std::string, std::string> mapArgs;
21-
2220
BOOST_FIXTURE_TEST_SUITE(util_tests, BasicTestingSetup)
2321

2422
BOOST_AUTO_TEST_CASE(util_criticalsection)
@@ -100,52 +98,67 @@ BOOST_AUTO_TEST_CASE(util_DateTimeStrFormat)
10098
BOOST_CHECK_EQUAL(DateTimeStrFormat("%a, %d %b %Y %H:%M:%S +0000", 1317425777), "Fri, 30 Sep 2011 23:36:17 +0000");
10199
}
102100

101+
class TestArgsManager : public ArgsManager
102+
{
103+
public:
104+
std::map<std::string, std::string>& GetMapArgs()
105+
{
106+
return mapArgs;
107+
};
108+
const std::map<std::string, std::vector<std::string> >& GetMapMultiArgs()
109+
{
110+
return mapMultiArgs;
111+
};
112+
};
113+
103114
BOOST_AUTO_TEST_CASE(util_ParseParameters)
104115
{
116+
TestArgsManager testArgs;
105117
const char *argv_test[] = {"-ignored", "-a", "-b", "-ccc=argument", "-ccc=multiple", "f", "-d=e"};
106118

107-
ParseParameters(0, (char**)argv_test);
108-
BOOST_CHECK(mapArgs.empty() && mapMultiArgs.empty());
119+
testArgs.ParseParameters(0, (char**)argv_test);
120+
BOOST_CHECK(testArgs.GetMapArgs().empty() && testArgs.GetMapMultiArgs().empty());
109121

110-
ParseParameters(1, (char**)argv_test);
111-
BOOST_CHECK(mapArgs.empty() && mapMultiArgs.empty());
122+
testArgs.ParseParameters(1, (char**)argv_test);
123+
BOOST_CHECK(testArgs.GetMapArgs().empty() && testArgs.GetMapMultiArgs().empty());
112124

113-
ParseParameters(5, (char**)argv_test);
125+
testArgs.ParseParameters(5, (char**)argv_test);
114126
// expectation: -ignored is ignored (program name argument),
115127
// -a, -b and -ccc end up in map, -d ignored because it is after
116128
// a non-option argument (non-GNU option parsing)
117-
BOOST_CHECK(mapArgs.size() == 3 && mapMultiArgs.size() == 3);
118-
BOOST_CHECK(IsArgSet("-a") && IsArgSet("-b") && IsArgSet("-ccc")
119-
&& !IsArgSet("f") && !IsArgSet("-d"));
120-
BOOST_CHECK(mapMultiArgs.count("-a") && mapMultiArgs.count("-b") && mapMultiArgs.count("-ccc")
121-
&& !mapMultiArgs.count("f") && !mapMultiArgs.count("-d"));
122-
123-
BOOST_CHECK(mapArgs["-a"] == "" && mapArgs["-ccc"] == "multiple");
124-
BOOST_CHECK(mapMultiArgs.at("-ccc").size() == 2);
129+
BOOST_CHECK(testArgs.GetMapArgs().size() == 3 && testArgs.GetMapMultiArgs().size() == 3);
130+
BOOST_CHECK(testArgs.IsArgSet("-a") && testArgs.IsArgSet("-b") && testArgs.IsArgSet("-ccc")
131+
&& !testArgs.IsArgSet("f") && !testArgs.IsArgSet("-d"));
132+
BOOST_CHECK(testArgs.GetMapMultiArgs().count("-a") && testArgs.GetMapMultiArgs().count("-b") && testArgs.GetMapMultiArgs().count("-ccc")
133+
&& !testArgs.GetMapMultiArgs().count("f") && !testArgs.GetMapMultiArgs().count("-d"));
134+
135+
BOOST_CHECK(testArgs.GetMapArgs()["-a"] == "" && testArgs.GetMapArgs()["-ccc"] == "multiple");
136+
BOOST_CHECK(testArgs.GetArgs("-ccc").size() == 2);
125137
}
126138

127139
BOOST_AUTO_TEST_CASE(util_GetArg)
128140
{
129-
mapArgs.clear();
130-
mapArgs["strtest1"] = "string...";
141+
TestArgsManager testArgs;
142+
testArgs.GetMapArgs().clear();
143+
testArgs.GetMapArgs()["strtest1"] = "string...";
131144
// strtest2 undefined on purpose
132-
mapArgs["inttest1"] = "12345";
133-
mapArgs["inttest2"] = "81985529216486895";
145+
testArgs.GetMapArgs()["inttest1"] = "12345";
146+
testArgs.GetMapArgs()["inttest2"] = "81985529216486895";
134147
// inttest3 undefined on purpose
135-
mapArgs["booltest1"] = "";
148+
testArgs.GetMapArgs()["booltest1"] = "";
136149
// booltest2 undefined on purpose
137-
mapArgs["booltest3"] = "0";
138-
mapArgs["booltest4"] = "1";
139-
140-
BOOST_CHECK_EQUAL(GetArg("strtest1", "default"), "string...");
141-
BOOST_CHECK_EQUAL(GetArg("strtest2", "default"), "default");
142-
BOOST_CHECK_EQUAL(GetArg("inttest1", -1), 12345);
143-
BOOST_CHECK_EQUAL(GetArg("inttest2", -1), 81985529216486895LL);
144-
BOOST_CHECK_EQUAL(GetArg("inttest3", -1), -1);
145-
BOOST_CHECK_EQUAL(GetBoolArg("booltest1", false), true);
146-
BOOST_CHECK_EQUAL(GetBoolArg("booltest2", false), false);
147-
BOOST_CHECK_EQUAL(GetBoolArg("booltest3", false), false);
148-
BOOST_CHECK_EQUAL(GetBoolArg("booltest4", false), true);
150+
testArgs.GetMapArgs()["booltest3"] = "0";
151+
testArgs.GetMapArgs()["booltest4"] = "1";
152+
153+
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "string...");
154+
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "default");
155+
BOOST_CHECK_EQUAL(testArgs.GetArg("inttest1", -1), 12345);
156+
BOOST_CHECK_EQUAL(testArgs.GetArg("inttest2", -1), 81985529216486895LL);
157+
BOOST_CHECK_EQUAL(testArgs.GetArg("inttest3", -1), -1);
158+
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest1", false), true);
159+
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest2", false), false);
160+
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest3", false), false);
161+
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest4", false), true);
149162
}
150163

151164
BOOST_AUTO_TEST_CASE(util_FormatMoney)

0 commit comments

Comments
 (0)