clients_count = va_arg(va, uint32);
for (i = 0; i < clients_count; i++) {
+ GSList *nicks, *tmp;
+
memset(userhost, 0, sizeof(userhost));
if (clients[i]->username)
snprintf(userhost, sizeof(userhost) - 1, "%s@%s",
signal_emit("message quit", 4, server, clients[i]->nickname,
clients[i]->username ? userhost : "",
"server signoff");
+
+ nicks = nicklist_get_same_unique(SERVER(server), clients[i]);
+ for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
+ CHANNEL_REC *channel = tmp->data;
+ NICK_REC *nickrec = tmp->next->data;
+ nicklist_remove(channel, nickrec);
+ }
}
}
static void event_kick(SILC_SERVER_REC *server, va_list va)
{
SilcClientConnection conn = server->conn;
- SilcClientEntry client_entry;
+ SilcClientEntry client_entry, kicker;
SilcChannelEntry channel_entry;
char *tmp;
SILC_CHANNEL_REC *chanrec;
client_entry = va_arg(va, SilcClientEntry);
tmp = va_arg(va, char *);
+ kicker = va_arg(va, SilcClientEntry);
channel_entry = va_arg(va, SilcChannelEntry);
chanrec = silc_channel_find_entry(server, channel_entry);
if (client_entry == conn->local_entry) {
printformat_module("fe-common/silc", server, channel_entry->channel_name,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KICKED_YOU,
+ kicker->nickname,
channel_entry->channel_name, tmp ? tmp : "");
if (chanrec) {
chanrec->kicked = TRUE;
printformat_module("fe-common/silc", server, channel_entry->channel_name,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KICKED,
client_entry->nickname,
+ kicker->nickname,
channel_entry->channel_name, tmp ? tmp : "");
if (chanrec) {
SILCTXT_KEY_AGREEMENT_TIMEOUT, client_entry->nickname);
break;
+ case SILC_KEY_AGREEMENT_ABORTED:
+ printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KEY_AGREEMENT_ABORTED, client_entry->nickname);
+ break;
+
default:
break;
}