[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2] server: Add a ssh_send_keepalive() function
[Thread Prev] | [Thread Next]
- Subject: [PATCH v2] server: Add a ssh_send_keepalive() function
- From: Nicolas Viennot <nicolas@xxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 6 Nov 2013 20:08:11 -0500
- To: libssh@xxxxxxxxxx
--- include/libssh/server.h | 2 ++ src/server.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/libssh/server.h b/include/libssh/server.h index dbffecd..9d095fe 100644 --- a/include/libssh/server.h +++ b/include/libssh/server.h @@ -382,6 +382,8 @@ LIBSSH_API int ssh_channel_write_stderr(ssh_channel channel, const void *data, uint32_t len); +LIBSSH_API int ssh_send_keepalive(ssh_session session); + /* deprecated functions */ SSH_DEPRECATED LIBSSH_API int ssh_accept(ssh_session session); SSH_DEPRECATED LIBSSH_API int channel_write_stderr(ssh_channel channel, diff --git a/src/server.c b/src/server.c index 0b62776..8629c8b 100644 --- a/src/server.c +++ b/src/server.c @@ -1221,6 +1221,47 @@ int ssh_execute_message_callbacks(ssh_session session){ return SSH_OK; } +int ssh_send_keepalive(ssh_session session) +{ + struct ssh_string_struct *req; + int rc; + + rc = buffer_add_u8(session->out_buffer, SSH2_MSG_GLOBAL_REQUEST); + if (rc < 0) { + goto err; + } + + req = ssh_string_from_char("keepalive@xxxxxxxxxxx"); + if (req == NULL) { + goto err; + } + + rc = buffer_add_ssh_string(session->out_buffer, req); + ssh_string_free(req); + if (rc < 0) { + goto err; + } + + rc = buffer_add_u8(session->out_buffer, 1); + if (rc < 0) { + goto err; + } + + if (packet_send(session) == SSH_ERROR) { + goto err; + } + + ssh_handle_packets(session, 0); + + SSH_LOG(SSH_LOG_PACKET, "Sent a keepalive"); + return SSH_OK; + +err: + ssh_set_error_oom(session); + buffer_reinit(session->out_buffer); + return SSH_ERROR; +} + /** @} */ /* vim: set ts=4 sw=4 et cindent: */ -- 1.8.3.2
Archive administrator: postmaster@lists.cynapses.org