mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-11-30 13:01:23 +03:00
session: Added callback for the connection per session.
Signed-off-by: Andreas Schneider <asn@cynapses.org>
This commit is contained in:
@@ -168,7 +168,6 @@ SSH_PACKET_CALLBACK(ssh_packet_ignore_callback);
|
|||||||
/* client.c */
|
/* client.c */
|
||||||
|
|
||||||
int ssh_send_banner(ssh_session session, int is_server);
|
int ssh_send_banner(ssh_session session, int is_server);
|
||||||
void ssh_connection_callback(ssh_session session);
|
|
||||||
SSH_PACKET_CALLBACK(ssh_packet_dh_reply);
|
SSH_PACKET_CALLBACK(ssh_packet_dh_reply);
|
||||||
SSH_PACKET_CALLBACK(ssh_packet_newkeys);
|
SSH_PACKET_CALLBACK(ssh_packet_newkeys);
|
||||||
SSH_PACKET_CALLBACK(ssh_packet_service_accept);
|
SSH_PACKET_CALLBACK(ssh_packet_service_accept);
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ struct ssh_session_struct {
|
|||||||
int log_verbosity; /*cached copy of the option structure */
|
int log_verbosity; /*cached copy of the option structure */
|
||||||
int log_indent; /* indentation level in enter_function logs */
|
int log_indent; /* indentation level in enter_function logs */
|
||||||
|
|
||||||
|
void (*ssh_connection_callback)( struct ssh_session_struct *session);
|
||||||
ssh_callbacks callbacks; /* Callbacks to user functions */
|
ssh_callbacks callbacks; /* Callbacks to user functions */
|
||||||
struct ssh_packet_callbacks_struct default_packet_callbacks;
|
struct ssh_packet_callbacks_struct default_packet_callbacks;
|
||||||
struct ssh_list *packet_callbacks;
|
struct ssh_list *packet_callbacks;
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ static void socket_callback_connected(int code, int errno_code, void *user){
|
|||||||
session->session_state=SSH_SESSION_STATE_ERROR;
|
session->session_state=SSH_SESSION_STATE_ERROR;
|
||||||
ssh_set_error(session,SSH_FATAL,"%s",strerror(errno_code));
|
ssh_set_error(session,SSH_FATAL,"%s",strerror(errno_code));
|
||||||
}
|
}
|
||||||
ssh_connection_callback(session);
|
session->ssh_connection_callback(session);
|
||||||
leave_function();
|
leave_function();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ static void socket_callback_exception(int code, int errno_code, void *user){
|
|||||||
ssh_log(session,SSH_LOG_RARE,"Socket exception callback: %d (%d)",code, errno_code);
|
ssh_log(session,SSH_LOG_RARE,"Socket exception callback: %d (%d)",code, errno_code);
|
||||||
session->session_state=SSH_SESSION_STATE_ERROR;
|
session->session_state=SSH_SESSION_STATE_ERROR;
|
||||||
ssh_set_error(session,SSH_FATAL,"Socket error: %s",strerror(errno_code));
|
ssh_set_error(session,SSH_FATAL,"Socket error: %s",strerror(errno_code));
|
||||||
ssh_connection_callback(session);
|
session->ssh_connection_callback(session);
|
||||||
leave_function();
|
leave_function();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ static int callback_receive_banner(const void *data, size_t len, void *user) {
|
|||||||
session->serverbanner=str;
|
session->serverbanner=str;
|
||||||
session->session_state=SSH_SESSION_STATE_BANNER_RECEIVED;
|
session->session_state=SSH_SESSION_STATE_BANNER_RECEIVED;
|
||||||
ssh_log(session,SSH_LOG_PACKET,"Received banner: %s",str);
|
ssh_log(session,SSH_LOG_PACKET,"Received banner: %s",str);
|
||||||
ssh_connection_callback(session);
|
session->ssh_connection_callback(session);
|
||||||
leave_function();
|
leave_function();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -371,7 +371,7 @@ SSH_PACKET_CALLBACK(ssh_packet_newkeys){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
session->dh_handshake_state = DH_STATE_FINISHED;
|
session->dh_handshake_state = DH_STATE_FINISHED;
|
||||||
ssh_connection_callback(session);
|
session->ssh_connection_callback(session);
|
||||||
return SSH_PACKET_USED;
|
return SSH_PACKET_USED;
|
||||||
error:
|
error:
|
||||||
session->session_state=SSH_SESSION_STATE_ERROR;
|
session->session_state=SSH_SESSION_STATE_ERROR;
|
||||||
@@ -554,7 +554,7 @@ int ssh_service_request(ssh_session session, const char *service) {
|
|||||||
* @brief A function to be called each time a step has been done in the
|
* @brief A function to be called each time a step has been done in the
|
||||||
* connection.
|
* connection.
|
||||||
*/
|
*/
|
||||||
void ssh_connection_callback(ssh_session session){
|
static void ssh_client_connection_callback(ssh_session session){
|
||||||
int ssh1,ssh2;
|
int ssh1,ssh2;
|
||||||
enter_function();
|
enter_function();
|
||||||
switch(session->session_state){
|
switch(session->session_state){
|
||||||
@@ -696,6 +696,7 @@ int ssh_connect(ssh_session session) {
|
|||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
session->ssh_connection_callback = ssh_client_connection_callback;
|
||||||
session->session_state=SSH_SESSION_STATE_CONNECTING;
|
session->session_state=SSH_SESSION_STATE_CONNECTING;
|
||||||
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;
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ SSH_PACKET_CALLBACK(ssh_packet_kexinit){
|
|||||||
|
|
||||||
leave_function();
|
leave_function();
|
||||||
session->session_state=SSH_SESSION_STATE_KEXINIT_RECEIVED;
|
session->session_state=SSH_SESSION_STATE_KEXINIT_RECEIVED;
|
||||||
ssh_connection_callback(session);
|
session->ssh_connection_callback(session);
|
||||||
return SSH_PACKET_USED;
|
return SSH_PACKET_USED;
|
||||||
error:
|
error:
|
||||||
ssh_string_free(str);
|
ssh_string_free(str);
|
||||||
|
|||||||
Reference in New Issue
Block a user