[telepathy-gabble/master] Extract parsing unextended supported fields to a function

Will Thompson will.thompson at collabora.co.uk
Wed Aug 26 09:21:52 PDT 2009


---
 src/search-channel.c |   59 ++++++++++++++++++++++++++++----------------------
 1 files changed, 33 insertions(+), 26 deletions(-)

diff --git a/src/search-channel.c b/src/search-channel.c
index 43da256..99f5361 100644
--- a/src/search-channel.c
+++ b/src/search-channel.c
@@ -188,27 +188,12 @@ supported_field_discovery_failed (GabbleSearchChannel *chan,
       error->message);
 }
 
-static void
-parse_search_field_response (GabbleSearchChannel *chan,
-                             LmMessageNode *query_node)
+static GPtrArray *
+parse_unextended_field_response (LmMessageNode *query_node,
+                                 GError **error)
 {
-  LmMessageNode *x_node;
+  GPtrArray *search_keys = g_ptr_array_new ();
   LmMessageNode *field;
-  GPtrArray *search_keys;
-
-  x_node = lm_message_node_get_child_with_namespace (query_node, "x",
-      NS_X_DATA);
-
-  if (x_node != NULL)
-    {
-      GError error = { TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
-          "server uses data forms, which are not yet implemented in Gabble" };
-
-      supported_field_discovery_failed (chan, &error);
-      return;
-    }
-
-  search_keys = g_ptr_array_new ();
 
   for (field = query_node->children; field != NULL; field = field->next)
     {
@@ -229,19 +214,41 @@ parse_search_field_response (GabbleSearchChannel *chan,
         }
       else
         {
-          GError error = { TP_ERRORS, TP_ERROR_NOT_AVAILABLE, NULL };
-
-          error.message = g_strdup_printf (
+          g_set_error (error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
               "server is broken: %s is not a field defined in XEP 0055",
               field->name);
-          supported_field_discovery_failed (chan, &error);
-          g_free (error.message);
-
           g_ptr_array_free (search_keys, TRUE);
-          return;
+          return NULL;
         }
     }
 
+  return search_keys;
+}
+
+static void
+parse_search_field_response (GabbleSearchChannel *chan,
+                             LmMessageNode *query_node)
+{
+  LmMessageNode *x_node;
+  GPtrArray *search_keys = NULL;
+  GError *e = NULL;
+
+  x_node = lm_message_node_get_child_with_namespace (query_node, "x",
+      NS_X_DATA);
+
+  if (x_node == NULL)
+    search_keys = parse_unextended_field_response (query_node, &e);
+  else
+    e = g_error_new (TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED,
+        "server uses data forms, which are not yet implemented in Gabble");
+
+  if (search_keys == NULL)
+    {
+      supported_field_discovery_failed (chan, e);
+      g_error_free (e);
+      return;
+    }
+
   DEBUG ("extracted available fields");
   g_ptr_array_add (search_keys, NULL);
   chan->priv->available_search_keys = (gchar **) g_ptr_array_free (search_keys, FALSE);
-- 
1.5.6.5




More information about the telepathy-commits mailing list