Mercurial > hg > openttd
changeset 2859:5dcbcb954e29 draft
(svn r3407) - Feature: Kick and ban now with IP numbers.
author | Darkvater <Darkvater@openttd.org> |
---|---|
date | Thu, 19 Jan 2006 15:58:57 +0000 |
parents | 84ebd314b758 |
children | 307dde3e41cd |
files | console_cmds.c network.c network_data.h |
diffstat | 3 files changed, 36 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/console_cmds.c +++ b/console_cmds.c @@ -365,26 +365,31 @@ uint32 index; if (argc == 0) { - IConsoleHelp("Ban a player from a network game. Usage: 'ban <client-id>'"); + IConsoleHelp("Ban a player from a network game. Usage: 'ban <ip | client-id>'"); IConsoleHelp("For client-id's, see the command 'clients'"); return true; } if (argc != 2) return false; - index = atoi(argv[1]); + if (strchr(argv[1], '.') == NULL) { + index = atoi(argv[1]); + ci = NetworkFindClientFromIndex(index); + } else { + ci = NetworkFindClientFromIP(argv[1]); + index = (ci == NULL) ? 0 : ci->client_index; + } if (index == NETWORK_SERVER_INDEX) { IConsolePrint(_icolour_def, "Silly boy, you can not ban yourself!"); return true; } + if (index == 0) { IConsoleError("Invalid Client-ID"); return true; } - ci = NetworkFindClientInfoFromIndex(index); - if (ci != NULL) { uint i; /* Add user to ban-list */ @@ -407,7 +412,7 @@ uint i, index; if (argc == 0) { - IConsoleHelp("Unban a player from a network game. Usage: 'unban <ip | id>'"); + IConsoleHelp("Unban a player from a network game. Usage: 'unban <ip | client-id>'"); IConsoleHelp("For a list of banned IP's, see the command 'banlist'"); return true; } @@ -528,25 +533,31 @@ uint32 index; if (argc == 0) { - IConsoleHelp("Kick a player from a network game. Usage: 'kick <client-id>'"); + IConsoleHelp("Kick a player from a network game. Usage: 'kick <ip | client-id>'"); IConsoleHelp("For client-id's, see the command 'clients'"); return true; } if (argc != 2) return false; - index = atoi(argv[1]); + if (strchr(argv[1], '.') == NULL) { + index = atoi(argv[1]); + ci = NetworkFindClientFromIndex(index); + } else { + ci = NetworkFindClientFromIP(argv[1]); + index = (ci == NULL) ? 0 : ci->client_index; + } + if (index == NETWORK_SERVER_INDEX) { IConsolePrint(_icolour_def, "Silly boy, you can not kick yourself!"); return true; } + if (index == 0) { IConsoleError("Invalid client-id"); return true; } - ci = NetworkFindClientInfoFromIndex(index); - if (ci != NULL) { SEND_COMMAND(PACKET_SERVER_ERROR)(NetworkFindClientStateFromIndex(index), NETWORK_ERROR_KICKED); } else
--- a/network.c +++ b/network.c @@ -65,6 +65,21 @@ return NULL; } +/** Return the CI for a given IP + * @param ip IP of the client we are looking for. This must be in string-format + * @return return a pointer to the corresponding NetworkClientInfo struct or NULL on failure */ +NetworkClientInfo *NetworkFindClientInfoFromIP(const char *ip) +{ + NetworkClientInfo *ci; + uint32 ip_number = inet_addr(ip); + + for (ci = _network_client_info; ci != &_network_client_info[MAX_CLIENT_INFO]; ci++) { + if (ci->client_ip == ip_number) return ci; + } + + return NULL; +} + // Function that looks up the CS for a given client-index NetworkClientState *NetworkFindClientStateFromIndex(uint16 client_index) {
--- a/network_data.h +++ b/network_data.h @@ -226,6 +226,7 @@ uint NetworkCalculateLag(const NetworkClientState *cs); byte NetworkGetCurrentLanguageIndex(void); NetworkClientInfo *NetworkFindClientInfoFromIndex(uint16 client_index); +NetworkClientInfo *NetworkFindClientInfoFromIP(const char *ip); NetworkClientState *NetworkFindClientStateFromIndex(uint16 client_index); unsigned long NetworkResolveHost(const char *hostname);