updates.
[silc.git] / apps / irssi / src / silc / core / silc-channels.c
index c823e0a5e1699c87ca15ef31fbcaf3030a942152..459dedd6a5d1d332b8c95d61f37703b026652749 100644 (file)
@@ -89,7 +89,6 @@ static void silc_channels_join(SILC_SERVER_REC *server,
       continue;
     }
 
-    silc_channel_create(server, channel, FALSE);
     silc_command_exec(server, "JOIN", channel);
     g_free(channel);
   }
@@ -289,12 +288,16 @@ static void event_nick(SILC_SERVER_REC *server, va_list va)
 static void event_cmode(SILC_SERVER_REC *server, va_list va)
 {
   SILC_CHANNEL_REC *chanrec;
+  void *entry;
   SilcClientEntry client;
+  SilcServerEntry server_entry;
   SilcChannelEntry channel;
   char *mode;
   uint32 modei;
+  SilcIdType idtype;
 
-  client = va_arg(va, SilcClientEntry);
+  idtype = va_arg(va, int);
+  entry = va_arg(va, void *);
   modei = va_arg(va, uint32);
   (void)va_arg(va, char *);
   (void)va_arg(va, char *);
@@ -311,10 +314,19 @@ static void event_cmode(SILC_SERVER_REC *server, va_list va)
     signal_emit("channel mode changed", 1, chanrec);
   }
   
-  printformat_module("fe-common/silc", server, channel->channel_name,
-                    MSGLEVEL_MODES, SILCTXT_CHANNEL_CMODE,
-                    channel->channel_name, mode ? mode : "removed all",
-                    client->nickname);
+  if (idtype == SILC_ID_CLIENT) {
+    client = (SilcClientEntry)entry;
+    printformat_module("fe-common/silc", server, channel->channel_name,
+                      MSGLEVEL_MODES, SILCTXT_CHANNEL_CMODE,
+                      channel->channel_name, mode ? mode : "removed all",
+                      client->nickname);
+  } else {
+    server_entry = (SilcServerEntry)entry;
+    printformat_module("fe-common/silc", server, channel->channel_name,
+                      MSGLEVEL_MODES, SILCTXT_CHANNEL_CMODE,
+                      channel->channel_name, mode ? mode : "removed all",
+                      server_entry->server_name);
+  }
   
   g_free(mode);
 }
@@ -782,8 +794,7 @@ static void command_key(const char *data, SILC_SERVER_REC *server,
   SilcClientConnection conn = server->conn;
   SilcClientEntry client_entry = NULL;
   SilcChannelEntry channel_entry = NULL;
-  uint32 num = 0;
-  char *nickname = NULL, *serv = NULL, *tmp;
+  char *nickname = NULL, *tmp;
   int command = 0, port = 0, type = 0;
   char *hostname = NULL;
   KeyInternal internal = NULL;
@@ -824,7 +835,7 @@ static void command_key(const char *data, SILC_SERVER_REC *server,
       nickname = "*";
     } else {
       /* Parse the typed nickname. */
-      if (!silc_parse_nickname(argv[2], &nickname, &serv, &num)) {
+      if (!silc_parse_userfqdn(argv[2], &nickname, NULL)) {
        printformat_module("fe-common/silc", server, NULL,
                           MSGLEVEL_CRAP, SILCTXT_BAD_NICK, argv[2]);
        return;
@@ -832,7 +843,7 @@ static void command_key(const char *data, SILC_SERVER_REC *server,
       
       /* Find client entry */
       client_entry = silc_idlist_get_client(silc_client, conn, nickname, 
-                                           serv, num, TRUE);
+                                           argv[2], TRUE);
       if (!client_entry) {
        KeyGetClients inter = silc_calloc(1, sizeof(*inter));
        inter->server = server;
@@ -856,10 +867,7 @@ static void command_key(const char *data, SILC_SERVER_REC *server,
 
     if (argv[2][0] == '*') {
       if (!conn->current_channel) {
-       if (nickname)
-         silc_free(nickname);
-       if (serv)
-         silc_free(serv);
+       silc_free(nickname);
        cmd_return_error(CMDERR_NOT_JOINED);
       }
       name = conn->current_channel->channel_name;
@@ -869,10 +877,7 @@ static void command_key(const char *data, SILC_SERVER_REC *server,
 
     channel_entry = silc_client_get_channel(silc_client, conn, name);
     if (!channel_entry) {
-      if (nickname)
-       silc_free(nickname);
-      if (serv)
-       silc_free(serv);
+      silc_free(nickname);
       cmd_return_error(CMDERR_NOT_JOINED);
     }
   }
@@ -1158,10 +1163,15 @@ static void command_key(const char *data, SILC_SERVER_REC *server,
   }
 
  out:
-  if (nickname)
-    silc_free(nickname);
-  if (serv)
-    silc_free(serv);
+  silc_free(nickname);
+}
+
+/* Lists locally saved client and server public keys. */
+
+static void command_listkeys(const char *data, SILC_SERVER_REC *server,
+                            WI_ITEM_REC *item)
+{
+
 }
 
 void silc_channels_init(void)
@@ -1190,6 +1200,7 @@ void silc_channels_init(void)
   command_bind("notice", MODULE_NAME, (SIGNAL_FUNC) command_notice);
   command_bind("away", MODULE_NAME, (SIGNAL_FUNC) command_away);
   command_bind("key", MODULE_NAME, (SIGNAL_FUNC) command_key);
+  command_bind("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys);
 
   silc_nicklist_init();
 }
@@ -1222,6 +1233,7 @@ void silc_channels_deinit(void)
   command_unbind("notice", (SIGNAL_FUNC) command_notice);
   command_unbind("away", (SIGNAL_FUNC) command_away);
   command_unbind("key", (SIGNAL_FUNC) command_key);
+  command_unbind("listkeys", (SIGNAL_FUNC) command_listkeys);
 
   silc_nicklist_deinit();
 }