Remove vfReachable and modify IsReachable to only use vfLimited.

We do not know that a class of Network is reachable, only that it is not.

Github-Pull: #7553
Rebased-From: 110b62f069
This commit is contained in:
Patrick Strateman 2016-02-17 22:44:32 -08:00 committed by MarcoFalke
parent 52c101158f
commit a5bc6a1bc4
4 changed files with 6 additions and 16 deletions

View File

@ -1175,6 +1175,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
// -proxy sets a proxy for all outgoing network traffic // -proxy sets a proxy for all outgoing network traffic
// -noproxy (or -proxy=0) as well as the empty string can be used to not set a proxy, this is the default // -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 = GetArg("-proxy", ""); std::string proxyArg = GetArg("-proxy", "");
SetLimited(NET_TOR);
if (proxyArg != "" && proxyArg != "0") { if (proxyArg != "" && proxyArg != "0") {
proxyType addrProxy = proxyType(CService(proxyArg, 9050), proxyRandomize); proxyType addrProxy = proxyType(CService(proxyArg, 9050), proxyRandomize);
if (!addrProxy.IsValid()) if (!addrProxy.IsValid())
@ -1184,7 +1185,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
SetProxy(NET_IPV6, addrProxy); SetProxy(NET_IPV6, addrProxy);
SetProxy(NET_TOR, addrProxy); SetProxy(NET_TOR, addrProxy);
SetNameProxy(addrProxy); SetNameProxy(addrProxy);
SetReachable(NET_TOR); // by default, -proxy sets onion as reachable, unless -noonion later SetLimited(NET_TOR, false); // by default, -proxy sets onion as reachable, unless -noonion later
} }
// -onion can be used to set only a proxy for .onion, or override normal proxy for .onion addresses // -onion can be used to set only a proxy for .onion, or override normal proxy for .onion addresses
@ -1193,13 +1194,13 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
std::string onionArg = GetArg("-onion", ""); std::string onionArg = GetArg("-onion", "");
if (onionArg != "") { if (onionArg != "") {
if (onionArg == "0") { // Handle -noonion/-onion=0 if (onionArg == "0") { // Handle -noonion/-onion=0
SetReachable(NET_TOR, false); // set onions as unreachable SetLimited(NET_TOR); // set onions as unreachable
} else { } else {
proxyType addrOnion = proxyType(CService(onionArg, 9050), proxyRandomize); proxyType addrOnion = proxyType(CService(onionArg, 9050), proxyRandomize);
if (!addrOnion.IsValid()) if (!addrOnion.IsValid())
return InitError(strprintf(_("Invalid -onion address: '%s'"), onionArg)); return InitError(strprintf(_("Invalid -onion address: '%s'"), onionArg));
SetProxy(NET_TOR, addrOnion); SetProxy(NET_TOR, addrOnion);
SetReachable(NET_TOR); SetLimited(NET_TOR, false);
} }
} }

View File

@ -77,7 +77,6 @@ bool fListen = true;
uint64_t nLocalServices = NODE_NETWORK; uint64_t nLocalServices = NODE_NETWORK;
CCriticalSection cs_mapLocalHost; CCriticalSection cs_mapLocalHost;
map<CNetAddr, LocalServiceInfo> mapLocalHost; map<CNetAddr, LocalServiceInfo> mapLocalHost;
static bool vfReachable[NET_MAX] = {};
static bool vfLimited[NET_MAX] = {}; static bool vfLimited[NET_MAX] = {};
static CNode* pnodeLocalHost = NULL; static CNode* pnodeLocalHost = NULL;
uint64_t nLocalHostNonce = 0; uint64_t nLocalHostNonce = 0;
@ -224,14 +223,6 @@ void AdvertiseLocal(CNode *pnode)
} }
} }
void SetReachable(enum Network net, bool fFlag)
{
LOCK(cs_mapLocalHost);
vfReachable[net] = fFlag;
if (net == NET_IPV6 && fFlag)
vfReachable[NET_IPV4] = true;
}
// learn a new local address // learn a new local address
bool AddLocal(const CService& addr, int nScore) bool AddLocal(const CService& addr, int nScore)
{ {
@ -254,7 +245,6 @@ bool AddLocal(const CService& addr, int nScore)
info.nScore = nScore + (fAlready ? 1 : 0); info.nScore = nScore + (fAlready ? 1 : 0);
info.nPort = addr.GetPort(); info.nPort = addr.GetPort();
} }
SetReachable(addr.GetNetwork());
} }
return true; return true;
@ -317,7 +307,7 @@ bool IsLocal(const CService& addr)
bool IsReachable(enum Network net) bool IsReachable(enum Network net)
{ {
LOCK(cs_mapLocalHost); LOCK(cs_mapLocalHost);
return vfReachable[net] && !vfLimited[net]; return !vfLimited[net];
} }
/** check whether a given address is in a network we can probably connect to */ /** check whether a given address is in a network we can probably connect to */

View File

@ -146,7 +146,6 @@ bool IsLocal(const CService& addr);
bool GetLocal(CService &addr, const CNetAddr *paddrPeer = NULL); bool GetLocal(CService &addr, const CNetAddr *paddrPeer = NULL);
bool IsReachable(enum Network net); bool IsReachable(enum Network net);
bool IsReachable(const CNetAddr &addr); bool IsReachable(const CNetAddr &addr);
void SetReachable(enum Network net, bool fFlag = true);
CAddress GetLocalAddress(const CNetAddr *paddrPeer = NULL); CAddress GetLocalAddress(const CNetAddr *paddrPeer = NULL);

View File

@ -460,7 +460,7 @@ void TorController::auth_cb(TorControlConnection& conn, const TorControlReply& r
if (GetArg("-onion", "") == "") { if (GetArg("-onion", "") == "") {
proxyType addrOnion = proxyType(CService("127.0.0.1", 9050), true); proxyType addrOnion = proxyType(CService("127.0.0.1", 9050), true);
SetProxy(NET_TOR, addrOnion); SetProxy(NET_TOR, addrOnion);
SetReachable(NET_TOR); SetLimited(NET_TOR, false);
} }
// Finally - now create the service // Finally - now create the service