Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2001 Pekka Riikonen
+ Copyright (C) 1997 - 2002 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#define COMMAND_ERROR cmd->client->internal->ops->command(cmd->client, \
cmd->conn, cmd, FALSE, cmd->command->cmd)
+#define SAY cmd->client->internal->ops->say
+
/* Generic function to send any command. The arguments must be sent already
encoded into correct form and in correct order. */
}
if (cmd->argc < 2 || cmd->argc > 3) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /WHOWAS <nickname>[@<server>] [<count>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /WHOWAS <nickname>[@<server>] [<count>]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /NICK <nickname>");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /NICK <nickname>");
COMMAND_ERROR;
goto out;
}
/* Show current nickname */
if (cmd->argc < 2) {
if (cmd->conn) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Your nickname is %s on server %s",
- conn->nickname, conn->remote_host);
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Your nickname is %s on server %s",
+ conn->nickname, conn->remote_host);
} else {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Your nickname is %s", conn->nickname);
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Your nickname is %s", conn->nickname);
}
COMMAND;
}
if (cmd->argc < 2 || cmd->argc > 3) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /TOPIC <channel> [<topic>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /TOPIC <channel> [<topic>]");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
}
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on that channel");
COMMAND_ERROR;
goto out;
}
/* Get the Channel ID of the channel */
if (!silc_idcache_find_by_name_one(conn->channel_cache, name, &id_cache)) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on that channel");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /INVITE <channel> [<nickname>[@server>]"
- "[+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /INVITE <channel> [<nickname>[@server>]"
+ "[+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
channel = silc_client_get_channel(cmd->client, conn, name);
if (!channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are on that channel");
COMMAND_ERROR;
goto out;
}
/* Get the target client */
target = silc_idlist_get_client(cmd->client, conn, nickname,
cmd->argv[1], FALSE);
- if (target) {
- silc_client_remove_from_channels(client, conn, target);
+ if (target)
+ /* Remove the client from all channels and free it */
silc_client_del_client(client, conn, target);
- }
silc_free(nickname);
silc_client_command_free(cmd);
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /KILL <nickname> [<comment>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /KILL <nickname> [<comment>]");
COMMAND_ERROR;
goto out;
}
name = cmd->argv[1];
for (i = 2; i < cmd->argc; i++) {
- if (!strcasecmp(cmd->argv[i], "-cipher") && cmd->argc >= i + 1) {
+ if (!strcasecmp(cmd->argv[i], "-cipher") && cmd->argc > i + 1) {
cipher = cmd->argv[i + 1];
i++;
- } else if (!strcasecmp(cmd->argv[i], "-hmac") && cmd->argc >= i + 1) {
+ } else if (!strcasecmp(cmd->argv[i], "-hmac") && cmd->argc > i + 1) {
hmac = cmd->argv[i + 1];
i++;
- } else if (!strcasecmp(cmd->argv[i], "-founder") && cmd->argc >= i + 1) {
+ } else if (!strcasecmp(cmd->argv[i], "-founder") && cmd->argc > i + 1) {
if (!strcasecmp(cmd->argv[i + 1], "-pubkey")) {
auth = silc_auth_public_key_auth_generate(cmd->client->public_key,
cmd->client->private_key,
}
if (cmd->argc < 1 || cmd->argc > 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /MOTD [<server>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /MOTD [<server>]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /UMODE +|-<modes>");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /UMODE +|-<modes>");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 3) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
channel = silc_client_get_channel(cmd->client, conn, name);
if (!channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are on that channel");
COMMAND_ERROR;
goto out;
}
mode |= SILC_CHANNEL_MODE_ULIMIT;
type = 3;
if (cmd->argc < 4) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
COMMAND_ERROR;
goto out;
}
mode |= SILC_CHANNEL_MODE_PASSPHRASE;
type = 4;
if (cmd->argc < 4) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
COMMAND_ERROR;
goto out;
}
mode |= SILC_CHANNEL_MODE_CIPHER;
type = 5;
if (cmd->argc < 4) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
COMMAND_ERROR;
goto out;
}
mode |= SILC_CHANNEL_MODE_HMAC;
type = 6;
if (cmd->argc < 4) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
COMMAND_ERROR;
goto out;
}
type = 7;
if (cmd->argc < 4) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CMODE <channel> +|-<modes> [{ <arguments>}]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 4) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CUMODE <channel> +|-<modes> <nickname>[@<server>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CUMODE <channel> +|-<modes> <nickname>[@<server>]");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
channel = silc_client_get_channel(cmd->client, conn, name);
if (!channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are on that channel");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 3) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /KICK <channel> <nickname> [<comment>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /KICK <channel> <nickname> [<comment>]");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
}
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on that channel");
COMMAND_ERROR;
goto out;
}
/* Get the Channel ID of the channel */
if (!silc_idcache_find_by_name_one(conn->channel_cache, name, &id_cache)) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on that channel");
COMMAND_ERROR;
goto out;
}
target = silc_idlist_get_client(cmd->client, conn, nickname,
cmd->argv[2], FALSE);
if (!target) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "No such client: %s",
- cmd->argv[2]);
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "No such client: %s", cmd->argv[2]);
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /OPER <username> [-pubkey]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /OPER <username> [-pubkey]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /SILCOPER <username> [-pubkey]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /SILCOPER <username> [-pubkey]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CONNECT <server> [<port>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CONNECT <server> [<port>]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /BAN <channel> "
- "[+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /BAN <channel> "
+ "[+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
channel = silc_client_get_channel(cmd->client, conn, name);
if (!channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are on that channel");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc < 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /CLOSE <server> [<port>]");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /CLOSE <server> [<port>]");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc != 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /LEAVE <channel>");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /LEAVE <channel>");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
/* Get the Channel ID of the channel */
if (!silc_idcache_find_by_name_one(conn->channel_cache, name, &id_cache)) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on that channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on that channel");
COMMAND_ERROR;
goto out;
}
}
if (cmd->argc != 2) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /USERS <channel>");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "Usage: /USERS <channel>");
COMMAND_ERROR;
goto out;
}
if (cmd->argv[1][0] == '*') {
if (!conn->current_channel) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "You are not on any channel");
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
+ "You are not on any channel");
COMMAND_ERROR;
goto out;
}
if (status == SILC_STATUS_ERR_NO_SUCH_NICK ||
status == SILC_STATUS_ERR_NO_SUCH_SERVER) {
- cmd->client->internal->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_ERROR,
- "%s",
- silc_client_command_status_message(status));
+ SAY(cmd->client, conn, SILC_CLIENT_MESSAGE_ERROR, "%s",
+ silc_client_command_status_message(status));
COMMAND_ERROR;
goto out;
}