updates.
[silc.git] / apps / irssi / src / silc / core / silc-channels.c
index 25d6b6a4e122e12375c9c3a312414d9a4a5831fc..5e52a6bbe861439e36576db8a9f574259a9bfa77 100644 (file)
@@ -242,17 +242,19 @@ static void event_signoff(SILC_SERVER_REC *server, va_list va)
 static void event_topic(SILC_SERVER_REC *server, va_list va)
 {
   SILC_CHANNEL_REC *chanrec;
+  void *entry;
   SilcClientEntry client;
+  SilcServerEntry server_entry;
   SilcChannelEntry channel;
   char *topic;
   char userhost[256];
+  SilcIdType idtype;
 
-  client = va_arg(va, SilcClientEntry);
+  idtype = va_arg(va, int);
+  entry = va_arg(va, void *);
   topic = va_arg(va, char *);
   channel = va_arg(va, SilcChannelEntry);
 
-  silc_server_free_ftp(server, client);
-
   chanrec = silc_channel_find_entry(server, channel);
   if (chanrec != NULL) {
     g_free_not_null(chanrec->topic);
@@ -260,11 +262,23 @@ static void event_topic(SILC_SERVER_REC *server, va_list va)
     signal_emit("channel topic changed", 1, chanrec);
   }
 
-  memset(userhost, 0, sizeof(userhost));
-  snprintf(userhost, sizeof(userhost) - 1, "%s@%s",
-          client->username, client->hostname);
-  signal_emit("message topic", 5, server, channel->channel_name,
-             topic, client->nickname, userhost);
+  if (idtype == SILC_ID_CLIENT) {
+    client = (SilcClientEntry)entry;
+    memset(userhost, 0, sizeof(userhost));
+    snprintf(userhost, sizeof(userhost) - 1, "%s@%s",
+            client->username, client->hostname);
+    signal_emit("message topic", 5, server, channel->channel_name,
+               topic, client->nickname, userhost);
+  } else if (idtype == SILC_ID_SERVER) {
+    server_entry = (SilcServerEntry)entry;
+    signal_emit("message topic", 5, server, channel->channel_name,
+               topic, server_entry->server_name, 
+               server_entry->server_name);
+  } else {
+    channel = (SilcChannelEntry)entry;
+    signal_emit("message topic", 5, server, channel->channel_name,
+               topic, channel->channel_name, channel->channel_name);
+  }
 }
 
 /*
@@ -459,6 +473,8 @@ static void event_server_signoff(SILC_SERVER_REC *server, va_list va)
                clients[i]->username ? userhost : "", 
                "server signoff");
 
+    silc_server_free_ftp(server, clients[i]);
+
     nicks = nicklist_get_same_unique(SERVER(server), clients[i]);
     for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
       CHANNEL_REC *channel = tmp->data;