diff options
author | smatz <smatz@openttd.org> | 2010-05-13 16:00:50 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2010-05-13 16:00:50 +0000 |
commit | 80fd67a314fa233f873b6d953856160d3ed54acf (patch) | |
tree | bb83b8398c87d97090593a5fe62ea946d1e07ea1 /src/network/network_server.cpp | |
parent | 241dd9a9f59208f5c9d025f0481dc00dac35989d (diff) | |
download | openttd-80fd67a314fa233f873b6d953856160d3ed54acf.tar.xz |
(svn r19818) -Fix [FS#3784](r16004): kicking clients by IP didn't work
Diffstat (limited to 'src/network/network_server.cpp')
-rw-r--r-- | src/network/network_server.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 6f1f3b4b5..b75489f2a 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1808,19 +1808,24 @@ void NetworkServerKickClient(ClientID client_id) NetworkServerSendError(client_id, NETWORK_ERROR_KICKED); } -void NetworkServerBanIP(const char *banip) +uint NetworkServerKickOrBanIP(const char *ip, bool ban) { - NetworkClientInfo *ci; + /* Add address to ban-list */ + if (ban) *_network_ban_list.Append() = strdup(ip); + + uint n = 0; /* There can be multiple clients with the same IP, kick them all */ + NetworkClientInfo *ci; FOR_ALL_CLIENT_INFOS(ci) { - if (ci->client_address.IsInNetmask(const_cast<char *>(banip))) { + if (ci->client_id == CLIENT_ID_SERVER) continue; + if (ci->client_address.IsInNetmask(const_cast<char *>(ip))) { NetworkServerKickClient(ci->client_id); + n++; } } - /* Add user to ban-list */ - *_network_ban_list.Append() = strdup(banip); + return n; } bool NetworkCompanyHasClients(CompanyID company) |