diff options
author | milo <milo@r0ot.me> | 2010-08-12 23:25:20 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cynapses.org> | 2010-08-13 11:17:09 +0200 |
commit | e533c3f33b83a7a7fd820bf1fee91c53b11228c1 (patch) | |
tree | 64a339474bcf96f2c653c329b4783d2ba1fc0487 | |
parent | 41ab19e1d05ff598cf3f2fc3aca8631e4403dd93 (diff) | |
download | libssh-e533c3f33b83a7a7fd820bf1fee91c53b11228c1.tar.gz libssh-e533c3f33b83a7a7fd820bf1fee91c53b11228c1.tar.xz libssh-e533c3f33b83a7a7fd820bf1fee91c53b11228c1.zip |
server: Fix missing socket close notification.
Signed-off-by: Andreas Schneider <asn@cynapses.org>
-rw-r--r-- | include/libssh/session.h | 2 | ||||
-rw-r--r-- | libssh/client.c | 17 | ||||
-rw-r--r-- | libssh/server.c | 5 | ||||
-rw-r--r-- | libssh/session.c | 17 |
4 files changed, 20 insertions, 21 deletions
diff --git a/include/libssh/session.h b/include/libssh/session.h index 7e37702..1d6830c 100644 --- a/include/libssh/session.h +++ b/include/libssh/session.h @@ -148,4 +148,6 @@ struct ssh_session_struct { int ssh_handle_packets(ssh_session session, int timeout); +void ssh_socket_exception_callback(int code, int errno_code, void *user); + #endif /* SESSION_H_ */ diff --git a/libssh/client.c b/libssh/client.c index 0c87526..7efe362 100644 --- a/libssh/client.c +++ b/libssh/client.c @@ -66,21 +66,6 @@ static void socket_callback_connected(int code, int errno_code, void *user){ /** * @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 * * @brief Gets the banner from socket and saves it in session. * Updates the session state @@ -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: */ |