Merged silc_1_1_branch to trunk.
[silc.git] / apps / irssi / src / silc / core / silc-servers.c
index ce5b6e02a66f84917885e4837e4fbd29f3e8441a..e16fb02cdc056fef1116a982f49259c3bf0d7483 100644 (file)
@@ -102,9 +102,14 @@ static void silc_send_msg_clients(SilcClient client,
   clients = silc_client_get_clients_local(silc_client, server->conn,
                                          rec->nick, FALSE);
   if (!clients) {
-    printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
-             "%s: There is no such client (did you mean %s?)", rec->nick,
-             target->nickname);
+    if (strchr(rec->nick, '@') && target->server)
+      printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+               "%s: There is no such client (did you mean %s@%s?)", rec->nick,
+               target->nickname, target->server);
+    else
+      printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+               "%s: There is no such client (did you mean %s?)", rec->nick,
+               target->nickname);
     goto out;
   }
 
@@ -275,6 +280,7 @@ static void silc_connect_cb(SilcClient client,
                            void *context)
 {
   SILC_SERVER_REC *server = context;
+  FtpSession ftp;
   char *file;
 
   SILC_LOG_DEBUG(("Connection callback %p, status %d, error %d, message %s",
@@ -293,10 +299,13 @@ static void silc_connect_cb(SilcClient client,
 
     /* Enable queueing until we have our requested nick */
     if (((opt_nickname &&
-         silc_utf8_strcasecmp(opt_nickname, conn->local_entry->nickname)) ||
+         !silc_utf8_strcasecmp(opt_nickname,
+                               conn->local_entry->nickname)) ||
         (settings_get_str("nick") &&
-         silc_utf8_strcasecmp(settings_get_str("nick"), conn->local_entry->nickname))) &&
-       !silc_utf8_strcasecmp(conn->local_entry->nickname, conn->local_entry->username))
+         !silc_utf8_strcasecmp(settings_get_str("nick"),
+                               conn->local_entry->nickname))) &&
+       silc_utf8_strcasecmp(conn->local_entry->nickname,
+                            conn->local_entry->username))
       silc_queue_enable(conn);
 
     /* Put default attributes */
@@ -345,6 +354,12 @@ static void silc_connect_cb(SilcClient client,
               silc_get_status_message(error), error,
               message ? message : "");
 
+    /* Close FTP sessions */
+    silc_dlist_start(server->ftp_sessions);
+    while ((ftp = silc_dlist_get(server->ftp_sessions)))
+      silc_client_file_close(client, conn, ftp->session_id);
+    silc_dlist_uninit(server->ftp_sessions);
+
     if (server->conn)
       server->conn->context = NULL;
     server->conn = NULL;
@@ -451,8 +466,6 @@ static void sig_disconnected(SILC_SERVER_REC *server)
   if (!IS_SILC_SERVER(server))
     return;
 
-  silc_dlist_uninit(server->ftp_sessions);
-
   if (server->conn) {
     /* Close connection */
     silc_client_close_connection(silc_client, server->conn);
@@ -467,9 +480,11 @@ static void sig_disconnected(SILC_SERVER_REC *server)
   }
 
   /* SILC closes the handle */
-  g_io_channel_unref(net_sendbuffer_handle(server->handle));
-  net_sendbuffer_destroy(server->handle, FALSE);
-  server->handle = NULL;
+  if (server->handle) {
+    g_io_channel_unref(net_sendbuffer_handle(server->handle));
+    net_sendbuffer_destroy(server->handle, FALSE);
+    server->handle = NULL;
+  }
 }
 
 SERVER_REC *silc_server_init_connect(SERVER_CONNECT_REC *conn)