diff options
| author | Nicolas Viennot <nicolas@viennot.biz> | 2013-11-06 20:08:11 -0500 |
|---|---|---|
| committer | Andreas Schneider <asn@cryptomilk.org> | 2013-11-24 23:21:04 +0100 |
| commit | 7b63fe2f2226a36421f56a6b880665c77e2ac825 (patch) | |
| tree | 5464cfa1be1079dbd355e1927c9bca5c8a84d5e0 /src | |
| parent | 3d934f3ddc6bffd87db7b924ea6e6add138ebf6f (diff) | |
| download | libssh-7b63fe2f2226a36421f56a6b880665c77e2ac825.tar.gz libssh-7b63fe2f2226a36421f56a6b880665c77e2ac825.tar.xz libssh-7b63fe2f2226a36421f56a6b880665c77e2ac825.zip | |
server: Add a ssh_send_keepalive() function.
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/server.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/server.c b/src/server.c index a8ecc6be..bc6dc6c9 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@openssh.com"); + 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: */ |
