From 057536801e89b0f0d01d976f662abadc553914b3 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Wed, 12 Nov 2003 09:39:00 +0000 Subject: [PATCH] Show the session ID in the file transmision list. Remove 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 --- .../irssi/src/fe-common/silc/module-formats.c | 2 +- apps/irssi/src/silc/core/silc-servers.c | 61 +++++++++++++++---- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/apps/irssi/src/fe-common/silc/module-formats.c b/apps/irssi/src/fe-common/silc/module-formats.c index ff2675bd..ba8cdfcb 100644 --- a/apps/irssi/src/fe-common/silc/module-formats.c +++ b/apps/irssi/src/fe-common/silc/module-formats.c @@ -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 } }, diff --git a/apps/irssi/src/silc/core/silc-servers.c b/apps/irssi/src/silc/core/silc-servers.c index d5885194..db57213d 100644 --- a/apps/irssi/src/silc/core/silc-servers.c +++ b/apps/irssi/src/silc/core/silc-servers.c @@ -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, -- 2.24.0