# HG changeset patch # User Mikael Berthe # Date 1265652955 -3600 # Node ID 65ba8994925236e93b8dd779783c5a3ec2b0f096 # Parent 02039190532d114b937ca8a509564cb9e80bb956 Improve error checks in received IQ responses diff -r 02039190532d -r 65ba89949252 mcabber/mcabber/xmpp_iqrequest.c --- 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; }