summaryrefslogtreecommitdiffstats
path: root/libssh/client.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-16 08:53:57 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-16 08:53:57 +0000
commitc608883205b986e8c5192919e7c1f44715b5bb31 (patch)
tree4f79d636f6bd04baed456097f95728da014f7efd /libssh/client.c
parentc8269682fca0b4ce1bc1ed99fc69702c9ad365bd (diff)
downloadlibssh-c608883205b986e8c5192919e7c1f44715b5bb31.tar.gz
libssh-c608883205b986e8c5192919e7c1f44715b5bb31.tar.xz
libssh-c608883205b986e8c5192919e7c1f44715b5bb31.zip
Improve ssh_disconnect().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@490 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/client.c')
-rw-r--r--libssh/client.c57
1 files changed, 41 insertions, 16 deletions
diff --git a/libssh/client.c b/libssh/client.c
index b3b06ecf..09f522ae 100644
--- a/libssh/client.c
+++ b/libssh/client.c
@@ -586,24 +586,49 @@ char *ssh_get_issue_banner(SSH_SESSION *session) {
return string_to_char(session->banner);
}
-/** \brief disconnect from a session (client or server)
- * \param session ssh session
+/**
+ * @brief Disconnect from a session (client or server).
+ *
+ * @param session The SSH session to disconnect.
*/
-void ssh_disconnect(SSH_SESSION *session){
- STRING *str;
- enter_function();
- if(ssh_socket_is_open(session->socket)) {
- buffer_add_u8(session->out_buffer,SSH2_MSG_DISCONNECT);
- buffer_add_u32(session->out_buffer,htonl(SSH2_DISCONNECT_BY_APPLICATION));
- str=string_from_char("Bye Bye");
- buffer_add_ssh_string(session->out_buffer,str);
- free(str);
- packet_send(session);
- ssh_socket_close(session->socket);
- }
- session->alive=0;
+void ssh_disconnect(SSH_SESSION *session) {
+ STRING *str = NULL;
+
+ enter_function();
+
+ if (session == NULL) {
leave_function();
- ssh_cleanup(session);
+ return;
+ }
+
+ if (ssh_socket_is_open(session->socket)) {
+ if (buffer_add_u8(session->out_buffer, SSH2_MSG_DISCONNECT) < 0) {
+ goto error;
+ }
+ if (buffer_add_u32(session->out_buffer,
+ htonl(SSH2_DISCONNECT_BY_APPLICATION)) < 0) {
+ goto error;
+ }
+
+ str = string_from_char("Bye Bye");
+ if (str == NULL) {
+ goto error;
+ }
+
+ if (buffer_add_ssh_string(session->out_buffer,str) < 0) {
+ string_free(str);
+ goto error;
+ }
+ string_free(str);
+
+ packet_send(session);
+ ssh_socket_close(session->socket);
+ }
+ session->alive = 0;
+
+error:
+ leave_function();
+ ssh_cleanup(session);
}
const char *ssh_copyright(void) {