SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SilcClientConnection conn = cmd->conn;
SilcChannelEntry channel;
- SilcChannelUser chu;
SilcBuffer buffer, idp;
char *name;
goto out;
}
- /* Remove us from channel */
- chu = silc_client_on_channel(channel, conn->local_entry);
- if (chu) {
- silc_hash_table_del(chu->client->channels, chu->channel);
- silc_hash_table_del(chu->channel->user_list, chu->client);
- silc_free(chu);
- }
-
/* Send LEAVE command to the server */
idp = silc_id_payload_encode(channel->id, SILC_ID_CHANNEL);
buffer = silc_command_payload_encode_va(SILC_COMMAND_LEAVE, 0, 1,
if (conn->current_channel == channel)
conn->current_channel = NULL;
- silc_client_del_channel(cmd->client, cmd->conn, channel);
-
out:
silc_client_command_free(cmd);
}
SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
SilcChannelID *channel_id;
SilcChannelEntry channel = NULL;
+ SilcChannelUser chu;
unsigned char *tmp;
SilcUInt32 len;
goto out;
}
+ /* Remove us from this channel. */
+ chu = silc_client_on_channel(channel, conn->local_entry);
+ if (chu) {
+ silc_hash_table_del(chu->client->channels, chu->channel);
+ silc_hash_table_del(chu->channel->user_list, chu->client);
+ silc_free(chu);
+ }
+
silc_free(channel_id);
}
/* Notify application */
COMMAND_REPLY((SILC_ARGS, channel));
+ /* Now delete the channel. */
+ if (channel)
+ silc_client_del_channel(cmd->client, conn, channel);
+
out:
SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_LEAVE);
silc_client_command_reply_free(cmd);