From 7799623b4a26e2005b7a3a8db82265df7a7e35ca Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 10 Nov 2012 02:28:38 +0000 Subject: [PATCH] Show error text if received --- src/command.c | 1 + src/jabber.c | 51 ++++++++++++++++++++++++++++++------------------- src/profanity.c | 1 - src/stanza.h | 1 + 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/command.c b/src/command.c index d9536411..b91a1180 100644 --- a/src/command.c +++ b/src/command.c @@ -1093,6 +1093,7 @@ _cmd_close(const char * const inp, struct cmd_help_t help) if (win_in_groupchat()) { char *room_jid = win_get_recipient(); jabber_leave_chat_room(room_jid); + win_close_win(); } else if (win_in_chat()) { if (prefs_get_states()) { diff --git a/src/jabber.c b/src/jabber.c index b1b8afd2..7e62a5a8 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -389,27 +389,38 @@ _groupchat_message_handler(xmpp_stanza_t * const stanza) static int _error_handler(xmpp_stanza_t * const stanza) { - char *err_msg = NULL; - xmpp_stanza_t *error = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR); - - if (error == NULL) { - log_debug("error message without received"); - return 1; - } else { - xmpp_stanza_t *err_cond = xmpp_stanza_get_children(error); - - if (err_cond == NULL) { - log_debug("error message without received"); - return 1; - } else { - err_msg = xmpp_stanza_get_name(err_cond); - } - - // TODO: process 'type' attribute from [RFC6120, 8.3.2] - } - + gchar *err_msg = NULL; gchar *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); - prof_handle_error_message(from, err_msg); + 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); + prof_handle_error_message(from, 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); + prof_handle_error_message(from, err_msg); + + // TODO : process 'type' attribute from [RFC6120, 8.3.2] + } + } + } return 1; } diff --git a/src/profanity.c b/src/profanity.c index 4e99e25a..f7df4f03 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -229,7 +229,6 @@ void prof_handle_leave_room(const char * const room) { room_leave(room); - win_close_win(); } void diff --git a/src/stanza.h b/src/stanza.h index 93f1c057..5acb6aee 100644 --- a/src/stanza.h +++ b/src/stanza.h @@ -42,6 +42,7 @@ #define STANZA_NAME_DELAY "delay" #define STANZA_NAME_ERROR "error" #define STANZA_NAME_PING "ping" +#define STANZA_NAME_TEXT "text" #define STANZA_TYPE_CHAT "chat" #define STANZA_TYPE_GROUPCHAT "groupchat"