p2p: return CSubNet in LookupSubNet

This commit is contained in:
brunoerg
2022-09-13 18:19:40 -03:00
parent 71300489af
commit fb3e812277
8 changed files with 101 additions and 115 deletions

View File

@@ -655,10 +655,12 @@ bool ConnectThroughProxy(const Proxy& proxy, const std::string& strDest, uint16_
return true;
}
bool LookupSubNet(const std::string& subnet_str, CSubNet& subnet_out)
CSubNet LookupSubNet(const std::string& subnet_str)
{
CSubNet subnet;
assert(!subnet.IsValid());
if (!ContainsNoNUL(subnet_str)) {
return false;
return subnet;
}
const size_t slash_pos{subnet_str.find_last_of('/')};
@@ -671,23 +673,21 @@ bool LookupSubNet(const std::string& subnet_str, CSubNet& subnet_out)
uint8_t netmask;
if (ParseUInt8(netmask_str, &netmask)) {
// Valid number; assume CIDR variable-length subnet masking.
subnet_out = CSubNet{addr.value(), netmask};
return subnet_out.IsValid();
subnet = CSubNet{addr.value(), netmask};
} else {
// Invalid number; try full netmask syntax. Never allow lookup for netmask.
const std::optional<CNetAddr> full_netmask{LookupHost(netmask_str, /*fAllowLookup=*/false)};
if (full_netmask.has_value()) {
subnet_out = CSubNet{addr.value(), full_netmask.value()};
return subnet_out.IsValid();
subnet = CSubNet{addr.value(), full_netmask.value()};
}
}
} else {
// Single IP subnet (<ipv4>/32 or <ipv6>/128).
subnet_out = CSubNet{addr.value()};
return subnet_out.IsValid();
subnet = CSubNet{addr.value()};
}
}
return false;
return subnet;
}
void InterruptSocks5(bool interrupt)