mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-11 04:12:36 -03:00
refactor: net: subnet lookup: use single-result LookupHost()
plus describe single IP subnet case for more clarity
This commit is contained in:
parent
4ba1bab443
commit
a989f98d24
1 changed files with 6 additions and 8 deletions
|
@ -823,14 +823,11 @@ bool LookupSubNet(const std::string& strSubnet, CSubNet& ret, DNSLookupFn dns_lo
|
|||
return false;
|
||||
}
|
||||
size_t slash = strSubnet.find_last_of('/');
|
||||
std::vector<CNetAddr> vIP;
|
||||
CNetAddr network;
|
||||
|
||||
std::string strAddress = strSubnet.substr(0, slash);
|
||||
// TODO: Use LookupHost(const std::string&, CNetAddr&, bool) instead to just get
|
||||
// one CNetAddr.
|
||||
if (LookupHost(strAddress, vIP, 1, false, dns_lookup_function))
|
||||
if (LookupHost(strAddress, network, false, dns_lookup_function))
|
||||
{
|
||||
CNetAddr network = vIP[0];
|
||||
if (slash != strSubnet.npos)
|
||||
{
|
||||
std::string strNetmask = strSubnet.substr(slash + 1);
|
||||
|
@ -842,14 +839,15 @@ bool LookupSubNet(const std::string& strSubnet, CSubNet& ret, DNSLookupFn dns_lo
|
|||
}
|
||||
else // If not a valid number, try full netmask syntax
|
||||
{
|
||||
CNetAddr netmask;
|
||||
// Never allow lookup for netmask
|
||||
if (LookupHost(strNetmask, vIP, 1, false, dns_lookup_function)) {
|
||||
ret = CSubNet(network, vIP[0]);
|
||||
if (LookupHost(strNetmask, netmask, false, dns_lookup_function)) {
|
||||
ret = CSubNet(network, netmask);
|
||||
return ret.IsValid();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else // Single IP subnet (<ipv4>/32 or <ipv6>/128)
|
||||
{
|
||||
ret = CSubNet(network);
|
||||
return ret.IsValid();
|
||||
|
|
Loading…
Reference in a new issue