diff --git a/include/libssh/session.h b/include/libssh/session.h index 7e377021..1d6830c3 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 0c875260..7efe3627 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 f6ddf3dd..3e73ab9d 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 06e0a259..a70826f6 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: */