mirror of https://github.com/OpenTTD/OpenTTD.git
Codechange: [Network] Let IsInNetmask use std::string
This commit is contained in:
parent
36705f1dc0
commit
a91e29b656
|
@ -143,7 +143,7 @@ bool NetworkAddress::IsFamily(int family)
|
|||
* @note netmask without /n assumes all bits need to match.
|
||||
* @return true if this IP is within the netmask.
|
||||
*/
|
||||
bool NetworkAddress::IsInNetmask(const char *netmask)
|
||||
bool NetworkAddress::IsInNetmask(const std::string &netmask)
|
||||
{
|
||||
/* Resolve it if we didn't do it already */
|
||||
if (!this->IsResolved()) this->GetAddress();
|
||||
|
@ -153,16 +153,15 @@ bool NetworkAddress::IsInNetmask(const char *netmask)
|
|||
NetworkAddress mask_address;
|
||||
|
||||
/* Check for CIDR separator */
|
||||
const char *chr_cidr = strchr(netmask, '/');
|
||||
if (chr_cidr != nullptr) {
|
||||
int tmp_cidr = atoi(chr_cidr + 1);
|
||||
auto cidr_separator_location = netmask.find('/');
|
||||
if (cidr_separator_location != std::string::npos) {
|
||||
int tmp_cidr = atoi(netmask.substr(cidr_separator_location + 1).c_str());
|
||||
|
||||
/* Invalid CIDR, treat as single host */
|
||||
if (tmp_cidr > 0 && tmp_cidr < cidr) cidr = tmp_cidr;
|
||||
|
||||
/* Remove the / so that NetworkAddress works on the IP portion */
|
||||
std::string ip_str(netmask, chr_cidr - netmask);
|
||||
mask_address = NetworkAddress(ip_str.c_str(), 0, this->address.ss_family);
|
||||
mask_address = NetworkAddress(netmask.substr(0, cidr_separator_location), 0, this->address.ss_family);
|
||||
} else {
|
||||
mask_address = NetworkAddress(netmask, 0, this->address.ss_family);
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ public:
|
|||
}
|
||||
|
||||
bool IsFamily(int family);
|
||||
bool IsInNetmask(const char *netmask);
|
||||
bool IsInNetmask(const std::string &netmask);
|
||||
|
||||
/**
|
||||
* Compare the address of this class with the address of another.
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
/* Check if the client is banned */
|
||||
bool banned = false;
|
||||
for (const auto &entry : _network_ban_list) {
|
||||
banned = address.IsInNetmask(entry.c_str());
|
||||
banned = address.IsInNetmask(entry);
|
||||
if (banned) {
|
||||
Packet p(Tban_packet);
|
||||
p.PrepareToSend();
|
||||
|
|
Loading…
Reference in New Issue