|
|
|
@ -880,9 +880,7 @@ bool AppInitParameterInteraction()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -bind and -whitebind can't be set when not listening
|
|
|
|
|
size_t nUserBind =
|
|
|
|
|
(gArgs.IsArgSet("-bind") ? gArgs.GetArgs("-bind").size() : 0) +
|
|
|
|
|
(gArgs.IsArgSet("-whitebind") ? gArgs.GetArgs("-whitebind").size() : 0);
|
|
|
|
|
size_t nUserBind = gArgs.GetArgs("-bind").size() + gArgs.GetArgs("-whitebind").size();
|
|
|
|
|
if (nUserBind != 0 && !gArgs.GetBoolArg("-listen", DEFAULT_LISTEN)) {
|
|
|
|
|
return InitError("Cannot set -bind or -whitebind together with -listen=0");
|
|
|
|
|
}
|
|
|
|
@ -920,15 +918,13 @@ bool AppInitParameterInteraction()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Now remove the logging categories which were explicitly excluded
|
|
|
|
|
if (gArgs.IsArgSet("-debugexclude")) {
|
|
|
|
|
for (const std::string& cat : gArgs.GetArgs("-debugexclude")) {
|
|
|
|
|
for (const std::string& cat : gArgs.GetArgs("-debugexclude")) {
|
|
|
|
|
uint32_t flag = 0;
|
|
|
|
|
if (!GetLogCategory(&flag, &cat)) {
|
|
|
|
|
InitWarning(strprintf(_("Unsupported logging category %s=%s."), "-debugexclude", cat));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
logCategories &= ~flag;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check for -debugnet
|
|
|
|
@ -1238,13 +1234,10 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
|
|
|
|
|
|
// sanitize comments per BIP-0014, format user agent and check total size
|
|
|
|
|
std::vector<std::string> uacomments;
|
|
|
|
|
if (gArgs.IsArgSet("-uacomment")) {
|
|
|
|
|
for (std::string cmt : gArgs.GetArgs("-uacomment"))
|
|
|
|
|
{
|
|
|
|
|
for (const std::string& cmt : gArgs.GetArgs("-uacomment")) {
|
|
|
|
|
if (cmt != SanitizeString(cmt, SAFE_CHARS_UA_COMMENT))
|
|
|
|
|
return InitError(strprintf(_("User Agent comment (%s) contains unsafe characters."), cmt));
|
|
|
|
|
uacomments.push_back(cmt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
strSubVersion = FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, uacomments);
|
|
|
|
|
if (strSubVersion.size() > MAX_SUBVERSION_LENGTH) {
|
|
|
|
@ -1317,14 +1310,12 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
|
fDiscover = GetBoolArg("-discover", true);
|
|
|
|
|
fRelayTxes = !GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY);
|
|
|
|
|
|
|
|
|
|
if (gArgs.IsArgSet("-externalip")) {
|
|
|
|
|
for (const std::string& strAddr : gArgs.GetArgs("-externalip")) {
|
|
|
|
|
for (const std::string& strAddr : gArgs.GetArgs("-externalip")) {
|
|
|
|
|
CService addrLocal;
|
|
|
|
|
if (Lookup(strAddr.c_str(), addrLocal, GetListenPort(), fNameLookup) && addrLocal.IsValid())
|
|
|
|
|
AddLocal(addrLocal, LOCAL_MANUAL);
|
|
|
|
|
else
|
|
|
|
|
return InitError(ResolveErrMsg("externalip", strAddr));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if ENABLE_ZMQ
|
|
|
|
@ -1553,10 +1544,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
|
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
|
|
|
|
|
|
|
|
|
|
std::vector<fs::path> vImportFiles;
|
|
|
|
|
if (gArgs.IsArgSet("-loadblock"))
|
|
|
|
|
{
|
|
|
|
|
for (const std::string& strFile : gArgs.GetArgs("-loadblock"))
|
|
|
|
|
vImportFiles.push_back(strFile);
|
|
|
|
|
for (const std::string& strFile : gArgs.GetArgs("-loadblock")) {
|
|
|
|
|
vImportFiles.push_back(strFile);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles));
|
|
|
|
@ -1598,17 +1587,14 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
|
connOptions.nMaxOutboundTimeframe = nMaxOutboundTimeframe;
|
|
|
|
|
connOptions.nMaxOutboundLimit = nMaxOutboundLimit;
|
|
|
|
|
|
|
|
|
|
if (gArgs.IsArgSet("-bind")) {
|
|
|
|
|
for (const std::string& strBind : gArgs.GetArgs("-bind")) {
|
|
|
|
|
for (const std::string& strBind : gArgs.GetArgs("-bind")) {
|
|
|
|
|
CService addrBind;
|
|
|
|
|
if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false)) {
|
|
|
|
|
return InitError(ResolveErrMsg("bind", strBind));
|
|
|
|
|
}
|
|
|
|
|
connOptions.vBinds.push_back(addrBind);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (gArgs.IsArgSet("-whitebind")) {
|
|
|
|
|
for (const std::string& strBind : gArgs.GetArgs("-whitebind")) {
|
|
|
|
|
for (const std::string& strBind : gArgs.GetArgs("-whitebind")) {
|
|
|
|
|
CService addrBind;
|
|
|
|
|
if (!Lookup(strBind.c_str(), addrBind, 0, false)) {
|
|
|
|
|
return InitError(ResolveErrMsg("whitebind", strBind));
|
|
|
|
@ -1617,17 +1603,14 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
|
return InitError(strprintf(_("Need to specify a port with -whitebind: '%s'"), strBind));
|
|
|
|
|
}
|
|
|
|
|
connOptions.vWhiteBinds.push_back(addrBind);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (gArgs.IsArgSet("-whitelist")) {
|
|
|
|
|
for (const auto& net : gArgs.GetArgs("-whitelist")) {
|
|
|
|
|
for (const auto& net : gArgs.GetArgs("-whitelist")) {
|
|
|
|
|
CSubNet subnet;
|
|
|
|
|
LookupSubNet(net.c_str(), subnet);
|
|
|
|
|
if (!subnet.IsValid())
|
|
|
|
|
return InitError(strprintf(_("Invalid netmask specified in -whitelist: '%s'"), net));
|
|
|
|
|
connOptions.vWhitelistedRange.push_back(subnet);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (gArgs.IsArgSet("-seednode")) {
|
|
|
|
|