X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fsilc%2Fcore%2Fclient_ops.c;h=f6dac8aec0db84efb94381362710eabde81fb464;hb=6394d86063413bc1c473723f3ef971840195bcd3;hp=4104b4bdf8606d874b97f4a3136a9fcf6659fbc6;hpb=5abf57fab042a9f9e4ea497cea5cdf6bb170ef62;p=silc.git diff --git a/apps/irssi/src/silc/core/client_ops.c b/apps/irssi/src/silc/core/client_ops.c index 4104b4bd..f6dac8ae 100644 --- a/apps/irssi/src/silc/core/client_ops.c +++ b/apps/irssi/src/silc/core/client_ops.c @@ -406,15 +406,34 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, SilcBuffer channels; SilcClientEntry client_entry; - if (status == SILC_STATUS_ERR_NO_SUCH_NICK || - status == SILC_STATUS_ERR_NO_SUCH_CLIENT_ID) { - char *tmp; - tmp = silc_argument_get_arg_type(silc_command_get_args(cmd_payload), - 3, NULL); + if (status == SILC_STATUS_ERR_NO_SUCH_NICK) { + /* Print the unknown nick for user */ + unsigned char *tmp = + silc_argument_get_arg_type(silc_command_get_args(cmd_payload), + 3, NULL); if (tmp) silc_say_error("%s: %s", tmp, silc_client_command_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 + might have, and print the nickname of it for user. */ + uint32 tmp_len; + unsigned char *tmp = + silc_argument_get_arg_type(silc_command_get_args(cmd_payload), + 2, &tmp_len); + if (tmp) { + SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len); + if (client_id) { + client_entry = silc_client_get_client_by_id(client, conn, + client_id); + if (client_entry && client_entry->nickname) + silc_say_error("%s: %s", client_entry->nickname, + silc_client_command_status_message(status)); + silc_free(client_id); + } + } + break; } if (!success) @@ -439,7 +458,8 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, silc_free(nick); if (channels) { - SilcDList list = silc_channel_payload_parse_list(channels); + SilcDList list = silc_channel_payload_parse_list(channels->data, + channels->len); if (list) { SilcChannelPayload entry; memset(buf, 0, sizeof(buf)); @@ -498,6 +518,43 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, } break; + case SILC_COMMAND_IDENTIFY: + { + SilcClientEntry client_entry; + + if (status == SILC_STATUS_ERR_NO_SUCH_NICK) { + /* Print the unknown nick for user */ + unsigned char *tmp = + silc_argument_get_arg_type(silc_command_get_args(cmd_payload), + 3, NULL); + if (tmp) + silc_say_error("%s: %s", tmp, + silc_client_command_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 + might have, and print the nickname of it for user. */ + uint32 tmp_len; + unsigned char *tmp = + silc_argument_get_arg_type(silc_command_get_args(cmd_payload), + 2, &tmp_len); + if (tmp) { + SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len); + if (client_id) { + client_entry = silc_client_get_client_by_id(client, conn, + client_id); + if (client_entry && client_entry->nickname) + silc_say_error("%s: %s", client_entry->nickname, + silc_client_command_status_message(status)); + silc_free(client_id); + } + } + break; + } + + break; + } + case SILC_COMMAND_WHOWAS: { char *nickname, *username, *realname; @@ -661,13 +718,17 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, mode = va_arg(vp, uint32); - if (mode & SILC_UMODE_SERVER_OPERATOR) + if (mode & SILC_UMODE_SERVER_OPERATOR && + !(server->umode & SILC_UMODE_SERVER_OPERATOR)) printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, SILCTXT_SERVER_OPER); - if (mode & SILC_UMODE_ROUTER_OPERATOR) + if (mode & SILC_UMODE_ROUTER_OPERATOR && + !(server->umode & SILC_UMODE_ROUTER_OPERATOR)) printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, SILCTXT_ROUTER_OPER); + + server->umode = mode; } break; @@ -791,6 +852,27 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, } } break; + + case SILC_COMMAND_INFO: + { + SilcServerEntry server_entry; + char *server_name; + char *server_info; + + if (!success) + return; + + server_entry = va_arg(vp, SilcServerEntry); + server_name = va_arg(vp, char *); + server_info = va_arg(vp, char *); + + if (server_name && server_info ) + { + printtext(server, NULL, MSGLEVEL_CRAP, "Server: %s", server_name); + printtext(server, NULL, MSGLEVEL_CRAP, "%s", server_info); + } + } + break; case SILC_COMMAND_TOPIC: { @@ -905,7 +987,7 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn, if (conn_type == SILC_SOCKET_TYPE_SERVER || conn_type == SILC_SOCKET_TYPE_ROUTER) { snprintf(file, sizeof(file) - 1, "%skey_%s_%d.pub", entity, - conn->sock->hostname, conn->sock->port); + conn->sock->ip, conn->sock->port); snprintf(filename, sizeof(filename) - 1, "%s/.silc/%skeys/%s", pw->pw_dir, entity, file); } else {