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);
|
int ssh_handle_packets(ssh_session session, int timeout);
|
||||||
|
|
||||||
|
void ssh_socket_exception_callback(int code, int errno_code, void *user);
|
||||||
|
|
||||||
#endif /* SESSION_H_ */
|
#endif /* SESSION_H_ */
|
||||||
|
@ -64,21 +64,6 @@ static void socket_callback_connected(int code, int errno_code, void *user){
|
|||||||
leave_function();
|
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
|
* @internal
|
||||||
*
|
*
|
||||||
@ -701,7 +686,7 @@ int ssh_connect(ssh_session session) {
|
|||||||
ssh_socket_set_callbacks(session->socket,&session->socket_callbacks);
|
ssh_socket_set_callbacks(session->socket,&session->socket_callbacks);
|
||||||
session->socket_callbacks.connected=socket_callback_connected;
|
session->socket_callbacks.connected=socket_callback_connected;
|
||||||
session->socket_callbacks.data=callback_receive_banner;
|
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;
|
session->socket_callbacks.userdata=session;
|
||||||
if (session->fd != SSH_INVALID_SOCKET) {
|
if (session->fd != SSH_INVALID_SOCKET) {
|
||||||
ssh_socket_set_fd(session->socket, session->fd);
|
ssh_socket_set_fd(session->socket, session->fd);
|
||||||
|
@ -598,7 +598,6 @@ static void ssh_server_connection_callback(ssh_session session){
|
|||||||
leave_function();
|
leave_function();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*
|
*
|
||||||
@ -765,9 +764,7 @@ int ssh_handle_key_exchange(ssh_session session) {
|
|||||||
session->session_state = SSH_SESSION_STATE_SOCKET_CONNECTED;
|
session->session_state = SSH_SESSION_STATE_SOCKET_CONNECTED;
|
||||||
ssh_socket_set_callbacks(session->socket,&session->socket_callbacks);
|
ssh_socket_set_callbacks(session->socket,&session->socket_callbacks);
|
||||||
session->socket_callbacks.data=callback_receive_banner;
|
session->socket_callbacks.data=callback_receive_banner;
|
||||||
#if 0
|
session->socket_callbacks.exception=ssh_socket_exception_callback;
|
||||||
session->socket_callbacks.exception=socket_callback_exception;
|
|
||||||
#endif
|
|
||||||
session->socket_callbacks.userdata=session;
|
session->socket_callbacks.userdata=session;
|
||||||
|
|
||||||
rc = server_set_kex(session);
|
rc = server_set_kex(session);
|
||||||
|
@ -500,6 +500,21 @@ SSH_PACKET_CALLBACK(ssh_packet_ignore_callback){
|
|||||||
return SSH_PACKET_USED;
|
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