File diff r19648:88f50b64e3d1 → r19649:a400539817fd
src/network/network_server.cpp
Show inline comments
 
@@ -2043,25 +2043,34 @@ uint NetworkServerKickOrBanIP(ClientID c
 
{
 
	return NetworkServerKickOrBanIP(NetworkClientSocket::GetByClientID(client_id)->GetClientIP(), ban);
 
}
 

	
 
/**
 
 * Kick or ban someone based on an IP address.
 
 * @param ip The IP address/range to ban/kick.
 
 * @param ban Whether to ban or just kick.
 
 */
 
uint NetworkServerKickOrBanIP(const char *ip, bool ban)
 
{
 
	/* Add address to ban-list */
 
	if (ban) *_network_ban_list.Append() = strdup(ip);
 
	if (ban) {
 
		bool contains = false;
 
		for (char **iter = _network_ban_list.Begin(); iter != _network_ban_list.End(); iter++) {
 
			if (strcmp(*iter, ip) == 0) {
 
				contains = true;
 
				break;
 
			}
 
		}
 
		if (!contains) *_network_ban_list.Append() = strdup(ip);
 
	}
 

	
 
	uint n = 0;
 

	
 
	/* There can be multiple clients with the same IP, kick them all */
 
	NetworkClientSocket *cs;
 
	FOR_ALL_CLIENT_SOCKETS(cs) {
 
		if (cs->client_id == CLIENT_ID_SERVER) continue;
 
		if (cs->client_address.IsInNetmask(const_cast<char *>(ip))) {
 
			NetworkServerKickClient(cs->client_id);
 
			n++;
 
		}
 
	}