|
|
|
@ -1298,8 +1298,15 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
|
|
std::string host_out;
|
|
|
|
|
uint16_t port_out{0};
|
|
|
|
|
if (!SplitHostPort(socket_addr, port_out, host_out)) {
|
|
|
|
|
#if HAVE_SOCKADDR_UN
|
|
|
|
|
// Allow unix domain sockets for -proxy and -onion e.g. unix:/some/file/path
|
|
|
|
|
if ((port_option != "-proxy" && port_option != "-onion") || socket_addr.find(ADDR_PREFIX_UNIX) != 0) {
|
|
|
|
|
return InitError(InvalidPortErrMsg(port_option, socket_addr));
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
return InitError(InvalidPortErrMsg(port_option, socket_addr));
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1365,12 +1372,18 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
|
|
// -noproxy (or -proxy=0) as well as the empty string can be used to not set a proxy, this is the default
|
|
|
|
|
std::string proxyArg = args.GetArg("-proxy", "");
|
|
|
|
|
if (proxyArg != "" && proxyArg != "0") {
|
|
|
|
|
Proxy addrProxy;
|
|
|
|
|
if (IsUnixSocketPath(proxyArg)) {
|
|
|
|
|
addrProxy = Proxy(proxyArg, proxyRandomize);
|
|
|
|
|
} else {
|
|
|
|
|
const std::optional<CService> proxyAddr{Lookup(proxyArg, 9050, fNameLookup)};
|
|
|
|
|
if (!proxyAddr.has_value()) {
|
|
|
|
|
return InitError(strprintf(_("Invalid -proxy address or hostname: '%s'"), proxyArg));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Proxy addrProxy = Proxy(proxyAddr.value(), proxyRandomize);
|
|
|
|
|
addrProxy = Proxy(proxyAddr.value(), proxyRandomize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!addrProxy.IsValid())
|
|
|
|
|
return InitError(strprintf(_("Invalid -proxy address or hostname: '%s'"), proxyArg));
|
|
|
|
|
|
|
|
|
@ -1395,12 +1408,17 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
|
|
_("Outbound connections restricted to Tor (-onlynet=onion) but the proxy for "
|
|
|
|
|
"reaching the Tor network is explicitly forbidden: -onion=0"));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (IsUnixSocketPath(onionArg)) {
|
|
|
|
|
onion_proxy = Proxy(onionArg, proxyRandomize);
|
|
|
|
|
} else {
|
|
|
|
|
const std::optional<CService> addr{Lookup(onionArg, 9050, fNameLookup)};
|
|
|
|
|
if (!addr.has_value() || !addr->IsValid()) {
|
|
|
|
|
return InitError(strprintf(_("Invalid -onion address or hostname: '%s'"), onionArg));
|
|
|
|
|
}
|
|
|
|
|
onion_proxy = Proxy{addr.value(), proxyRandomize};
|
|
|
|
|
|
|
|
|
|
onion_proxy = Proxy(addr.value(), proxyRandomize);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|