updartes.
[silc.git] / apps / irssi / src / silc / core / silc-servers.c
index e240c0b07913f883d9498c856f47bd6489d99534..cb41470edfca631dffacfee201f73dd5c8f692f6 100644 (file)
@@ -201,13 +201,9 @@ static void sig_connected(SILC_SERVER_REC *server)
   server->conn = conn;
        
   fd = g_io_channel_unix_get_fd(net_sendbuffer_handle(server->handle));
-  if (!silc_client_start_key_exchange(silc_client, conn, fd)) {
-    /* some internal error occured */
-    server_disconnect(SERVER(server));
-    signal_stop();
-    return;
-  }
+  silc_client_start_key_exchange(silc_client, conn, fd);
 
+  server->ftp_sessions = silc_dlist_init();
   server->isnickflag = isnickflag_func;
   server->ischannel = ischannel_func;
   server->get_nick_flags = get_nick_flags;
@@ -218,7 +214,9 @@ static void sig_disconnected(SILC_SERVER_REC *server)
 {
   if (!IS_SILC_SERVER(server))
     return;
-  
+
+  silc_dlist_uninit(server->ftp_sessions);
+
   if (server->conn && server->conn->sock != NULL) {
     silc_client_close_connection(silc_client, NULL, server->conn);
     
@@ -254,8 +252,6 @@ SILC_SERVER_REC *silc_server_connect(SILC_SERVER_CONNECT_REC *conn)
     return NULL;
   }
 
-  server->ftp_sessions = silc_dlist_init();
-
   return server;
 }
 
@@ -587,6 +583,7 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
   FtpSession ftp;
   char *local_ip = NULL;
   uint32 local_port = 0;
+  uint32 session_id;
 
   if (!server || !IS_SILC_SERVER(server) || !server->connected)
     cmd_return_error(CMDERR_NOT_CONNECTED);
@@ -646,22 +643,34 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
     if (argc >= 6)
       local_port = atoi(argv[5]);
 
-    ftp = silc_calloc(1, sizeof(*ftp));
-    ftp->session_id = 
+    ret = 
       silc_client_file_send(silc_client, conn, silc_client_file_monitor, 
                            server, local_ip, local_port, 
-                           client_entry, argv[2]);
+                           client_entry, argv[2], &session_id);
+    if (ret == SILC_CLIENT_FILE_OK) {
+      ftp = silc_calloc(1, sizeof(*ftp));
+      ftp->session_id = session_id;
 
-    printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
-                      SILCTXT_FILE_SEND, client_entry->nickname,
-                      argv[2]);
-
-    ftp->client_entry = client_entry;
-    ftp->filepath = strdup(argv[2]);
-    ftp->conn = conn;
-    ftp->send = TRUE;
-    silc_dlist_add(server->ftp_sessions, ftp);
-    server->current_session = ftp;
+      printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                        SILCTXT_FILE_SEND, client_entry->nickname,
+                        argv[2]);
+
+      ftp->client_entry = client_entry;
+      ftp->filepath = strdup(argv[2]);
+      ftp->conn = conn;
+      ftp->send = TRUE;
+      silc_dlist_add(server->ftp_sessions, ftp);
+      server->current_session = ftp;
+    } else {
+      if (ret == SILC_CLIENT_FILE_ALREADY_STARTED)
+       printformat_module("fe-common/silc", server, NULL,
+                          MSGLEVEL_CRAP, SILCTXT_FILE_ALREADY_STARTED,
+                          client_entry->nickname);
+      if (ret == SILC_CLIENT_FILE_NO_SUCH_FILE)
+       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                          SILCTXT_FILE_ERROR_NO_SUCH_FILE, 
+                          client_entry->nickname, argv[2]);
+    }
 
     break;