Mercurial > hg
changeset 1703:65ba89949252
Improve error checks in received IQ responses
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Mon, 08 Feb 2010 19:15:55 +0100 |
parents | 02039190532d |
children | ab502d645378 |
files | mcabber/mcabber/xmpp_iqrequest.c |
diffstat | 1 files changed, 58 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/mcabber/xmpp_iqrequest.c Sun Feb 07 19:19:33 2010 +0100 +++ b/mcabber/mcabber/xmpp_iqrequest.c Mon Feb 08 19:15:55 2010 +0100 @@ -125,16 +125,9 @@ { LmMessageNode *ansqry; const char *p, *bjid; - char *tmp; - char *buf; + char *buf, *tmp; - ansqry = lm_message_node_get_child(m->node, "query"); - if (!ansqry) { - scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result!"); - return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; - } - - // Display IQ result sender... + // Check IQ result sender bjid = lm_message_get_from(m); if (!bjid) bjid = lm_connection_get_jid(lconnection); // No from means our JID... @@ -143,6 +136,20 @@ return LM_HANDLER_RESULT_REMOVE_MESSAGE; } + // Check for error message + if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { + scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); + display_server_error(lm_message_node_get_child(m->node, "error")); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + + // Check message contents + ansqry = lm_message_node_get_child(m->node, "query"); + if (!ansqry) { + scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result from <%s>!", bjid); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + buf = g_strdup_printf("Received IQ:version result from <%s>", bjid); scr_LogPrint(LPRINT_LOGNORM, "%s", buf); @@ -183,20 +190,28 @@ { LmMessageNode *ansqry; const char *p, *bjid; - char *tmp; - char *buf; + char *buf, *tmp; - ansqry = lm_message_node_get_child(m->node, "query"); - if (!ansqry) { - scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result!"); - return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; - } - // Display IQ result sender... + // Check IQ result sender bjid = lm_message_get_from(m); if (!bjid) bjid = lm_connection_get_jid(lconnection); // No from means our JID... if (!bjid) { - scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); + scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result (no sender name)."); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + + // Check for error message + if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { + scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); + display_server_error(lm_message_node_get_child(m->node, "error")); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + + // Check message contents + ansqry = lm_message_node_get_child(m->node, "query"); + if (!ansqry) { + scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result from <%s>!", bjid); return LM_HANDLER_RESULT_REMOVE_MESSAGE; } @@ -242,17 +257,26 @@ const char *p, *bjid; char *buf, *tmp; - ansqry = lm_message_node_get_child(m->node, "query"); - if (!ansqry) { - scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result!"); - return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; - } - // Display IQ result sender... + // Check IQ result sender bjid = lm_message_get_from(m); if (!bjid) bjid = lm_connection_get_jid(lconnection); // No from means our JID... if (!bjid) { - scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); + scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result (no sender name)."); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + + // Check for error message + if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { + scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); + display_server_error(lm_message_node_get_child(m->node, "error")); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + + // Check message contents + ansqry = lm_message_node_get_child(m->node, "query"); + if (!ansqry) { + scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result from <%s>!", bjid); return LM_HANDLER_RESULT_REMOVE_MESSAGE; } @@ -415,12 +439,19 @@ const char *bjid; char *buf, *tmp; - // Display IQ result sender... + // Check IQ result sender bjid = lm_message_get_from(m); if (!bjid) bjid = lm_connection_get_jid(lconnection); // No from means our JID... if (!bjid) { - scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); + scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:vCard result (no sender name)."); + return LM_HANDLER_RESULT_REMOVE_MESSAGE; + } + + // Check for error message + if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { + scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); + display_server_error(lm_message_node_get_child(m->node, "error")); return LM_HANDLER_RESULT_REMOVE_MESSAGE; }