X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fcommand_reply.c;h=a97b23529fef89d2c432f04a57c6906f384b119c;hb=0bf38ae7a8125a1586d617f5f835329d1f924721;hp=261578cf17a8b19cb0723088875106c39a41cda0;hpb=c7a9035e822c6ddc364a0bab4eb84653c8eadde7;p=runtime.git diff --git a/lib/silcclient/command_reply.c b/lib/silcclient/command_reply.c index 261578cf..a97b2352 100644 --- a/lib/silcclient/command_reply.c +++ b/lib/silcclient/command_reply.c @@ -63,6 +63,7 @@ SilcClientCommandReply silc_command_reply_list[] = SILC_CLIENT_CMD_REPLY(silcoper, SILCOPER), SILC_CLIENT_CMD_REPLY(leave, LEAVE), SILC_CLIENT_CMD_REPLY(users, USERS), + SILC_CLIENT_CMD_REPLY(ban, BAN), { NULL, 0 }, }; @@ -679,7 +680,7 @@ SILC_CLIENT_CMD_REPLY_FUNC(topic) if (!channel_id) goto out; - /* Get the channel name */ + /* Get the channel entry */ if (!silc_idcache_find_by_id_one(conn->channel_cache, (void *)channel_id, SILC_ID_CHANNEL, &id_cache)) { silc_free(channel_id); @@ -1646,3 +1647,56 @@ SILC_CLIENT_CMD_REPLY_FUNC(users) SILC_CLIENT_PENDING_DESTRUCTOR(cmd, SILC_COMMAND_USERS); silc_client_command_reply_free(cmd); } + +SILC_CLIENT_CMD_REPLY_FUNC(ban) +{ + SilcClientCommandReplyContext cmd = (SilcClientCommandReplyContext)context; + SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data; + SilcCommandStatus status; + SilcIDCacheEntry id_cache = NULL; + SilcChannelEntry channel; + SilcChannelID *channel_id; + unsigned char *tmp; + unsigned int len; + + 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; + } + + /* Take Channel ID */ + tmp = silc_argument_get_arg_type(cmd->args, 2, &len); + if (!tmp) + goto out; + + channel_id = silc_id_payload_parse_id(tmp, len); + if (!channel_id) + goto out; + + /* Get the channel entry */ + if (!silc_idcache_find_by_id_one(conn->channel_cache, (void *)channel_id, + SILC_ID_CHANNEL, &id_cache)) { + silc_free(channel_id); + COMMAND_REPLY_ERROR; + goto out; + } + + channel = (SilcChannelEntry)id_cache->context; + + /* Get the ban list */ + tmp = silc_argument_get_arg_type(cmd->args, 3, &len); + + /* Notify application */ + COMMAND_REPLY((ARGS, channel, tmp)); + + /* Execute any pending command callbacks */ + SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_BAN); + + out: + SILC_CLIENT_PENDING_DESTRUCTOR(cmd, SILC_COMMAND_BAN); + silc_client_command_reply_free(cmd); +}