summaryrefslogtreecommitdiff
path: root/network_gui.c
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2005-01-02 12:03:43 +0000
committertruelight <truelight@openttd.org>2005-01-02 12:03:43 +0000
commita11f46fed48fa6606f2d84c8f96d79efbad83197 (patch)
tree9f7b9f8c971ff9369911613d44bb0367e7d30389 /network_gui.c
parent5d065845453b47791afec27a373b9ff9728ead1e (diff)
downloadopenttd-a11f46fed48fa6606f2d84c8f96d79efbad83197.tar.xz
(svn r1322) -Add: banning system (mostly tnx to guru3)
A server can ban people via ClientList Both server and dedicated can do it via console: 'ban', 'unban', 'banlist'.
Diffstat (limited to 'network_gui.c')
-rw-r--r--network_gui.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/network_gui.c b/network_gui.c
index 3a10016ec..5f62b29a5 100644
--- a/network_gui.c
+++ b/network_gui.c
@@ -953,10 +953,21 @@ static void ClientList_Kick(byte client_no)
SEND_COMMAND(PACKET_SERVER_ERROR)(&_clients[client_no], NETWORK_ERROR_KICKED);
}
-/*static void ClientList_Ban(byte client_no)
+static void ClientList_Ban(byte client_no)
{
-// TODO
-}*/
+ uint i;
+ uint32 ip = NetworkFindClientInfo(client_no)->client_ip;
+
+ for (i = 0; i < lengthof(_network_ban_list); i++) {
+ if (_network_ban_list[i] == NULL || _network_ban_list[i][0] == '\0') {
+ _network_ban_list[i] = strdup(inet_ntoa(*(struct in_addr *)&ip));
+ break;
+ }
+ }
+
+ if (client_no < MAX_PLAYERS)
+ SEND_COMMAND(PACKET_SERVER_ERROR)(&_clients[client_no], NETWORK_ERROR_KICKED);
+}
static void ClientList_GiveMoney(byte client_no)
{
@@ -1090,8 +1101,8 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_KICK);
_clientlist_proc[i++] = &ClientList_Kick;
-/* sprintf(clientlist_action[i],"Ban");
- clientlist_proc[i++] = &ClientList_Ban;*/
+ sprintf(_clientlist_action[i],"Ban");
+ _clientlist_proc[i++] = &ClientList_Ban;
}
if (i == 0) {