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;
   }