client_entry = va_arg(va, SilcClientEntry);
client_entry2 = va_arg(va, SilcClientEntry);
+
+ if (!strcmp(client_entry->nickname, client_entry2->nickname))
+ break;
memset(userhost, 0, sizeof(userhost));
snprintf(userhost, sizeof(userhost) - 1, "%s@%s",
}
break;
+ case SILC_NOTIFY_TYPE_ERROR:
+ {
+ SilcStatus error = va_arg(va, int);
+
+ silc_say(client, conn, SILC_CLIENT_MESSAGE_ERROR,
+ "%s", silc_client_status_message(error));
+ }
+ break;
+
default:
/* Unknown notify */
printformat_module("fe-common/silc", server, NULL,
{
SILC_SERVER_REC *server = conn->context;
- if (!server && status == SILC_CLIENT_CONN_ERROR) {
+ if (!server) {
silc_client_close_connection(client, conn);
return;
}
SilcClientEntry founder = NULL;
NICK_REC *ownnick;
+ SILC_LOG_DEBUG(("Start, channel %s, %d users", channel->channel_name,
+ silc_hash_table_count(channel->user_list)));
+
if (!clients)
return;
void
silc_command_reply(SilcClient client, SilcClientConnection conn,
SilcCommandPayload cmd_payload, int success,
- SilcCommand command, SilcCommandStatus status, ...)
+ SilcCommand command, SilcStatus status, ...)
{
SILC_SERVER_REC *server = conn->context;
char buf[1024], *nickname, *username, *realname, *nick;
unsigned char *fingerprint;
SilcUInt32 idle, mode;
- SilcBuffer channels;
+ SilcBuffer channels, user_modes;
SilcClientEntry client_entry;
if (status == SILC_STATUS_ERR_NO_SUCH_NICK) {
3, NULL);
if (tmp)
silc_say_error("%s: %s", tmp,
- silc_client_command_status_message(status));
+ silc_client_status_message(status));
break;
} else if (status == SILC_STATUS_ERR_NO_SUCH_CLIENT_ID) {
/* Try to find the entry for the unknown client ID, since we
client_id);
if (client_entry && client_entry->nickname)
silc_say_error("%s: %s", client_entry->nickname,
- silc_client_command_status_message(status));
+ silc_client_status_message(status));
silc_free(client_id);
}
}
mode = va_arg(vp, SilcUInt32);
idle = va_arg(vp, SilcUInt32);
fingerprint = va_arg(vp, unsigned char *);
+ user_modes = va_arg(vp, SilcBuffer);
silc_parse_userfqdn(nickname, &nick, NULL);
printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
SILCTXT_WHOIS_REALNAME, realname);
silc_free(nick);
- if (channels) {
+ if (channels && user_modes) {
+ SilcUInt32 *umodes;
SilcDList list = silc_channel_payload_parse_list(channels->data,
channels->len);
- if (list) {
+ if (list && silc_get_mode_list(user_modes, silc_dlist_count(list),
+ &umodes)) {
SilcChannelPayload entry;
+ int i = 0;
+
memset(buf, 0, sizeof(buf));
silc_dlist_start(list);
while ((entry = silc_dlist_get(list)) != SILC_LIST_END) {
- char *m = silc_client_chumode_char(silc_channel_get_mode(entry));
SilcUInt32 name_len;
+ char *m = silc_client_chumode_char(umodes[i++]);
char *name = silc_channel_get_name(entry, &name_len);
if (m)
printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
SILCTXT_WHOIS_CHANNELS, buf);
silc_channel_payload_list_free(list);
+ silc_free(umodes);
}
}
3, NULL);
if (tmp)
silc_say_error("%s: %s", tmp,
- silc_client_command_status_message(status));
+ silc_client_status_message(status));
break;
} else if (status == SILC_STATUS_ERR_NO_SUCH_CLIENT_ID) {
/* Try to find the entry for the unknown client ID, since we
client_id);
if (client_entry && client_entry->nickname)
silc_say_error("%s: %s", client_entry->nickname,
- silc_client_command_status_message(status));
+ silc_client_status_message(status));
silc_free(client_id);
}
}
3, NULL);
if (tmp)
silc_say_error("%s: %s", tmp,
- silc_client_command_status_message(status));
+ silc_client_status_message(status));
break;
}
/* Save the detachment data to file. */
memset(file, 0, sizeof(file));
- snprintf(file, sizeof(file) - 1, "%s/session.%s.%d", get_irssi_dir(),
- conn->remote_host, conn->remote_port);
+ snprintf(file, sizeof(file) - 1, "%s/session", get_irssi_dir());
silc_file_writefile(file, detach_data, detach_data_len);
}