aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormilo <milo@r0ot.me>2010-08-12 23:25:20 +0200
committerAndreas Schneider <asn@cynapses.org>2010-08-13 11:17:09 +0200
commite533c3f33b83a7a7fd820bf1fee91c53b11228c1 (patch)
tree64a339474bcf96f2c653c329b4783d2ba1fc0487
parent41ab19e1d05ff598cf3f2fc3aca8631e4403dd93 (diff)
downloadlibssh-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.h2
-rw-r--r--libssh/client.c17
-rw-r--r--libssh/server.c5
-rw-r--r--libssh/session.c17
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: */