add logger

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1147 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2006-04-14 02:05:29 +00:00
parent 9503c9a8ac
commit cb28473398
3 changed files with 78 additions and 26 deletions

View File

@ -72,6 +72,7 @@ static struct {
int debug; int debug;
apr_pool_t *memory_pool; apr_pool_t *memory_pool;
unsigned int id; unsigned int id;
ldl_logger_t logger;
} globals; } globals;
struct packet_node { struct packet_node {
@ -128,6 +129,30 @@ struct ldl_session {
void *private_data; 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) static unsigned int next_id(void)
{ {
return globals.id++; return globals.id++;
@ -147,7 +172,7 @@ ldl_status ldl_session_destroy(ldl_session_t **session_p)
apr_pool_t *pool = session->pool; apr_pool_t *pool = session->pool;
if (globals.debug) { 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) { if (session->id) {
apr_hash_set(session->handle->sessions, session->id, APR_HASH_KEY_STRING, NULL); 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; ldl_session_t *session = NULL;
if (!(session = apr_palloc(handle->pool, sizeof(ldl_session_t)))) { 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; *session_p = NULL;
return LDL_STATUS_MEMERR; 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; *session_p = session;
if (globals.debug) { 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; 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 (!session) {
if (globals.debug) { 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; return LDL_STATUS_MEMERR;
} }
if (globals.debug) { 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) { while(xml) {
@ -251,7 +276,7 @@ static ldl_status parse_session_code(ldl_handle_t *handle, char *id, char *from,
session->payload_len++; session->payload_len++;
if (globals.debug) { 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++) { for (x = 0; x < session->candidate_len; x++) {
if (session->candidates[x].pref == pref) { if (session->candidates[x].pref == pref) {
if (globals.debug) { if (globals.debug) {
fprintf(globals.log_stream, "Duplicate Pref!\n"); globals.logger(DL_LOG_DEBUG, "Duplicate Pref!\n");
} }
index = x; index = x;
break; 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); session->candidates[index].port = atoi(key);
} }
if (globals.debug) { if (globals.debug) {
fprintf(globals.log_stream, globals.logger(DL_LOG_DEBUG,
"New Candidate %d\n" "New Candidate %d\n"
"name=%s\n" "name=%s\n"
"type=%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); apr_thread_mutex_lock(handle->lock);
if ((packet_node = apr_hash_get(handle->retry_hash, id, APR_HASH_KEY_STRING))) { if ((packet_node = apr_hash_get(handle->retry_hash, id, APR_HASH_KEY_STRING))) {
if (globals.debug) { 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; 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) { } 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) { } 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); iks_send_header(handle->parser, handle->acc->server);
ldl_set_flag(handle, LDL_FLAG_AUTHORIZED); ldl_set_flag(handle, LDL_FLAG_AUTHORIZED);
} else { } else {
@ -516,11 +541,11 @@ static int on_stream(ldl_handle_t *handle, int type, iks * node)
break; break;
#if 0 #if 0
case IKS_NODE_STOP: case IKS_NODE_STOP:
fprintf(globals.log_stream, "server disconnected\n"); globals.logger(DL_LOG_DEBUG, "server disconnected\n");
break; break;
case IKS_NODE_ERROR: case IKS_NODE_ERROR:
fprintf(globals.log_stream, "stream error\n"); globals.logger(DL_LOG_DEBUG, "stream error\n");
break; break;
#endif #endif
@ -553,7 +578,7 @@ static int on_msg(void *user_data, ikspak *pak)
static int on_error(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; return IKS_FILTER_EAT;
} }
@ -633,7 +658,7 @@ static void ldl_flush_queue(ldl_handle_t *handle)
len = apr_queue_size(handle->retry_queue); len = apr_queue_size(handle->retry_queue);
if (globals.debug && len) { 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); apr_thread_mutex_lock(handle->lock);
while(x < len && apr_queue_trypop(handle->retry_queue, &pop) == APR_SUCCESS) { 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) { if (packet_node->retries > 0) {
packet_node->retries--; packet_node->retries--;
if (globals.debug) { 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); iks_send(handle->parser, packet_node->xml);
packet_node->next = now + 5000000; packet_node->next = now + 5000000;
@ -654,7 +679,7 @@ static void ldl_flush_queue(ldl_handle_t *handle)
} }
if (packet_node->retries == 0) { if (packet_node->retries == 0) {
if (globals.debug) { 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); apr_hash_set(handle->retry_hash, packet_node->id, APR_HASH_KEY_STRING, NULL);
iks_delete(packet_node->xml); 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: case IKS_OK:
break; break;
case IKS_NET_NODNS: 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: case IKS_NET_NOCONN:
fprintf(globals.log_stream, "connection failed\n"); globals.logger(DL_LOG_DEBUG, "connection failed\n");
default: default:
fprintf(globals.log_stream, "io error %d\n", e); globals.logger(DL_LOG_DEBUG, "io error %d\n", e);
microsleep(500); microsleep(500);
continue; continue;
} }
@ -719,7 +744,7 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
} }
if (IKS_OK != e) { 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); microsleep(500);
break; 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 (!ldl_test_flag(handle, LDL_FLAG_AUTHORIZED)) {
if (IKS_NET_TLSFAIL == e) { if (IKS_NET_TLSFAIL == e) {
fprintf(globals.log_stream, "tls handshake failed\n"); globals.logger(DL_LOG_DEBUG, "tls handshake failed\n");
microsleep(500); microsleep(500);
break; break;
} }
if (handle->counter == 0) { if (handle->counter == 0) {
fprintf(globals.log_stream, "network timeout\n"); globals.logger(DL_LOG_DEBUG, "network timeout\n");
microsleep(500); microsleep(500);
break; break;
} }
@ -828,6 +853,11 @@ void *ldl_handle_get_private(ldl_handle_t *handle)
return handle->private_info; 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) unsigned int ldl_session_terminate(ldl_session_t *session)
{ {
iks *iq, *sess; iks *iq, *sess;
@ -1012,15 +1042,16 @@ ldl_status ldl_global_init(int debug)
memset(&globals, 0, sizeof(globals)); memset(&globals, 0, sizeof(globals));
if (apr_pool_create(&globals.memory_pool, NULL) != LDL_STATUS_SUCCESS) { 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; return LDL_STATUS_MEMERR;
} }
globals.log_stream = stdout; globals.log_stream = stdout;
globals.debug = debug; globals.debug = debug;
globals.id = 300; globals.id = 300;
globals.logger = default_logger;
ldl_set_flag(&globals, LDL_FLAG_INIT); ldl_set_flag(&globals, LDL_FLAG_INIT);
return LDL_STATUS_SUCCESS; return LDL_STATUS_SUCCESS;
} }

View File

@ -127,9 +127,20 @@ typedef enum {
LDL_DESCRIPTION_ACCEPT LDL_DESCRIPTION_ACCEPT
} ldl_description_t; } 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_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_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 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(); #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); 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 \brief Perform a probe on a given id to resolve the proper Jingle Resource
\param handle the connection handle to use. \param handle the connection handle to use.

View File

@ -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 ldl_status handle_response(ldl_handle_t *handle, char *id);
static switch_status load_config(void); 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) 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")) { } else if (!strcasecmp(cfg.category, "interface")) {
if (!globals.init) { if (!globals.init) {
ldl_global_init(globals.debug); ldl_global_init(globals.debug);
ldl_global_set_logger(dl_logger);
globals.init = 1; globals.init = 1;
} }