@@ -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++;