Implemented CHANNEL_UMODE_QUEIT mode. Fixed fatal bugs in server.
[silc.git] / apps / irssi / src / silc / core / silc-channels.c
index 6235e6f012912f0cd12f669eb195342a758305ba..9c66e1f17796e4fbce080bb0d92a4de8f051eb63 100644 (file)
@@ -66,6 +66,8 @@ static void sig_channel_destroyed(SILC_CHANNEL_REC *channel)
 {
   if (!IS_SILC_CHANNEL(channel))
     return;
+  if (channel->server && channel->server->disconnected)
+    return;
 
   if (channel->server != NULL && !channel->left && !channel->kicked) {
     /* destroying channel record without actually
@@ -329,6 +331,7 @@ static void command_away(const char *data, SILC_SERVER_REC *server,
 
     printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, 
                       SILCTXT_UNSET_AWAY);
+    server->usermode_away = FALSE;
   } else {
     /* Set the away message */
     silc_client_set_away_message(silc_client, server->conn, (char *)data);
@@ -336,6 +339,7 @@ static void command_away(const char *data, SILC_SERVER_REC *server,
 
     printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, 
                       SILCTXT_SET_AWAY, data);
+    server->usermode_away = TRUE;
   }
 
   signal_emit("away mode changed", 1, server);
@@ -403,6 +407,17 @@ static void keyagr_completion(SilcClient client,
     printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
                       SILCTXT_KEY_AGREEMENT_ABORTED, client_entry->nickname);
     break;
+
+  case SILC_KEY_AGREEMENT_ALREADY_STARTED:
+    printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
+                      SILCTXT_KEY_AGREEMENT_ALREADY_STARTED,
+                      client_entry->nickname);
+    break;
+    
+  case SILC_KEY_AGREEMENT_SELF_DENIED:
+    printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
+                      SILCTXT_KEY_AGREEMENT_SELF_DENIED);
+    break;
     
   default:
     break;