diff options
-rw-r--r-- | include/libssh/sftp.h | 7 | ||||
-rw-r--r-- | src/sftp.c | 26 |
2 files changed, 33 insertions, 0 deletions
diff --git a/include/libssh/sftp.h b/include/libssh/sftp.h index 3750e0c6..774a4bac 100644 --- a/include/libssh/sftp.h +++ b/include/libssh/sftp.h @@ -853,6 +853,13 @@ LIBSSH_API sftp_session sftp_server_new(ssh_session session, ssh_channel chan); * @return 0 on success, < 0 on error. */ LIBSSH_API int sftp_server_init(sftp_session sftp); + +/** + * @brief Close and deallocate a sftp server session. + * + * @param sftp The sftp session handle to free. + */ +LIBSSH_API void sftp_server_free(sftp_session sftp); #endif /* WITH_SERVER */ /* this is not a public interface */ @@ -298,6 +298,32 @@ int sftp_server_init(sftp_session sftp){ return 0; } + +void sftp_server_free(sftp_session sftp) +{ + sftp_request_queue ptr; + + if (sftp == NULL) { + return; + } + + ptr = sftp->queue; + while(ptr) { + sftp_request_queue old; + sftp_message_free(ptr->message); + old = ptr->next; + SAFE_FREE(ptr); + ptr = old; + } + + SAFE_FREE(sftp->handles); + SSH_BUFFER_FREE(sftp->read_packet->payload); + SAFE_FREE(sftp->read_packet); + + sftp_ext_free(sftp->ext); + + SAFE_FREE(sftp); +} #endif /* WITH_SERVER */ void sftp_free(sftp_session sftp) |