Merge Irssi 0.8.16-rc1
[silc.git] / apps / irssi / src / silc / core / silc-servers.c
index 1c121385f7ca8d816450b04ffc087f43c0a539c0..c1f2054ebe6bb6ac7c7187e14bbb8f910aceef94 100644 (file)
@@ -1,7 +1,7 @@
 /*
   silc-server.c : irssi
 
-  Copyright (C) 2000 - 2007 Timo Sirainen
+  Copyright (C) 2000 - 2008 Timo Sirainen
                             Pekka Riikonen <priikone@silcnet.org>
 
   This program is free software; you can redistribute it and/or modify
@@ -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",
@@ -292,12 +298,9 @@ static void silc_connect_cb(SilcClient client,
     /* We have successfully connected to server */
 
     /* Enable queueing until we have our requested nick */
-    if (((opt_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))) &&
+    if (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_queue_enable(conn);
@@ -348,6 +351,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;
@@ -398,11 +407,11 @@ static void sig_connected_stream_created(SilcSocketStreamStatus status,
 
   /* Set connection parameters */
   memset(&params, 0, sizeof(params));
-  params.nickname = (opt_nickname ? (char *)opt_nickname :
-                    (char *)settings_get_str("nick"));
+  params.nickname = (char *)settings_get_str("nick");
   params.timeout_secs = settings_get_int("key_exchange_timeout_secs");
   params.rekey_secs = settings_get_int("key_exchange_rekey_secs");
   params.pfs = settings_get_bool("key_exchange_rekey_pfs");
+  params.context = server;
 
   /* Try to read detached session data and use it if found. */
   file = silc_get_session_filename(server);
@@ -454,7 +463,11 @@ static void sig_disconnected(SILC_SERVER_REC *server)
   if (!IS_SILC_SERVER(server))
     return;
 
-  silc_dlist_uninit(server->ftp_sessions);
+  /* If we have a prompt in progress, then abort it. */
+  if (server->prompt_op) {
+    silc_async_abort(server->prompt_op, NULL, NULL);
+    server->prompt_op = NULL;
+  }
 
   if (server->conn) {
     /* Close connection */
@@ -628,7 +641,7 @@ static void command_smsg(const char *data, SILC_SERVER_REC *server,
 {
   GHashTable *optlist;
   char *target, *origtarget, *msg;
-  void *free_arg;
+  void *free_arg = NULL;
   int free_ret, target_type;
 
   g_return_if_fail(data != NULL);
@@ -697,8 +710,10 @@ static void command_smsg(const char *data, SILC_SERVER_REC *server,
              "message signed_own_public" : "message signed_own_private", 4,
              server, msg, target, origtarget);
 out:
-  if (free_ret && target != NULL) g_free(target);
-  cmd_params_free(free_arg);
+  if (free_ret && target != NULL)
+    g_free(target);
+  if (free_arg)
+    cmd_params_free(free_arg);
 }
 
 /* FILE command */
@@ -732,7 +747,8 @@ static void silc_client_file_monitor(SilcClient client,
   if (status == SILC_CLIENT_FILE_MONITOR_CLOSED)
     return;
 
-  snprintf(fsize, sizeof(fsize) - 1, "%llu", ((filesize + 1023) / 1024));
+  snprintf(fsize, sizeof(fsize) - 1, "%llu",
+          (unsigned long long)((filesize + 1023) / 1024));
 
   silc_dlist_start(server->ftp_sessions);
   while ((ftp = silc_dlist_get(server->ftp_sessions)) != SILC_LIST_END) {