From fe51f9c7662b7391f80953bedc4fe61b89013913 Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Thu, 12 Jun 2008 20:14:17 +0000 Subject: big changes : Some documentation, and a new logging system. some work must be done to get rid of the infamous ssh_say() git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@166 7dcaeef0-15fb-0310-b436-a5af3365683c --- include/libssh/libssh.h | 18 +++++++++++++----- include/libssh/priv.h | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index f0114f88..c7f0d5c0 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -33,6 +33,7 @@ typedef unsigned long long uint64_t; #endif #ifndef _WIN32 #include /* for fd_set * */ +#include #endif #ifdef _WIN32 #include @@ -123,11 +124,15 @@ void ssh_say(int priority,char *format,...); void ssh_set_verbosity(int num); /* There is a verbosity level */ - /* 3 : packet level */ - /* 2 : protocol level */ - /* 1 : functions level */ - /* 0 : important messages only */ - /* -1 : no messages */ + +#define SSH_LOG_NOLOG 0 // no log +#define SSH_LOG_RARE 1 // rare conditions +#define SSH_LOG_ENTRY 2 // user-accessible entrypoints +#define SSH_LOG_PACKET 3 // packet id and size +#define SSH_LOG_FUNCTIONS 4 // every function in and return + +/* log.c */ +void ssh_log(SSH_SESSION *session, int prioriry, char *format, ...); /* session.c */ SSH_SESSION *ssh_new(); @@ -240,6 +245,9 @@ void ssh_options_allow_ssh1(SSH_OPTIONS *opt, int allow); void ssh_options_allow_ssh2(SSH_OPTIONS *opt, int allow); void ssh_options_set_dsa_server_key(SSH_OPTIONS *opt, char *dsakey); void ssh_options_set_rsa_server_key(SSH_OPTIONS *opt, char *rsakey); +void ssh_options_set_log_function(SSH_OPTIONS *opt, + void (*callback)(const char *message, SSH_SESSION *session, int verbosity )); +void ssh_options_set_log_verbosity(SSH_OPTIONS *opt, int verbosity); /* buffer.c */ diff --git a/include/libssh/priv.h b/include/libssh/priv.h index fa8ba3c2..d5aeda82 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -237,6 +237,8 @@ struct ssh_options_struct { int ssh1allowed; 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 }; typedef struct ssh_crypto_struct { @@ -355,6 +357,8 @@ struct ssh_session { int auth_methods; int hostkeys; /* contains type of host key wanted by client, in server impl */ struct ssh_message *ssh_message; /* ssh message */ + int log_verbosity; /*cached copy of the option structure */ + int log_indent; /* indentation level in enter_function logs */ }; struct ssh_kbdint { @@ -612,6 +616,27 @@ int channel_write1(CHANNEL *channel, void *data, int len); int ssh_handle_packets(SSH_SESSION *session); +/* log.c */ + +#define _enter_function(sess) \ + do {\ + if((sess)->log_verbosity >= SSH_LOG_FUNCTIONS){ \ + ssh_log((sess),SSH_LOG_FUNCTIONS,"entering function %s line %d in " __FILE__ , __FUNCTION__,__LINE__);\ + (sess)->log_indent++; \ + } \ + } while(0) + +#define _leave_function(sess) \ + do { \ + if((sess)->log_verbosity >= SSH_LOG_FUNCTIONS){ \ + (sess)->log_indent--; \ + ssh_log((sess),SSH_LOG_FUNCTIONS,"leaving function %s line %d in " __FILE__ , __FUNCTION__,__LINE__);\ + }\ + } while(0) + +#define enter_function() _enter_function(session) +#define leave_function() _leave_function(session) + #ifdef HAVE_LIBGCRYPT /* gcrypt_missing.c */ int my_gcry_dec2bn(bignum *bn, const char *data); -- cgit v1.2.3