|
|
@ -21,6 +21,7 @@ bool fProxyNameLookup = false; |
|
|
|
bool fNameLookup = false; |
|
|
|
bool fNameLookup = false; |
|
|
|
CService addrProxy("127.0.0.1",9050); |
|
|
|
CService addrProxy("127.0.0.1",9050); |
|
|
|
int nConnectTimeout = 5000; |
|
|
|
int nConnectTimeout = 5000; |
|
|
|
|
|
|
|
static bool vfNoProxy[NET_MAX] = {}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const unsigned char pchIPv4[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; |
|
|
|
static const unsigned char pchIPv4[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; |
|
|
@ -33,6 +34,11 @@ enum Network ParseNetwork(std::string net) { |
|
|
|
return NET_UNROUTABLE; |
|
|
|
return NET_UNROUTABLE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SetNoProxy(enum Network net, bool fNoProxy) { |
|
|
|
|
|
|
|
assert(net >= 0 && net < NET_MAX); |
|
|
|
|
|
|
|
vfNoProxy[net] = fNoProxy; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions, bool fAllowLookup) |
|
|
|
bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions, bool fAllowLookup) |
|
|
|
{ |
|
|
|
{ |
|
|
|
vIP.clear(); |
|
|
|
vIP.clear(); |
|
|
@ -440,7 +446,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe |
|
|
|
bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout) |
|
|
|
bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout) |
|
|
|
{ |
|
|
|
{ |
|
|
|
SOCKET hSocket = INVALID_SOCKET; |
|
|
|
SOCKET hSocket = INVALID_SOCKET; |
|
|
|
bool fProxy = (fUseProxy && addrDest.IsRoutable()); |
|
|
|
bool fProxy = (fUseProxy && addrDest.IsRoutable() && !vfNoProxy[addrDest.GetNetwork()]); |
|
|
|
|
|
|
|
|
|
|
|
if (!ConnectSocketDirectly(fProxy ? addrProxy : addrDest, hSocket, nTimeout)) |
|
|
|
if (!ConnectSocketDirectly(fProxy ? addrProxy : addrDest, hSocket, nTimeout)) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|