Show the session ID in the file transmision list. Remove
authorPekka Riikonen <priikone@silcnet.org>
Wed, 12 Nov 2003 09:39:00 +0000 (09:39 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 12 Nov 2003 09:39:00 +0000 (09:39 +0000)
session from list that failed to transfer.  Switch the current
session automatically after transmission, and in errors, to new
session if other sessions exists in the transfer list

apps/irssi/src/fe-common/silc/module-formats.c
apps/irssi/src/silc/core/silc-servers.c

index ff2675bdccf151fe6f37b41bb7d7c7b1800af404..ba8cdfcb319c00d06a4aaf32834d9c508f6d1856 100644 (file)
@@ -178,7 +178,7 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "file_na", "No file transfers available", 0 },
        { "file_client_na", "No file transfer offered by {nick $0}", 1, { 0 } },
        { "file_show_header", "File transfers", 0 },
-       { "file_show_line", "  $0 $1: $2kB of $3kB ($4%%) - $5kB/s - $6", 7, { 0, 0, 1, 1, 1, 3, 0 } },
+       { "file_show_line", "  $0 [$1] $2: $3kB of $4kB ($5%%) - $6kB/s - $7", 7, { 0, 1, 0, 1, 1, 1, 3, 0 } },
        { "file_already_started", "File transfer already started with {nick $0}", 1, { 0  } },
        { "file_error", "Error during file transfer with {nick $0}", 1, { 0 } },
        { "file_error_no_such_file", "Error during file transfer with {nick $0}: $1: No such file", 2, { 0, 0 } },
index d5885194e2a284ca8866d535f4b1597d93db8dd3..db57213d2f9eb7b6f7506862878f209b79a48ae1 100644 (file)
@@ -207,7 +207,7 @@ void silc_send_mime(SILC_SERVER_REC *server, int channel, const char *to,
                                     unescaped_data, unescaped_data_len, TRUE);
   } else {
     silc_send_msg(server, (char *)to, unescaped_data, unescaped_data_len,
-                 SILC_MESSAGE_FLAG_DATA | 
+                 SILC_MESSAGE_FLAG_DATA |
                  (sign ? SILC_MESSAGE_FLAG_SIGNED : 0));
 
   }
@@ -628,9 +628,12 @@ static void silc_client_file_monitor(SilcClient client,
     silc_schedule_task_add(silc_client->schedule, 0,
                           silc_client_file_close_later, ftp,
                           1, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);
-    if (ftp == server->current_session)
-      server->current_session = NULL;
     silc_dlist_del(server->ftp_sessions, ftp);
+    if (ftp == server->current_session) {
+      server->current_session = NULL;
+      silc_dlist_start(server->ftp_sessions);
+      server->current_session = silc_dlist_get(server->ftp_sessions);
+    }
   }
 
   if (status == SILC_CLIENT_FILE_MONITOR_KEY_AGREEMENT) {
@@ -665,9 +668,13 @@ static void silc_client_file_monitor(SilcClient client,
       silc_schedule_task_add(silc_client->schedule, 0,
                             silc_client_file_close_later, ftp,
                             1, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);
-      if (ftp == server->current_session)
-       server->current_session = NULL;
       silc_dlist_del(server->ftp_sessions, ftp);
+      if (ftp == server->current_session) {
+       server->current_session = NULL;
+       silc_dlist_start(server->ftp_sessions);
+       server->current_session = silc_dlist_get(server->ftp_sessions);
+      }
+
     }
   }
 
@@ -686,9 +693,13 @@ static void silc_client_file_monitor(SilcClient client,
       silc_schedule_task_add(silc_client->schedule, 0,
                             silc_client_file_close_later, ftp,
                             1, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);
-      if (ftp == server->current_session)
-       server->current_session = NULL;
       silc_dlist_del(server->ftp_sessions, ftp);
+      if (ftp == server->current_session) {
+       server->current_session = NULL;
+       silc_dlist_start(server->ftp_sessions);
+       server->current_session = silc_dlist_get(server->ftp_sessions);
+      }
+
     }
   }
 }
@@ -884,10 +895,21 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
          printformat_module("fe-common/silc", server, NULL,
                             MSGLEVEL_CRAP, SILCTXT_FILE_ALREADY_STARTED,
                             server->current_session->client_entry->nickname);
-       else
+       else {
          printformat_module("fe-common/silc", server, NULL,
                             MSGLEVEL_CRAP, SILCTXT_FILE_CLIENT_NA,
                             server->current_session->client_entry->nickname);
+
+         silc_client_file_close(silc_client, conn,
+                                server->current_session->session_id);
+         silc_dlist_del(server->ftp_sessions, server->current_session);
+         silc_free(server->current_session->filepath);
+         silc_free(server->current_session);
+         server->current_session = NULL;
+
+         silc_dlist_start(server->ftp_sessions);
+         server->current_session = silc_dlist_get(server->ftp_sessions);
+       }
       }
 
       goto out;
@@ -904,10 +926,20 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
            printformat_module("fe-common/silc", server, NULL,
                               MSGLEVEL_CRAP, SILCTXT_FILE_ALREADY_STARTED,
                               client_entry->nickname);
-         else
+         else {
            printformat_module("fe-common/silc", server, NULL,
                               MSGLEVEL_CRAP, SILCTXT_FILE_CLIENT_NA,
                               client_entry->nickname);
+           silc_client_file_close(silc_client, conn, ftp->session_id);
+           silc_dlist_del(server->ftp_sessions, ftp);
+           if (ftp == server->current_session) {
+             server->current_session = NULL;
+             silc_dlist_start(server->ftp_sessions);
+             server->current_session = silc_dlist_get(server->ftp_sessions);
+           }
+           silc_free(ftp->filepath);
+           silc_free(ftp);
+         }
        }
        break;
       }
@@ -963,6 +995,9 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
       silc_free(server->current_session->filepath);
       silc_free(server->current_session);
       server->current_session = NULL;
+
+      silc_dlist_start(server->ftp_sessions);
+      server->current_session = silc_dlist_get(server->ftp_sessions);
       goto out;
     }
 
@@ -974,9 +1009,12 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
                           MSGLEVEL_CRAP, SILCTXT_FILE_CLOSED,
                           client_entry->nickname,
                           ftp->filepath ? ftp->filepath : "[N/A]");
-       if (ftp == server->current_session)
-         server->current_session = NULL;
        silc_dlist_del(server->ftp_sessions, ftp);
+       if (ftp == server->current_session) {
+         server->current_session = NULL;
+         silc_dlist_start(server->ftp_sessions);
+         server->current_session = silc_dlist_get(server->ftp_sessions);
+       }
        silc_free(ftp->filepath);
        silc_free(ftp);
        break;
@@ -1007,6 +1045,7 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
       printformat_module("fe-common/silc", server, NULL,
                         MSGLEVEL_CRAP, SILCTXT_FILE_SHOW_LINE,
                         ftp->client_entry->nickname,
+                        ftp->session_id,
                         ftp->send ? "send" : "receive",
                         (SilcUInt32)(ftp->offset + 1023) / 1024,
                         (SilcUInt32)(ftp->filesize + 1023) / 1024,