added SoupSoapParameter structure, to "hide" the usage of xmlNode's.
authorRodrigo Moya <rodrigo@ximian.com>
Wed, 26 Nov 2003 15:23:37 +0000 (15:23 +0000)
committerRodrigo Moya <rodrigo@src.gnome.org>
Wed, 26 Nov 2003 15:23:37 +0000 (15:23 +0000)
2003-11-26  Rodrigo Moya <rodrigo@ximian.com>

* libsoup/soup-soap-response.[ch]: added SoupSoapParameter
structure, to "hide" the usage of xmlNode's.
(soup_soap_parameter_get_name): functions to manage SOAP
response parameters.
(soup_soap_response_get_first_parameter,
soup_soap_response_get_first_parameter_by_name,
soup_soap_response_get_next_parameter,
soup_soap_response_get_next_parameter_by_name):
new functions for an easy access to the response's parameters.
(soup_soap_response_from_string): removed warnings.

ChangeLog
libsoup/soup-soap-response.c
libsoup/soup-soap-response.h

index 7cbbc15..651f8f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2003-11-26  Rodrigo Moya <rodrigo@ximian.com>
+
+       * libsoup/soup-soap-response.[ch]: added SoupSoapParameter
+       structure, to "hide" the usage of xmlNode's.
+       (soup_soap_parameter_get_name): functions to manage SOAP
+       response parameters.
+       (soup_soap_response_get_first_parameter,
+       soup_soap_response_get_first_parameter_by_name,
+       soup_soap_response_get_next_parameter,
+       soup_soap_response_get_next_parameter_by_name):
+       new functions for an easy access to the response's parameters.
+       (soup_soap_response_from_string): removed warnings.
+
 2003-11-25  Rodrigo Moya <rodrigo@ximian.com>
 
        * libsoup/soup-soap-response.c (soup_soap_response_set_method_name):
index 7355de4..37a7004 100644 (file)
@@ -142,7 +142,7 @@ gboolean
 soup_soap_response_from_string (SoupSoapResponse *response, const char *xmlstr)
 {
        xmlDocPtr old_doc = NULL;
-       xmlNodePtr xml_root, xml_body, xml_method;
+       xmlNodePtr xml_root, xml_body = NULL, xml_method = NULL;
 
        g_return_val_if_fail (SOUP_IS_SOAP_RESPONSE (response), FALSE);
        g_return_val_if_fail (xmlstr != NULL, FALSE);
@@ -229,13 +229,23 @@ soup_soap_response_set_method_name (SoupSoapResponse *response, const char *meth
        xmlNodeSetName (response->priv->xml_method, method_name);
 }
 
+const char *
+soup_soap_parameter_get_name (SoupSoapParameter *param)
+{
+       g_return_val_if_fail (param != NULL, NULL);
+
+       return (const char *) param->name;
+}
+
 /**
  * soup_soap_response_get_parameters:
  * @response: the %SoupSoapResponse object.
  *
  * Returns the list of parameters received in the SOAP response.
  *
- * Return value: the list of parameters, represented in xmlNodePtr's.
+ * Return value: the list of parameters, represented in
+ * SoupSoapParameter's, which is an opaque type used to
+ * represent a parameter in the SOAP response.
  */
 const GList *
 soup_soap_response_get_parameters (SoupSoapResponse *response)
@@ -244,3 +254,114 @@ soup_soap_response_get_parameters (SoupSoapResponse *response)
 
        return (const GList *) response->priv->parameters;
 }
+
+/**
+ * soup_soap_response_get_first_parameter:
+ * @response: the %SoupSoapResponse object.
+ *
+ * Retrieves the first parameter contained in the SOAP response.
+ *
+ * Return value: a %SoupSoapParameter representing the
+ * first parameter. This is an opaque type used to
+ * represent a parameter in the SOAP response.
+ */
+SoupSoapParameter *
+soup_soap_response_get_first_parameter (SoupSoapResponse *response)
+{
+       g_return_val_if_fail (SOUP_IS_SOAP_RESPONSE (response), NULL);
+
+       return response->priv->parameters ? g_list_first (response->priv->parameters) : NULL;
+}
+
+/**
+ * soup_soap_response_get_first_parameter_by_name:
+ * @response: the %SoupSoapResponse object.
+ * @name: the name of the parameter to look for.
+ *
+ * Retrieves the first parameter contained in the SOAP response whose
+ * name is @name.
+ *
+ * Return value: a %SoupSoapParameter representing the
+ * first parameter. This is an opaque type used to
+ * represent a parameter in the SOAP response.
+ */
+SoupSoapParameter *
+soup_soap_response_get_first_parameter_by_name (SoupSoapResponse *response,
+                                               const char *name)
+{
+       GList *l;
+
+       g_return_val_if_fail (SOUP_IS_SOAP_RESPONSE (response), NULL);
+       g_return_val_if_fail (name != NULL, NULL);
+
+       for (l = response->priv->parameters; l != NULL; l = l->next) {
+               SoupSoapParameter *param = (SoupSoapParameter *) l->data;
+
+               if (!strcmp (name, param->name))
+                       return param;
+       }
+
+       return NULL;
+}
+
+/**
+ * soup_soap_response_get_next_parameter:
+ * @response: the %SoupSoapResponse object.
+ * @from: the parameter to start from.
+ *
+ * Retrieves the parameter following @from in the %SoupSoapResponse object.
+ *
+ * Return value: a %SoupSoapParameter representing the parameter.
+ */
+SoupSoapParameter *
+soup_soap_response_get_next_parameter (SoupSoapResponse *response,
+                                      SoupSoapParameter *from)
+{
+       GList *l;
+
+       g_return_val_if_fail (SOUP_IS_SOAP_RESPONSE (response), NULL);
+       g_return_val_if_fail (from != NULL, NULL);
+
+       l = g_list_find (response->priv->parameters, (gconstpointer) from);
+       if (!l)
+               return NULL;
+
+       return l->next ? (SoupSoapParameter *) l->next->data : NULL;
+}
+
+/**
+ * soup_soap_response_get_next_parameter_by_name:
+ * @response: the %SoupSoapResponse object.
+ * @from: the parameter to start from.
+ * @name: the name of the parameter to look for.
+ *
+ * Retrieves the parameter following @from in the %SoupSoapResponse object
+ * whose name matches @name.
+ *
+ * Return value: a %SoupSoapParameter representing the parameter.
+ */
+SoupSoapParameter *
+soup_soap_response_get_next_parameter_by_name (SoupSoapResponse *response,
+                                              SoupSoapParameter *from,
+                                              const char *name)
+{
+       SoupSoapParameter *param;
+
+       g_return_val_if_fail (SOUP_IS_SOAP_RESPONSE (response), NULL);
+       g_return_val_if_fail (from != NULL, NULL);
+       g_return_val_if_fail (name != NULL, NULL);
+
+       param = soup_soap_response_get_next_parameter (response, from);
+       while (param) {
+               const char *param_name = soup_soap_parameter_get_name (param);
+
+               if (param_name) {
+                       if (!strcmp (name, param_name))
+                               return param;
+               }
+
+               param = soup_soap_response_get_next_parameter (response, param);
+       }
+
+       return NULL;
+}
index 3ea227a..657d8d4 100644 (file)
@@ -7,6 +7,7 @@
 #define SOUP_SOAP_RESPONSE_H
 
 #include <glib-object.h>
+#include <libxml/tree.h>
 
 G_BEGIN_DECLS
 
@@ -40,7 +41,19 @@ const char       *soup_soap_response_get_method_name (SoupSoapResponse *response
 void              soup_soap_response_set_method_name (SoupSoapResponse *response,
                                                      const char *method_name);
 
-const GList      *soup_soap_response_get_parameters (SoupSoapResponse *response);
+typedef xmlNode SoupSoapParameter;
+
+const char        *soup_soap_parameter_get_name (SoupSoapParameter *param);
+
+const GList       *soup_soap_response_get_parameters (SoupSoapResponse *response);
+SoupSoapParameter *soup_soap_response_get_first_parameter (SoupSoapResponse *response);
+SoupSoapParameter *soup_soap_response_get_first_parameter_by_name (SoupSoapResponse *response,
+                                                                  const char *name);
+SoupSoapParameter *soup_soap_response_get_next_parameter (SoupSoapResponse *response,
+                                                         SoupSoapParameter *from);
+SoupSoapParameter *soup_soap_response_get_next_parameter_by_name (SoupSoapResponse *response,
+                                                                 SoupSoapParameter *from,
+                                                                 const char *name);
 
 G_END_DECLS