mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
net: move IsReachable() code to netbase and encapsulate it
`vfLimited`, `IsReachable()`, `SetReachable()` need not be in the `net` module. Move them to `netbase` because they will be needed in `LookupSubNet()` to possibly flip the result to CJDNS (if that network is reachable). In the process, encapsulate them in a class. `NET_UNROUTABLE` and `NET_INTERNAL` are no longer ignored when adding or removing reachable networks. This was unnecessary.
This commit is contained in:
26
src/init.cpp
26
src/init.cpp
@@ -1305,30 +1305,24 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
}
|
||||
|
||||
if (args.IsArgSet("-onlynet")) {
|
||||
std::set<enum Network> nets;
|
||||
g_reachable_nets.RemoveAll();
|
||||
for (const std::string& snet : args.GetArgs("-onlynet")) {
|
||||
enum Network net = ParseNetwork(snet);
|
||||
if (net == NET_UNROUTABLE)
|
||||
return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet));
|
||||
nets.insert(net);
|
||||
}
|
||||
for (int n = 0; n < NET_MAX; n++) {
|
||||
enum Network net = (enum Network)n;
|
||||
assert(IsReachable(net));
|
||||
if (!nets.count(net))
|
||||
SetReachable(net, false);
|
||||
g_reachable_nets.Add(net);
|
||||
}
|
||||
}
|
||||
|
||||
if (!args.IsArgSet("-cjdnsreachable")) {
|
||||
if (args.IsArgSet("-onlynet") && IsReachable(NET_CJDNS)) {
|
||||
if (args.IsArgSet("-onlynet") && g_reachable_nets.Contains(NET_CJDNS)) {
|
||||
return InitError(
|
||||
_("Outbound connections restricted to CJDNS (-onlynet=cjdns) but "
|
||||
"-cjdnsreachable is not provided"));
|
||||
}
|
||||
SetReachable(NET_CJDNS, false);
|
||||
g_reachable_nets.Remove(NET_CJDNS);
|
||||
}
|
||||
// Now IsReachable(NET_CJDNS) is true if:
|
||||
// Now g_reachable_nets.Contains(NET_CJDNS) is true if:
|
||||
// 1. -cjdnsreachable is given and
|
||||
// 2.1. -onlynet is not given or
|
||||
// 2.2. -onlynet=cjdns is given
|
||||
@@ -1336,7 +1330,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
// Requesting DNS seeds entails connecting to IPv4/IPv6, which -onlynet options may prohibit:
|
||||
// If -dnsseed=1 is explicitly specified, abort. If it's left unspecified by the user, we skip
|
||||
// the DNS seeds by adjusting -dnsseed in InitParameterInteraction.
|
||||
if (args.GetBoolArg("-dnsseed") == true && !IsReachable(NET_IPV4) && !IsReachable(NET_IPV6)) {
|
||||
if (args.GetBoolArg("-dnsseed") == true && !g_reachable_nets.Contains(NET_IPV4) && !g_reachable_nets.Contains(NET_IPV6)) {
|
||||
return InitError(strprintf(_("Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6")));
|
||||
};
|
||||
|
||||
@@ -1366,7 +1360,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
onion_proxy = addrProxy;
|
||||
}
|
||||
|
||||
const bool onlynet_used_with_onion{args.IsArgSet("-onlynet") && IsReachable(NET_ONION)};
|
||||
const bool onlynet_used_with_onion{args.IsArgSet("-onlynet") && g_reachable_nets.Contains(NET_ONION)};
|
||||
|
||||
// -onion can be used to set only a proxy for .onion, or override normal proxy for .onion addresses
|
||||
// -noonion (or -onion=0) disables connecting to .onion entirely
|
||||
@@ -1401,7 +1395,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
"reaching the Tor network is not provided: none of -proxy, -onion or "
|
||||
"-listenonion is given"));
|
||||
}
|
||||
SetReachable(NET_ONION, false);
|
||||
g_reachable_nets.Remove(NET_ONION);
|
||||
}
|
||||
|
||||
for (const std::string& strAddr : args.GetArgs("-externalip")) {
|
||||
@@ -1876,12 +1870,12 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
}
|
||||
SetProxy(NET_I2P, Proxy{addr.value()});
|
||||
} else {
|
||||
if (args.IsArgSet("-onlynet") && IsReachable(NET_I2P)) {
|
||||
if (args.IsArgSet("-onlynet") && g_reachable_nets.Contains(NET_I2P)) {
|
||||
return InitError(
|
||||
_("Outbound connections restricted to i2p (-onlynet=i2p) but "
|
||||
"-i2psam is not provided"));
|
||||
}
|
||||
SetReachable(NET_I2P, false);
|
||||
g_reachable_nets.Remove(NET_I2P);
|
||||
}
|
||||
|
||||
connOptions.m_i2p_accept_incoming = args.GetBoolArg("-i2pacceptincoming", DEFAULT_I2P_ACCEPT_INCOMING);
|
||||
|
||||
Reference in New Issue
Block a user