From cb28473398efaf431be797a2c61fbec3b4119adb Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 14 Apr 2006 02:05:29 +0000 Subject: [PATCH] add logger git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1147 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/libdingaling/src/libdingaling.c | 81 +++++++++++++------ libs/libdingaling/src/libdingaling.h | 17 ++++ .../endpoints/mod_dingaling/mod_dingaling.c | 6 +- 3 files changed, 78 insertions(+), 26 deletions(-) diff --git a/libs/libdingaling/src/libdingaling.c b/libs/libdingaling/src/libdingaling.c index ce31df9c2f..7393343e3e 100644 --- a/libs/libdingaling/src/libdingaling.c +++ b/libs/libdingaling/src/libdingaling.c @@ -72,6 +72,7 @@ static struct { int debug; apr_pool_t *memory_pool; unsigned int id; + ldl_logger_t logger; } globals; struct packet_node { @@ -128,6 +129,30 @@ struct ldl_session { void *private_data; }; + +static char *cut_path(char *in) +{ + char *p, *ret = in; + char delims[] = "/\\"; + char *i; + + for (i = delims; *i; i++) { + p = in; + while ((p = strchr(p, *i)) != 0) { + ret = ++p; + } + } + return ret; +} + +static void default_logger(char *file, const char *func, int line, int level, char *fmt, ...) +{ + char *fp; + + fp = cut_path(file); + fprintf(globals.log_stream, "%s:%d %s() %s", file, line, func, fmt); +} + static unsigned int next_id(void) { return globals.id++; @@ -147,7 +172,7 @@ ldl_status ldl_session_destroy(ldl_session_t **session_p) apr_pool_t *pool = session->pool; if (globals.debug) { - fprintf(globals.log_stream, "Destroyed Session %s\n", session->id); + globals.logger(DL_LOG_DEBUG, "Destroyed Session %s\n", session->id); } if (session->id) { apr_hash_set(session->handle->sessions, session->id, APR_HASH_KEY_STRING, NULL); @@ -170,7 +195,7 @@ ldl_status ldl_session_create(ldl_session_t **session_p, ldl_handle_t *handle, c ldl_session_t *session = NULL; if (!(session = apr_palloc(handle->pool, sizeof(ldl_session_t)))) { - fprintf(globals.log_stream, "Memory ERROR!\n"); + globals.logger(DL_LOG_DEBUG, "Memory ERROR!\n"); *session_p = NULL; return LDL_STATUS_MEMERR; } @@ -190,7 +215,7 @@ ldl_status ldl_session_create(ldl_session_t **session_p, ldl_handle_t *handle, c *session_p = session; if (globals.debug) { - fprintf(globals.log_stream, "Created Session %s\n", id); + globals.logger(DL_LOG_DEBUG, "Created Session %s\n", id); } return LDL_STATUS_SUCCESS; @@ -211,13 +236,13 @@ static ldl_status parse_session_code(ldl_handle_t *handle, char *id, char *from, if (!session) { if (globals.debug) { - fprintf(globals.log_stream, "Non-Existent Session %s!\n", id); + globals.logger(DL_LOG_DEBUG, "Non-Existent Session %s!\n", id); } return LDL_STATUS_MEMERR; } if (globals.debug) { - fprintf(globals.log_stream, "Message for Session %s\n", id); + globals.logger(DL_LOG_DEBUG, "Message for Session %s\n", id); } while(xml) { @@ -251,7 +276,7 @@ static ldl_status parse_session_code(ldl_handle_t *handle, char *id, char *from, session->payload_len++; if (globals.debug) { - fprintf(globals.log_stream, "Add Payload [%s] id='%s'\n", name, id); + globals.logger(DL_LOG_DEBUG, "Add Payload [%s] id='%s'\n", name, id); } } } @@ -276,7 +301,7 @@ static ldl_status parse_session_code(ldl_handle_t *handle, char *id, char *from, for (x = 0; x < session->candidate_len; x++) { if (session->candidates[x].pref == pref) { if (globals.debug) { - fprintf(globals.log_stream, "Duplicate Pref!\n"); + globals.logger(DL_LOG_DEBUG, "Duplicate Pref!\n"); } index = x; break; @@ -311,7 +336,7 @@ static ldl_status parse_session_code(ldl_handle_t *handle, char *id, char *from, session->candidates[index].port = atoi(key); } if (globals.debug) { - fprintf(globals.log_stream, + globals.logger(DL_LOG_DEBUG, "New Candidate %d\n" "name=%s\n" "type=%s\n" @@ -394,7 +419,7 @@ static void cancel_retry(ldl_handle_t *handle, char *id) apr_thread_mutex_lock(handle->lock); if ((packet_node = apr_hash_get(handle->retry_hash, id, APR_HASH_KEY_STRING))) { if (globals.debug) { - fprintf(globals.log_stream, "Cancel packet %s\n", packet_node->id); + globals.logger(DL_LOG_DEBUG, "Cancel packet %s\n", packet_node->id); } packet_node->retries = 0; } @@ -500,9 +525,9 @@ static int on_stream(ldl_handle_t *handle, int type, iks * node) } } } else if (strcmp("failure", iks_name(node)) == 0) { - fprintf(globals.log_stream, "sasl authentication failed\n"); + globals.logger(DL_LOG_DEBUG, "sasl authentication failed\n"); } else if (strcmp("success", iks_name(node)) == 0) { - fprintf(globals.log_stream, "XMPP server connected\n"); + globals.logger(DL_LOG_DEBUG, "XMPP server connected\n"); iks_send_header(handle->parser, handle->acc->server); ldl_set_flag(handle, LDL_FLAG_AUTHORIZED); } else { @@ -516,11 +541,11 @@ static int on_stream(ldl_handle_t *handle, int type, iks * node) break; #if 0 case IKS_NODE_STOP: - fprintf(globals.log_stream, "server disconnected\n"); + globals.logger(DL_LOG_DEBUG, "server disconnected\n"); break; case IKS_NODE_ERROR: - fprintf(globals.log_stream, "stream error\n"); + globals.logger(DL_LOG_DEBUG, "stream error\n"); break; #endif @@ -553,7 +578,7 @@ static int on_msg(void *user_data, ikspak *pak) static int on_error(void *user_data, ikspak * pak) { - fprintf(globals.log_stream, "authorization failed\n"); + globals.logger(DL_LOG_DEBUG, "authorization failed\n"); return IKS_FILTER_EAT; } @@ -633,7 +658,7 @@ static void ldl_flush_queue(ldl_handle_t *handle) len = apr_queue_size(handle->retry_queue); if (globals.debug && len) { - fprintf(globals.log_stream, "Processing %u packets in retry queue\n", len); + globals.logger(DL_LOG_DEBUG, "Processing %u packets in retry queue\n", len); } apr_thread_mutex_lock(handle->lock); while(x < len && apr_queue_trypop(handle->retry_queue, &pop) == APR_SUCCESS) { @@ -646,7 +671,7 @@ static void ldl_flush_queue(ldl_handle_t *handle) if (packet_node->retries > 0) { packet_node->retries--; if (globals.debug) { - fprintf(globals.log_stream, "Sending packet %s (%d left)\n", packet_node->id, packet_node->retries); + globals.logger(DL_LOG_DEBUG, "Sending packet %s (%d left)\n", packet_node->id, packet_node->retries); } iks_send(handle->parser, packet_node->xml); packet_node->next = now + 5000000; @@ -654,7 +679,7 @@ static void ldl_flush_queue(ldl_handle_t *handle) } if (packet_node->retries == 0) { if (globals.debug) { - fprintf(globals.log_stream, "Discarding packet %s\n", packet_node->id); + globals.logger(DL_LOG_DEBUG, "Discarding packet %s\n", packet_node->id); } apr_hash_set(handle->retry_hash, packet_node->id, APR_HASH_KEY_STRING, NULL); iks_delete(packet_node->xml); @@ -691,11 +716,11 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass) case IKS_OK: break; case IKS_NET_NODNS: - fprintf(globals.log_stream, "hostname lookup failed\n"); + globals.logger(DL_LOG_DEBUG, "hostname lookup failed\n"); case IKS_NET_NOCONN: - fprintf(globals.log_stream, "connection failed\n"); + globals.logger(DL_LOG_DEBUG, "connection failed\n"); default: - fprintf(globals.log_stream, "io error %d\n", e); + globals.logger(DL_LOG_DEBUG, "io error %d\n", e); microsleep(500); continue; } @@ -719,7 +744,7 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass) } if (IKS_OK != e) { - fprintf(globals.log_stream, "io error %d\n", e); + globals.logger(DL_LOG_DEBUG, "io error %d\n", e); microsleep(500); break; } @@ -730,13 +755,13 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass) if (!ldl_test_flag(handle, LDL_FLAG_AUTHORIZED)) { if (IKS_NET_TLSFAIL == e) { - fprintf(globals.log_stream, "tls handshake failed\n"); + globals.logger(DL_LOG_DEBUG, "tls handshake failed\n"); microsleep(500); break; } if (handle->counter == 0) { - fprintf(globals.log_stream, "network timeout\n"); + globals.logger(DL_LOG_DEBUG, "network timeout\n"); microsleep(500); break; } @@ -828,6 +853,11 @@ void *ldl_handle_get_private(ldl_handle_t *handle) return handle->private_info; } +void ldl_global_set_logger(ldl_logger_t logger) +{ + globals.logger = logger; +} + unsigned int ldl_session_terminate(ldl_session_t *session) { iks *iq, *sess; @@ -1012,15 +1042,16 @@ ldl_status ldl_global_init(int debug) memset(&globals, 0, sizeof(globals)); if (apr_pool_create(&globals.memory_pool, NULL) != LDL_STATUS_SUCCESS) { - fprintf(globals.log_stream, "Could not allocate memory pool\n"); + globals.logger(DL_LOG_DEBUG, "Could not allocate memory pool\n"); return LDL_STATUS_MEMERR; } globals.log_stream = stdout; globals.debug = debug; globals.id = 300; + globals.logger = default_logger; ldl_set_flag(&globals, LDL_FLAG_INIT); - + return LDL_STATUS_SUCCESS; } diff --git a/libs/libdingaling/src/libdingaling.h b/libs/libdingaling/src/libdingaling.h index 724dbee083..7503d7c864 100644 --- a/libs/libdingaling/src/libdingaling.h +++ b/libs/libdingaling/src/libdingaling.h @@ -127,9 +127,20 @@ typedef enum { LDL_DESCRIPTION_ACCEPT } ldl_description_t; +#define DL_PRE __FILE__, __FUNCTION__, __LINE__ +#define DL_LOG_DEBUG DL_PRE, 7 +#define DL_LOG_INFO DL_PRE, 6 +#define DL_LOG_NOTICE DL_PRE, 5 +#define DL_LOG_WARNING DL_PRE, 4 +#define DL_LOG_ERR DL_PRE, 3 +#define DL_LOG_CRIT DL_PRE, 2 +#define DL_LOG_ALERT DL_PRE, 1 +#define DL_LOG_EMERG DL_PRE, 0 + typedef ldl_status (*ldl_loop_callback_t)(ldl_handle_t *); typedef ldl_status (*ldl_session_callback_t)(ldl_handle_t *, ldl_session_t *, ldl_signal_t, char *); typedef ldl_status (*ldl_response_callback_t)(ldl_handle_t *, char *); +typedef void (*ldl_logger_t)(char *file, const char *func, int line, int level, char *fmt, ...); #define ldl_yield(ms) apr_sleep(ms * 10); apr_thread_yield(); @@ -231,6 +242,12 @@ void ldl_session_set_private(ldl_session_t *session, void *private_data); */ void *ldl_session_get_private(ldl_session_t *session); +/*! + \brief Set a custom logger + \param logger the logger function +*/ +void ldl_global_set_logger(ldl_logger_t logger); + /*! \brief Perform a probe on a given id to resolve the proper Jingle Resource \param handle the connection handle to use. diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index 0745e691df..5a7a080de2 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -153,7 +153,10 @@ static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsessi static ldl_status handle_response(ldl_handle_t *handle, char *id); static switch_status load_config(void); - +static void dl_logger(char *file, const char *func, int line, int level, char *fmt, ...) +{ + switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, SWITCH_LOG_DEBUG, fmt); +} static void get_codecs(struct private_object *tech_pvt) { @@ -1050,6 +1053,7 @@ static switch_status load_config(void) } else if (!strcasecmp(cfg.category, "interface")) { if (!globals.init) { ldl_global_init(globals.debug); + ldl_global_set_logger(dl_logger); globals.init = 1; }