From 80fd67a314fa233f873b6d953856160d3ed54acf Mon Sep 17 00:00:00 2001 From: smatz Date: Thu, 13 May 2010 16:00:50 +0000 Subject: (svn r19818) -Fix [FS#3784](r16004): kicking clients by IP didn't work --- src/network/network_func.h | 2 +- src/network/network_gui.cpp | 2 +- src/network/network_server.cpp | 15 ++++++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) (limited to 'src/network') diff --git a/src/network/network_func.h b/src/network/network_func.h index 72539e501..70fe3afb7 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -79,7 +79,7 @@ void NetworkServerSendError(ClientID client_id, NetworkErrorCode error); void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const char *msg, ClientID from_id, int64 data = 0); void NetworkServerKickClient(ClientID client_id); -void NetworkServerBanIP(const char *banip); +uint NetworkServerKickOrBanIP(const char *ip, bool ban); void NetworkInitChatMessage(); void CDECL NetworkAddChatMessage(TextColour colour, uint8 duration, const char *message, ...) WARN_FORMAT(3, 4); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index eb8bb0982..f2c70f1eb 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1786,7 +1786,7 @@ static void ClientList_Ban(byte client_no) if (ci == NULL) return; - NetworkServerBanIP(GetClientIP(ci)); + NetworkServerKickOrBanIP(GetClientIP(ci), true); } static void ClientList_GiveMoney(byte client_no) 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(banip))) { + if (ci->client_id == CLIENT_ID_SERVER) continue; + if (ci->client_address.IsInNetmask(const_cast(ip))) { NetworkServerKickClient(ci->client_id); + n++; } } - /* Add user to ban-list */ - *_network_ban_list.Append() = strdup(banip); + return n; } bool NetworkCompanyHasClients(CompanyID company) -- cgit v1.2.3-54-g00ecf