server: Fix missing socket close notification.
Signed-off-by: Andreas Schneider <asn@cynapses.org>
Этот коммит содержится в:
родитель
41ab19e1d0
Коммит
e533c3f33b
@ -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_ */
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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: */
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user