diff options
-rw-r--r-- | include/libssh/libssh.h | 5 | ||||
-rw-r--r-- | include/libssh/priv.h | 3 | ||||
-rw-r--r-- | libssh/log.c | 3 | ||||
-rw-r--r-- | libssh/options.c | 9 |
4 files changed, 13 insertions, 7 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 8da66a20..e7084013 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -376,6 +376,9 @@ LIBSSH_API int channel_get_exit_status(ssh_channel channel); typedef int (*ssh_auth_callback) (const char *prompt, char *buf, size_t len, int echo, int verify, void *userdata); +typedef void (*ssh_log_callback) (ssh_session session, int priority, + const char *message, void *userdata); + LIBSSH_API SSH_OPTIONS *ssh_options_new(void); LIBSSH_API SSH_OPTIONS *ssh_options_copy(SSH_OPTIONS *opt); LIBSSH_API void ssh_options_free(SSH_OPTIONS *opt); @@ -396,7 +399,7 @@ LIBSSH_API int ssh_options_set_timeout(SSH_OPTIONS *opt, long seconds, long usec LIBSSH_API int ssh_options_allow_ssh1(SSH_OPTIONS *opt, int allow); LIBSSH_API int ssh_options_allow_ssh2(SSH_OPTIONS *opt, int allow); LIBSSH_API int ssh_options_set_log_function(SSH_OPTIONS *opt, - void (*callback)(const char *message, SSH_SESSION *session, int verbosity)); + ssh_log_callback cb, void *userdata); LIBSSH_API int ssh_options_set_log_verbosity(SSH_OPTIONS *opt, int verbosity); LIBSSH_API int ssh_options_set_dsa_server_key(SSH_OPTIONS *opt, const char *dsakey); LIBSSH_API int ssh_options_set_rsa_server_key(SSH_OPTIONS *opt, const char *rsakey); diff --git a/include/libssh/priv.h b/include/libssh/priv.h index e103ce96..1d5414bf 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -296,7 +296,8 @@ struct ssh_options_struct { char *dsakey; char *rsakey; /* host key for server implementation */ int log_verbosity; - void (*log_function)(const char *message, SSH_SESSION *session, int verbosity); //log callback + ssh_log_callback log_function; //log callback + void *log_userdata; }; typedef struct ssh_crypto_struct { diff --git a/libssh/log.c b/libssh/log.c index b2f5f415..4a3b275b 100644 --- a/libssh/log.c +++ b/libssh/log.c @@ -56,7 +56,8 @@ void ssh_log(SSH_SESSION *session, int verbosity, const char *format, ...) { va_end(va); if (session->options->log_function) { - session->options->log_function(buffer, session, verbosity); + session->options->log_function(session, verbosity, buffer, + session->options->log_userdata); } else if (verbosity == SSH_LOG_FUNCTIONS) { if (session->log_indent > 255) { min = 255; diff --git a/libssh/options.c b/libssh/options.c index 755ef505..0fa3e895 100644 --- a/libssh/options.c +++ b/libssh/options.c @@ -762,13 +762,14 @@ int ssh_options_allow_ssh2(SSH_OPTIONS *opt, int allow) { * * @warning The message string may contain format string characters. */ -int ssh_options_set_log_function(SSH_OPTIONS *opt, - void (*callback)(const char *message, SSH_SESSION *session, int priority)) { - if (opt == NULL || callback == NULL) { +int ssh_options_set_log_function(SSH_OPTIONS *opt, ssh_log_callback cb, + void *userdata) { + if (opt == NULL || cb == NULL) { return -1; } - opt->log_function = callback; + opt->log_function = cb; + opt->log_userdata = userdata; return 0; } |