mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 22:28:56 +00:00
(svn r3407) - Feature: Kick and ban now with IP numbers.
This commit is contained in:
parent
26226f1d43
commit
a292621b14
@ -365,26 +365,31 @@ DEF_CONSOLE_CMD(ConBan)
|
||||
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 @@ DEF_CONSOLE_CMD(ConUnBan)
|
||||
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 @@ DEF_CONSOLE_CMD(ConKick)
|
||||
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
|
||||
|
15
network.c
15
network.c
@ -65,6 +65,21 @@ NetworkClientInfo *NetworkFindClientInfoFromIndex(uint16 client_index)
|
||||
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)
|
||||
{
|
||||
|
@ -226,6 +226,7 @@ void NetworkGetClientName(char *clientname, size_t size, const NetworkClientStat
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user