diff options
Diffstat (limited to 'src/netbase.cpp')
-rw-r--r-- | src/netbase.cpp | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/src/netbase.cpp b/src/netbase.cpp index 95d64939ba..9e7307204a 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -11,8 +11,8 @@ #include <sys/fcntl.h> #endif -#include "strlcpy.h" #include <boost/algorithm/string/case_conv.hpp> // for to_lower() +#include <boost/algorithm/string/predicate.hpp> // for startswith() and endswith() using namespace std; @@ -30,7 +30,6 @@ enum Network ParseNetwork(std::string net) { if (net == "ipv4") return NET_IPV4; if (net == "ipv6") return NET_IPV6; if (net == "tor") return NET_TOR; - if (net == "i2p") return NET_I2P; return NET_UNROUTABLE; } @@ -119,18 +118,16 @@ bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsign bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions, bool fAllowLookup) { - if (pszName[0] == 0) + std::string str(pszName); + std::string strHost = str; + if (str.empty()) return false; - char psz[256]; - char *pszHost = psz; - strlcpy(psz, pszName, sizeof(psz)); - if (psz[0] == '[' && psz[strlen(psz)-1] == ']') + if (boost::algorithm::starts_with(str, "[") && boost::algorithm::ends_with(str, "]")) { - pszHost = psz+1; - psz[strlen(psz)-1] = 0; + strHost = str.substr(1, str.size() - 2); } - return LookupIntern(pszHost, vIP, nMaxSolutions, fAllowLookup); + return LookupIntern(strHost.c_str(), vIP, nMaxSolutions, fAllowLookup); } bool LookupHostNumeric(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions) @@ -548,7 +545,7 @@ bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest void CNetAddr::Init() { - memset(ip, 0, 16); + memset(ip, 0, sizeof(ip)); } void CNetAddr::SetIP(const CNetAddr& ipIn) @@ -557,7 +554,6 @@ void CNetAddr::SetIP(const CNetAddr& ipIn) } static const unsigned char pchOnionCat[] = {0xFD,0x87,0xD8,0x7E,0xEB,0x43}; -static const unsigned char pchGarliCat[] = {0xFD,0x60,0xDB,0x4D,0xDD,0xB5}; bool CNetAddr::SetSpecial(const std::string &strName) { @@ -570,15 +566,6 @@ bool CNetAddr::SetSpecial(const std::string &strName) ip[i + sizeof(pchOnionCat)] = vchAddr[i]; return true; } - if (strName.size()>11 && strName.substr(strName.size() - 11, 11) == ".oc.b32.i2p") { - std::vector<unsigned char> vchAddr = DecodeBase32(strName.substr(0, strName.size() - 11).c_str()); - if (vchAddr.size() != 16-sizeof(pchGarliCat)) - return false; - memcpy(ip, pchOnionCat, sizeof(pchGarliCat)); - for (unsigned int i=0; i<16-sizeof(pchGarliCat); i++) - ip[i + sizeof(pchGarliCat)] = vchAddr[i]; - return true; - } return false; } @@ -628,7 +615,7 @@ bool CNetAddr::IsIPv4() const bool CNetAddr::IsIPv6() const { - return (!IsIPv4() && !IsTor() && !IsI2P()); + return (!IsIPv4() && !IsTor()); } bool CNetAddr::IsRFC1918() const @@ -692,11 +679,6 @@ bool CNetAddr::IsTor() const return (memcmp(ip, pchOnionCat, sizeof(pchOnionCat)) == 0); } -bool CNetAddr::IsI2P() const -{ - return (memcmp(ip, pchGarliCat, sizeof(pchGarliCat)) == 0); -} - bool CNetAddr::IsLocal() const { // IPv4 loopback @@ -755,7 +737,7 @@ bool CNetAddr::IsValid() const bool CNetAddr::IsRoutable() const { - return IsValid() && !(IsRFC1918() || IsRFC3927() || IsRFC4862() || (IsRFC4193() && !IsTor() && !IsI2P()) || IsRFC4843() || IsLocal()); + return IsValid() && !(IsRFC1918() || IsRFC3927() || IsRFC4862() || (IsRFC4193() && !IsTor()) || IsRFC4843() || IsLocal()); } enum Network CNetAddr::GetNetwork() const @@ -769,9 +751,6 @@ enum Network CNetAddr::GetNetwork() const if (IsTor()) return NET_TOR; - if (IsI2P()) - return NET_I2P; - return NET_IPV6; } @@ -779,8 +758,6 @@ std::string CNetAddr::ToStringIP() const { if (IsTor()) return EncodeBase32(&ip[6], 10) + ".onion"; - if (IsI2P()) - return EncodeBase32(&ip[6], 10) + ".oc.b32.i2p"; CService serv(*this, 0); #ifdef USE_IPV6 struct sockaddr_storage sockaddr; @@ -888,12 +865,6 @@ std::vector<unsigned char> CNetAddr::GetGroup() const nStartByte = 6; nBits = 4; } - else if (IsI2P()) - { - nClass = NET_I2P; - nStartByte = 6; - nBits = 4; - } // for he.net, use /36 groups else if (GetByte(15) == 0x20 && GetByte(14) == 0x11 && GetByte(13) == 0x04 && GetByte(12) == 0x70) nBits = 36; @@ -979,11 +950,6 @@ int CNetAddr::GetReachabilityFrom(const CNetAddr *paddrPartner) const case NET_IPV4: return REACH_IPV4; // Tor users can connect to IPv4 as well case NET_TOR: return REACH_PRIVATE; } - case NET_I2P: - switch(ourNet) { - default: return REACH_DEFAULT; - case NET_I2P: return REACH_PRIVATE; - } case NET_TEREDO: switch(ourNet) { default: return REACH_DEFAULT; @@ -999,8 +965,7 @@ int CNetAddr::GetReachabilityFrom(const CNetAddr *paddrPartner) const case NET_TEREDO: return REACH_TEREDO; case NET_IPV6: return REACH_IPV6_WEAK; case NET_IPV4: return REACH_IPV4; - case NET_I2P: return REACH_PRIVATE; // assume connections from unroutable addresses are - case NET_TOR: return REACH_PRIVATE; // either from Tor/I2P, or don't care about our address + case NET_TOR: return REACH_PRIVATE; // either from Tor, or don't care about our address } } } @@ -1157,7 +1122,7 @@ std::string CService::ToStringPort() const std::string CService::ToStringIPPort() const { - if (IsIPv4() || IsTor() || IsI2P()) { + if (IsIPv4() || IsTor()) { return ToStringIP() + ":" + ToStringPort(); } else { return "[" + ToStringIP() + "]:" + ToStringPort(); |