From e533c3f33b83a7a7fd820bf1fee91c53b11228c1 Mon Sep 17 00:00:00 2001 From: milo Date: Thu, 12 Aug 2010 23:25:20 +0200 Subject: server: Fix missing socket close notification. Signed-off-by: Andreas Schneider --- libssh/client.c | 17 +---------------- libssh/server.c | 5 +---- libssh/session.c | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 21 deletions(-) (limited to 'libssh') diff --git a/libssh/client.c b/libssh/client.c index 0c87526..7efe362 100644 --- a/libssh/client.c +++ b/libssh/client.c @@ -64,21 +64,6 @@ static void socket_callback_connected(int code, int errno_code, void *user){ leave_function(); } -/** - * @internal - * @brief Callback to be called when the socket received an exception code. - * @param user is a pointer to session - */ -static void socket_callback_exception(int code, int errno_code, void *user){ - ssh_session session=(ssh_session)user; - enter_function(); - ssh_log(session,SSH_LOG_RARE,"Socket exception callback: %d (%d)",code, errno_code); - session->session_state=SSH_SESSION_STATE_ERROR; - ssh_set_error(session,SSH_FATAL,"Socket error: %s",strerror(errno_code)); - session->ssh_connection_callback(session); - leave_function(); -} - /** * @internal * @@ -701,7 +686,7 @@ int ssh_connect(ssh_session session) { ssh_socket_set_callbacks(session->socket,&session->socket_callbacks); session->socket_callbacks.connected=socket_callback_connected; session->socket_callbacks.data=callback_receive_banner; - session->socket_callbacks.exception=socket_callback_exception; + session->socket_callbacks.exception=ssh_socket_exception_callback; session->socket_callbacks.userdata=session; if (session->fd != SSH_INVALID_SOCKET) { ssh_socket_set_fd(session->socket, session->fd); diff --git a/libssh/server.c b/libssh/server.c index f6ddf3d..3e73ab9 100644 --- a/libssh/server.c +++ b/libssh/server.c @@ -598,7 +598,6 @@ static void ssh_server_connection_callback(ssh_session session){ leave_function(); } - /** * @internal * @@ -765,9 +764,7 @@ int ssh_handle_key_exchange(ssh_session session) { session->session_state = SSH_SESSION_STATE_SOCKET_CONNECTED; ssh_socket_set_callbacks(session->socket,&session->socket_callbacks); session->socket_callbacks.data=callback_receive_banner; -#if 0 - session->socket_callbacks.exception=socket_callback_exception; -#endif + session->socket_callbacks.exception=ssh_socket_exception_callback; session->socket_callbacks.userdata=session; rc = server_set_kex(session); diff --git a/libssh/session.c b/libssh/session.c index 06e0a25..a70826f 100644 --- a/libssh/session.c +++ b/libssh/session.c @@ -500,6 +500,21 @@ SSH_PACKET_CALLBACK(ssh_packet_ignore_callback){ return SSH_PACKET_USED; } +/** + * @internal + * @brief Callback to be called when the socket received an exception code. + * @param user is a pointer to session + */ +void ssh_socket_exception_callback(int code, int errno_code, void *user){ + ssh_session session=(ssh_session)user; + enter_function(); + ssh_log(session,SSH_LOG_RARE,"Socket exception callback: %d (%d)",code, errno_code); + session->session_state=SSH_SESSION_STATE_ERROR; + ssh_set_error(session,SSH_FATAL,"Socket error: %s",strerror(errno_code)); + session->ssh_connection_callback(session); + leave_function(); +} + /* @} */ -/* vim: set ts=2 sw=2 et cindent: */ +/* vim: set ts=4 sw=4 et cindent: */ -- cgit v1.2.3