Changeset - r25684:297b887b048e
[Not reviewed]
master
0 3 0
rubidium42 - 3 years ago 2021-06-13 19:29:40
rubidium@openttd.org
Codechange: [Network] Let IsInNetmask use std::string
3 files changed with 7 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/network/core/address.cpp
Show inline comments
 
@@ -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 c
 
	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);
 
	}
src/network/core/address.h
Show inline comments
 
@@ -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.
src/network/core/tcp_listen.h
Show inline comments
 
@@ -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();
0 comments (0 inline, 0 general)