From: Rodrigo Moya Date: Wed, 26 Nov 2003 15:23:37 +0000 (+0000) Subject: added SoupSoapParameter structure, to "hide" the usage of xmlNode's. X-Git-Tag: LIBSOUP_2_1_2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=806d00c838cb917d49118f523a3561628b27a990;p=platform%2Fupstream%2Flibsoup.git added SoupSoapParameter structure, to "hide" the usage of xmlNode's. 2003-11-26 Rodrigo Moya * 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. --- diff --git a/ChangeLog b/ChangeLog index 7cbbc15..651f8f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2003-11-26 Rodrigo Moya + + * 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 * libsoup/soup-soap-response.c (soup_soap_response_set_method_name): diff --git a/libsoup/soup-soap-response.c b/libsoup/soup-soap-response.c index 7355de4..37a7004 100644 --- a/libsoup/soup-soap-response.c +++ b/libsoup/soup-soap-response.c @@ -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; +} diff --git a/libsoup/soup-soap-response.h b/libsoup/soup-soap-response.h index 3ea227a..657d8d4 100644 --- a/libsoup/soup-soap-response.h +++ b/libsoup/soup-soap-response.h @@ -7,6 +7,7 @@ #define SOUP_SOAP_RESPONSE_H #include +#include 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