Changeset View
Changeset View
Standalone View
Standalone View
src/netaddress.cpp
Show First 20 Lines • Show All 921 Lines • ▼ Show 20 Lines | std::string CSubNet::ToString() const { | ||||
return network.ToString() + strprintf("/%u", cidr); | return network.ToString() + strprintf("/%u", cidr); | ||||
} | } | ||||
bool CSubNet::IsValid() const { | bool CSubNet::IsValid() const { | ||||
return valid; | return valid; | ||||
} | } | ||||
bool CSubNet::SanityCheck() const { | |||||
if (!(network.IsIPv4() || network.IsIPv6())) { | |||||
return false; | |||||
} | |||||
for (size_t x = 0; x < network.m_addr.size(); ++x) { | |||||
if (network.m_addr[x] & ~netmask[x]) { | |||||
return false; | |||||
} | |||||
} | |||||
return true; | |||||
} | |||||
bool operator==(const CSubNet &a, const CSubNet &b) { | bool operator==(const CSubNet &a, const CSubNet &b) { | ||||
return a.valid == b.valid && a.network == b.network && | return a.valid == b.valid && a.network == b.network && | ||||
!memcmp(a.netmask, b.netmask, 16); | !memcmp(a.netmask, b.netmask, 16); | ||||
} | } | ||||
bool operator<(const CSubNet &a, const CSubNet &b) { | bool operator<(const CSubNet &a, const CSubNet &b) { | ||||
return (a.network < b.network || | return (a.network < b.network || | ||||
(a.network == b.network && memcmp(a.netmask, b.netmask, 16) < 0)); | (a.network == b.network && memcmp(a.netmask, b.netmask, 16) < 0)); | ||||
} | } | ||||
bool SanityCheckASMap(const std::vector<bool> &asmap) { | bool SanityCheckASMap(const std::vector<bool> &asmap) { | ||||
// For IP address lookups, the input is 128 bits | // For IP address lookups, the input is 128 bits | ||||
return SanityCheckASMap(asmap, 128); | return SanityCheckASMap(asmap, 128); | ||||
} | } |