summaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/network')
-rw-r--r--src/network/network_func.h2
-rw-r--r--src/network/network_gui.cpp2
-rw-r--r--src/network/network_server.cpp15
3 files changed, 12 insertions, 7 deletions
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<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)