From e9959d5d38c5bbe9c4030ef6d59f4b606113b478 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 27 Jan 2014 22:35:04 +0000 Subject: [PATCH 1/3] Refactored presence_error_handler --- src/xmpp/message.c | 47 +++++++++++++++++--------------- src/xmpp/presence.c | 65 ++++++++++++++++++++++----------------------- 2 files changed, 57 insertions(+), 55 deletions(-) diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 6f340b2d..5ea54f2d 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -195,34 +195,35 @@ _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, { char *id = xmpp_stanza_get_id(stanza); char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); - - // stanza_get_error never returns NULL - char *err_msg = stanza_get_error_message(stanza); - - GString *log_msg = g_string_new("Error receievd"); - if (id != NULL) { - g_string_append(log_msg, " (id:"); - g_string_append(log_msg, id); - g_string_append(log_msg, ")"); - } - if (from != NULL) { - g_string_append(log_msg, " (from:"); - g_string_append(log_msg, from); - g_string_append(log_msg, ")"); - } - g_string_append(log_msg, ", error: "); - g_string_append(log_msg, err_msg); - - log_info(log_msg->str); - - g_string_free(log_msg, TRUE); - xmpp_stanza_t *error_stanza = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR); char *type = NULL; if (error_stanza != NULL) { type = xmpp_stanza_get_attribute(error_stanza, STANZA_ATTR_TYPE); } + // stanza_get_error never returns NULL + char *err_msg = stanza_get_error_message(stanza); + + GString *log_msg = g_string_new("message stanza error received"); + if (id != NULL) { + g_string_append(log_msg, " id="); + g_string_append(log_msg, id); + } + if (from != NULL) { + g_string_append(log_msg, " from="); + g_string_append(log_msg, from); + } + if (type != NULL) { + g_string_append(log_msg, " type="); + g_string_append(log_msg, type); + } + g_string_append(log_msg, " error="); + g_string_append(log_msg, err_msg); + + log_info(log_msg->str); + + g_string_free(log_msg, TRUE); + // handle recipient not found ('from' contains a value and type is 'cancel') if ((from != NULL) && ((type != NULL && (strcmp(type, "cancel") == 0)))) { handle_recipient_not_found(from, err_msg); @@ -236,6 +237,8 @@ _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, handle_error(err_msg); } + free(err_msg); + return 1; } diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index f61d605d..538898f8 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -335,42 +335,41 @@ static int _presence_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { - xmpp_ctx_t *ctx = connection_get_ctx(); - gchar *err_msg = NULL; - gchar *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); + char *id = xmpp_stanza_get_id(stanza); + char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); xmpp_stanza_t *error_stanza = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR); - xmpp_stanza_t *text_stanza = xmpp_stanza_get_child_by_name(error_stanza, STANZA_NAME_TEXT); - - if (error_stanza == NULL) { - log_debug("error message without received"); - } else { - - // check for text - if (text_stanza != NULL) { - err_msg = xmpp_stanza_get_text(text_stanza); - if (err_msg != NULL) { - handle_error_message(from, err_msg); - xmpp_free(ctx, err_msg); - } - - // TODO : process 'type' attribute from [RFC6120, 8.3.2] - - // otherwise show defined-condition - } else { - xmpp_stanza_t *err_cond = xmpp_stanza_get_children(error_stanza); - - if (err_cond == NULL) { - log_debug("error message without or received"); - - } else { - err_msg = xmpp_stanza_get_name(err_cond); - handle_error_message(from, err_msg); - - // TODO : process 'type' attribute from [RFC6120, 8.3.2] - } - } + char *type = NULL; + if (error_stanza != NULL) { + type = xmpp_stanza_get_attribute(error_stanza, STANZA_ATTR_TYPE); } + // stanza_get_error never returns NULL + char *err_msg = stanza_get_error_message(stanza); + + GString *log_msg = g_string_new("presence stanza error received"); + if (id != NULL) { + g_string_append(log_msg, " id="); + g_string_append(log_msg, id); + } + if (from != NULL) { + g_string_append(log_msg, " from="); + g_string_append(log_msg, from); + } + if (type != NULL) { + g_string_append(log_msg, " type="); + g_string_append(log_msg, type); + } + g_string_append(log_msg, " error="); + g_string_append(log_msg, err_msg); + + log_info(log_msg->str); + + g_string_free(log_msg, TRUE); + + handle_error_message(from, err_msg); + + free(err_msg); + return 1; } From 6dbea7e16f821171c13593b228f9f413877bee39 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 27 Jan 2014 22:48:52 +0000 Subject: [PATCH 2/3] Add level to log output --- src/log.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/log.c b/src/log.c index b82905cf..c92b164c 100644 --- a/src/log.c +++ b/src/log.c @@ -62,6 +62,7 @@ static char * _get_groupchat_log_filename(const char * const room, static gchar * _get_chatlog_dir(void); static gchar * _get_log_file(void); static void _rotate_log_file(void); +static char* _log_string_from_level(log_level_t level); void log_debug(const char * const msg, ...) @@ -143,8 +144,11 @@ log_msg(log_level_t level, const char * const area, const char * const msg) long result; dt = g_date_time_new_now(tz); + char *level_str = _log_string_from_level(level); + gchar *date_fmt = g_date_time_format(dt, "%d/%m/%Y %H:%M:%S"); - fprintf(logp, "%s: %s: %s\n", date_fmt, area, msg); + + fprintf(logp, "%s: %s: %s: %s\n", date_fmt, area, level_str, msg); g_date_time_unref(dt); fflush(logp); @@ -523,3 +527,21 @@ _get_log_file(void) return result; } + +static char* +_log_string_from_level(log_level_t level) +{ + switch (level) + { + case PROF_LEVEL_ERROR: + return "ERR"; + case PROF_LEVEL_WARN: + return "WRN"; + case PROF_LEVEL_INFO: + return "INF"; + case PROF_LEVEL_DEBUG: + return "DBG"; + default: + return "LOG"; + } +} From 8f6ead2b7b0d4e0d67f7821c914070a46cc5160e Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 27 Jan 2014 22:50:06 +0000 Subject: [PATCH 3/3] Changed log level to info for failed connection --- src/command/commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/command/commands.c b/src/command/commands.c index b01dbfa6..c038c802 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -169,7 +169,7 @@ cmd_connect(gchar **args, struct cmd_help_t help) if (conn_status == JABBER_DISCONNECTED) { cons_show_error("Connection attempt for %s failed.", jid); - log_debug("Connection attempt for %s failed", jid); + log_info("Connection attempt for %s failed", jid); } free(jid);