appear to be on the channel. The affected file is
irssi/src/silc/core/silc-channels.c.
+ * Always update the conn->current_channel when executing command
+ on a channel. Affected file irssi/src/silc/core/silc-servers.c.
+
+ * Fixed the KILL notify handling in Irssi SILC client to remove
+ the killed client on all channels.
+
Thu Jun 21 17:10:08 CEST 2001 Pekka Riikonen <priikone@poseidon.pspt.fi>
* Fixed the silc_parse_command_line to remove extra spaces
TODO/bugs in Irssi SILC client
==============================
+ o The CMODE notify handling in client library may return NULL
+ client entry pointer to the application (when server was the CMODE's
+ executor). Fix this somehow.
+
o Add PERL scripting support from Irssi CVS.
o Add local commands to list the current server and client public keys
{ "ban_list", "channel {channel $0} ban list: $1", 2, { 0, 0 } },
{ "no_ban_list", "channel {channel $0} ban list not set", 1, { 0 } },
{ "inviting", "Inviting {nick $0} to channel {channel $1}", 2, { 0, 0 } },
- { "kicked_you", "You have been kicked off channel {channel $0} ($1}", 2, { 0, 0 } },
+ { "kicked_you", "You have been kicked off channel {channel $0} ($1)", 2, { 0, 0 } },
{ "kicked", "{nick $0} has been kicked off channel {channel $1} ($2)", 3, { 0, 0, 0 } },
{ "killed_you", "You have been killed from the SILC Network", 0 },
{ "killed", "{nick $0} has been killed from the SILC Network ($1)", 2, { 0, 0 } },
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KILLED_YOU,
tmp ? tmp : "");
} else {
+ GSList *nicks, *tmpn;
+ nicks = nicklist_get_same_unique(SERVER(server), client_entry);
+ for (tmpn = nicks; tmpn != NULL; tmpn = tmpn->next->next) {
+ CHANNEL_REC *channel = tmpn->data;
+ NICK_REC *nickrec = tmpn->next->data;
+ nicklist_remove(channel, nickrec);
+ }
+
printformat_module("fe-common/silc", server, NULL,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KILLED,
client_entry->nickname,
/* Generic command function to call any SILC command directly. */
-static void command_self(const char *data, SILC_SERVER_REC *server)
+static void command_self(const char *data, SILC_SERVER_REC *server,
+ WI_ITEM_REC *item)
{
if (!IS_SILC_SERVER(server) || !server->connected) {
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Not connected to server");
return;
}
+ if (IS_SILC_CHANNEL(item)) {
+ SILC_CHANNEL_REC *chanrec;
+ chanrec = silc_channel_find(server, item->name);
+ if (chanrec)
+ server->conn->current_channel = chanrec->entry;
+ }
+
silc_command_exec(server, current_command, data);
signal_stop();
}
silc_buffer_free(buffer);
silc_buffer_free(idp);
- /* Remove the client entry from the local cache. */
- silc_idcache_del_by_context(conn->client_cache, target);
- if (target->nickname)
- silc_free(target->nickname);
- if (target->server)
- silc_free(target->server);
- if (target->id)
- silc_free(target->id);
- if (target->send_key)
- silc_cipher_free(target->send_key);
- if (target->receive_key)
- silc_cipher_free(target->receive_key);
- silc_free(target);
-
/* Notify application */
COMMAND;