From 615f523d32118cae0aa4de48d38295d66405616d Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Mon, 15 Mar 2004 19:11:20 +0000 Subject: [PATCH] Destroy the file tranfer session with timeout. --- CHANGES | 8 ++++++++ lib/silcclient/client_ftp.c | 10 +++++++++- lib/silcsftp/sftp_server.c | 20 ++++++++++---------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index fac02d84..06fe0ee8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,11 @@ +Mon Mar 15 21:10:08 EET 2004 Pekka Riikonen + + * Destroy the file transfer session in silc_client_file_close + with timeout. Affected file lib/silcclient/client_ftp.c. + + * Call SFTP server monitor in READ and WRITE after the actual + operations. Affected file lib/silcsftp/sftp_server.c. + Wed Mar 10 21:30:02 EET 2004 Pekka Riikonen * Create one configure script from configure fragments diff --git a/lib/silcclient/client_ftp.c b/lib/silcclient/client_ftp.c index 42b987ca..3e71b5ab 100644 --- a/lib/silcclient/client_ftp.c +++ b/lib/silcclient/client_ftp.c @@ -1040,6 +1040,11 @@ silc_client_file_receive(SilcClient client, return SILC_CLIENT_FILE_OK; } +SILC_TASK_CALLBACK(silc_client_file_close_final) +{ + silc_client_ftp_session_free(context); +} + /* Closes file transmission session indicated by the `session_id'. If file transmission is being conducted it will be aborted automatically. This function is also used to close the session @@ -1076,7 +1081,10 @@ SilcClientFileError silc_client_file_close(SilcClient client, session->client_entry, session->session_id, session->filepath, session->monitor_context); - silc_client_ftp_session_free(session); + /* Destroy via timeout */ + silc_schedule_task_add(session->client->schedule, 0, + silc_client_file_close_final, session, + 0, 1, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL); return SILC_CLIENT_FILE_OK; } diff --git a/lib/silcsftp/sftp_server.c b/lib/silcsftp/sftp_server.c index f23d1e86..cbfbe43c 100644 --- a/lib/silcsftp/sftp_server.c +++ b/lib/silcsftp/sftp_server.c @@ -480,6 +480,11 @@ void silc_sftp_server_receive_process(SilcSFTP sftp, break; } + /* Read operation */ + server->fs->fs->sftp_read(server->fs->fs_context, sftp, + handle, offset, len, + silc_sftp_server_data, SILC_32_TO_PTR(id)); + /* Call monitor */ if (server->monitors & SILC_SFTP_MONITOR_READ && server->monitor) { mdata.offset = offset; @@ -487,11 +492,6 @@ void silc_sftp_server_receive_process(SilcSFTP sftp, (*server->monitor)(sftp, SILC_SFTP_MONITOR_READ, &mdata, server->monitor_context); } - - /* Read operation */ - server->fs->fs->sftp_read(server->fs->fs_context, sftp, - handle, offset, len, - silc_sftp_server_data, SILC_32_TO_PTR(id)); } break; @@ -525,6 +525,11 @@ void silc_sftp_server_receive_process(SilcSFTP sftp, break; } + /* Write operation */ + server->fs->fs->sftp_write(server->fs->fs_context, sftp, handle, offset, + (const unsigned char *)data, data_len, + silc_sftp_server_status, SILC_32_TO_PTR(id)); + /* Call monitor */ if (server->monitors & SILC_SFTP_MONITOR_WRITE && server->monitor) { mdata.offset = offset; @@ -532,11 +537,6 @@ void silc_sftp_server_receive_process(SilcSFTP sftp, (*server->monitor)(sftp, SILC_SFTP_MONITOR_WRITE, &mdata, server->monitor_context); } - - /* Write operation */ - server->fs->fs->sftp_write(server->fs->fs_context, sftp, handle, offset, - (const unsigned char *)data, data_len, - silc_sftp_server_status, SILC_32_TO_PTR(id)); } break; -- 2.43.0