{ STAT(NOT_REGISTERED), "You have not registered" },
{ STAT(NOT_ENOUGH_PARAMS), "Not enough parameters" },
{ STAT(TOO_MANY_PARAMS), "Too many parameters" },
- { STAT(PERM_DENIED), "Your host is not among the privileged" },
+ { STAT(PERM_DENIED), "Permission denied" },
{ STAT(BANNED_FROM_SERVER),"You are banned from this server" },
{ STAT(BAD_PASSWORD), "Cannot join channel. Incorrect password" },
{ STAT(CHANNEL_IS_FULL), "Cannot join channel. Channel is full" },
unsigned char *id_data, *tmp;
char *nickname = NULL, *username = NULL;
char *realname = NULL;
- unsigned int idle = 0;
+ unsigned int idle = 0, mode = 0;
+ SilcBuffer channels = NULL;
argc = silc_argument_get_arg_num(cmd->args);
return;
}
+ tmp = silc_argument_get_arg_type(cmd->args, 6, &len);
+ if (tmp) {
+ channels = silc_buffer_alloc(len);
+ silc_buffer_pull_tail(channels, SILC_BUFFER_END(channels));
+ silc_buffer_put(channels, tmp, len);
+ }
+
tmp = silc_argument_get_arg_type(cmd->args, 7, &len);
+ if (tmp)
+ SILC_GET32_MSB(mode, tmp);
+
+ tmp = silc_argument_get_arg_type(cmd->args, 8, &len);
if (tmp)
SILC_GET32_MSB(idle, tmp);
client_entry->username = strdup(username);
if (realname)
client_entry->realname = strdup(realname);
+ client_entry->mode = mode;
/* Add client to cache */
silc_idcache_add(conn->client_cache, client_entry->nickname,
silc_free(client_entry->username);
if (client_entry->realname)
silc_free(client_entry->realname);
+ client_entry->mode = mode;
SILC_LOG_DEBUG(("Updating client entry"));
/* Notify application */
if (!cmd->callback)
COMMAND_REPLY((ARGS, client_entry, nickname, username, realname,
- NULL, idle));
+ channels, mode, idle));
+
+ if (channels)
+ silc_buffer_free(channels);
}
/* Received reply for WHOIS command. This maybe called several times
SILC_CLIENT_PENDING_DESTRUCTOR(cmd, SILC_COMMAND_INVITE);
silc_client_command_reply_free(cmd);
}
+
+/* Received reply to the KILL command. */
SILC_CLIENT_CMD_REPLY_FUNC(kill)
{
+ SilcClientCommandReplyContext cmd = (SilcClientCommandReplyContext)context;
+ SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
+ SilcCommandStatus status;
+ unsigned char *tmp;
+
+ tmp = silc_argument_get_arg_type(cmd->args, 1, NULL);
+ SILC_GET16_MSB(status, tmp);
+ if (status != SILC_STATUS_OK) {
+ cmd->client->ops->say(cmd->client, conn,
+ "%s", silc_client_command_status_message(status));
+ COMMAND_REPLY_ERROR;
+ goto out;
+ }
+
+ /* Notify application */
+ COMMAND_REPLY((ARGS));
+
+ /* Execute any pending command callbacks */
+ SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_KILL);
+
+ out:
+ SILC_CLIENT_PENDING_DESTRUCTOR(cmd, SILC_COMMAND_KILL);
+ silc_client_command_reply_free(cmd);
}
/* Received reply to INFO command. We receive the server ID and some
silc_client_command_reply_free(cmd);
}
+/* Received reply tot he UMODE command. Save the current user mode */
+
SILC_CLIENT_CMD_REPLY_FUNC(umode)
{
+ SilcClientCommandReplyContext cmd = (SilcClientCommandReplyContext)context;
+ SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
+ SilcCommandStatus status;
+ unsigned char *tmp;
+ unsigned int mode;
+
+ tmp = silc_argument_get_arg_type(cmd->args, 1, NULL);
+ SILC_GET16_MSB(status, tmp);
+ if (status != SILC_STATUS_OK) {
+ cmd->client->ops->say(cmd->client, conn,
+ "%s", silc_client_command_status_message(status));
+ COMMAND_REPLY_ERROR;
+ goto out;
+ }
+
+ tmp = silc_argument_get_arg_type(cmd->args, 2, NULL);
+ if (!tmp) {
+ COMMAND_REPLY_ERROR;
+ goto out;
+ }
+
+ SILC_GET32_MSB(mode, tmp);
+ conn->local_entry->mode = mode;
+
+ /* Notify application */
+ COMMAND_REPLY((ARGS, mode));
+
+ /* Execute any pending command callbacks */
+ SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_UMODE);
+
+ out:
+ SILC_CLIENT_PENDING_DESTRUCTOR(cmd, SILC_COMMAND_UMODE);
+ silc_client_command_reply_free(cmd);
}
/* Received reply for CMODE command. */