#include <time.h>
#include <libxml/tree.h>
#include <libsoup/soup-message.h>
+#include <libsoup/soup-soap-response.h>
+
+G_BEGIN_DECLS
#define SOUP_TYPE_SOAP_MESSAGE (soup_soap_message_get_type ())
#define SOUP_SOAP_MESSAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUP_TYPE_SOAP_MESSAGE, SoupSoapMessage))
SoupMessageClass parent_class;
} SoupSoapMessageClass;
-GType soup_soap_message_get_type (void);
+GType soup_soap_message_get_type (void);
-SoupSoapMessage *soup_soap_message_new (const char *method, const char *uri_string,
- gboolean standalone, const char *xml_encoding,
- const char *env_prefix, const char *env_uri);
-SoupSoapMessage *soup_soap_message_new_from_uri (const char *method, const SoupUri *uri,
- gboolean standalone, const char *xml_encoding,
- const char *env_prefix, const char *env_uri);
+SoupSoapMessage *soup_soap_message_new (const char *method, const char *uri_string,
+ gboolean standalone, const char *xml_encoding,
+ const char *env_prefix, const char *env_uri);
+SoupSoapMessage *soup_soap_message_new_from_uri (const char *method, const SoupUri *uri,
+ gboolean standalone, const char *xml_encoding,
+ const char *env_prefix, const char *env_uri);
-void soup_soap_message_start_envelope (SoupSoapMessage *msg);
-void soup_soap_message_end_envelope (SoupSoapMessage *msg);
-void soup_soap_message_start_body (SoupSoapMessage *msg);
-void soup_soap_message_end_body (SoupSoapMessage *msg);
-void soup_soap_message_start_element (SoupSoapMessage *msg,
- const char *name,
- const char *prefix,
- const char *ns_uri);
-void soup_soap_message_end_element (SoupSoapMessage *msg);
-void soup_soap_message_start_fault (SoupSoapMessage *msg,
- const char *faultcode,
- const char *faultstring,
- const char *faultfactor);
-void soup_soap_message_end_fault (SoupSoapMessage *msg);
-void soup_soap_message_start_fault_detail (SoupSoapMessage *msg);
-void soup_soap_message_end_fault_detail (SoupSoapMessage *msg);
-void soup_soap_message_start_header (SoupSoapMessage *msg);
-void soup_soap_message_end_header (SoupSoapMessage *msg);
-void soup_soap_message_start_header_element (SoupSoapMessage *msg,
- const char *name,
- gboolean must_understand,
- const char *actor_uri,
- const char *prefix,
- const char *ns_uri);
-void soup_soap_message_end_header_element (SoupSoapMessage *msg);
-void soup_soap_message_write_int (SoupSoapMessage *msg, long i);
-void soup_soap_message_write_double (SoupSoapMessage *msg, double d);
-void soup_soap_message_write_base64 (SoupSoapMessage *msg, const char *string, int len);
-void soup_soap_message_write_time (SoupSoapMessage *msg, const time_t *timeval);
-void soup_soap_message_write_string (SoupSoapMessage *msg, const char *string);
-void soup_soap_message_write_buffer (SoupSoapMessage *msg, const char *buffer, int len);
-void soup_soap_message_set_element_type (SoupSoapMessage *msg, const char *xsi_type);
-void soup_soap_message_set_null (SoupSoapMessage *msg);
-void soup_soap_message_add_attribute (SoupSoapMessage *msg,
- const char *name,
- const char *value,
- const char *prefix,
- const char *ns_uri);
-void soup_soap_message_add_namespace (SoupSoapMessage *msg,
- const char *prefix,
- const char *ns_uri);
-void soup_soap_message_set_default_namespace (SoupSoapMessage *msg,
+void soup_soap_message_start_envelope (SoupSoapMessage *msg);
+void soup_soap_message_end_envelope (SoupSoapMessage *msg);
+void soup_soap_message_start_body (SoupSoapMessage *msg);
+void soup_soap_message_end_body (SoupSoapMessage *msg);
+void soup_soap_message_start_element (SoupSoapMessage *msg,
+ const char *name,
+ const char *prefix,
+ const char *ns_uri);
+void soup_soap_message_end_element (SoupSoapMessage *msg);
+void soup_soap_message_start_fault (SoupSoapMessage *msg,
+ const char *faultcode,
+ const char *faultstring,
+ const char *faultfactor);
+void soup_soap_message_end_fault (SoupSoapMessage *msg);
+void soup_soap_message_start_fault_detail (SoupSoapMessage *msg);
+void soup_soap_message_end_fault_detail (SoupSoapMessage *msg);
+void soup_soap_message_start_header (SoupSoapMessage *msg);
+void soup_soap_message_end_header (SoupSoapMessage *msg);
+void soup_soap_message_start_header_element (SoupSoapMessage *msg,
+ const char *name,
+ gboolean must_understand,
+ const char *actor_uri,
+ const char *prefix,
const char *ns_uri);
-void soup_soap_message_set_encoding_style (SoupSoapMessage *msg, const char *enc_style);
-void soup_soap_message_reset (SoupSoapMessage *msg);
-void soup_soap_message_persist (SoupSoapMessage *msg);
+void soup_soap_message_end_header_element (SoupSoapMessage *msg);
+void soup_soap_message_write_int (SoupSoapMessage *msg, long i);
+void soup_soap_message_write_double (SoupSoapMessage *msg, double d);
+void soup_soap_message_write_base64 (SoupSoapMessage *msg, const char *string, int len);
+void soup_soap_message_write_time (SoupSoapMessage *msg, const time_t *timeval);
+void soup_soap_message_write_string (SoupSoapMessage *msg, const char *string);
+void soup_soap_message_write_buffer (SoupSoapMessage *msg, const char *buffer, int len);
+void soup_soap_message_set_element_type (SoupSoapMessage *msg, const char *xsi_type);
+void soup_soap_message_set_null (SoupSoapMessage *msg);
+void soup_soap_message_add_attribute (SoupSoapMessage *msg,
+ const char *name,
+ const char *value,
+ const char *prefix,
+ const char *ns_uri);
+void soup_soap_message_add_namespace (SoupSoapMessage *msg,
+ const char *prefix,
+ const char *ns_uri);
+void soup_soap_message_set_default_namespace (SoupSoapMessage *msg,
+ const char *ns_uri);
+void soup_soap_message_set_encoding_style (SoupSoapMessage *msg, const char *enc_style);
+void soup_soap_message_reset (SoupSoapMessage *msg);
+void soup_soap_message_persist (SoupSoapMessage *msg);
+
+const char *soup_soap_message_get_namespace_prefix (SoupSoapMessage *msg, const char *ns_uri);
+
+xmlDocPtr soup_soap_message_get_xml_doc (SoupSoapMessage *msg);
-const char *soup_soap_message_get_namespace_prefix (SoupSoapMessage *msg, const char *ns_uri);
+SoupSoapResponse *soup_soap_message_parse_response (SoupSoapMessage *msg);
-xmlDocPtr soup_soap_message_get_xml_doc (SoupSoapMessage *msg);
+G_END_DECLS
#endif
--- /dev/null
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003, Novell, Inc.
+ */
+
+#include <string.h>
+#include <libxml/tree.h>
+#include "soup-misc.h"
+#include "soup-soap-response.h"
+#include "soup-types.h"
+
+#define PARENT_TYPE G_TYPE_OBJECT
+
+struct _SoupSoapResponsePrivate {
+ xmlDocPtr xmldoc;
+};
+
+static GObjectClass *parent_class = NULL;
+
+static void
+finalize (GObject *object)
+{
+ SoupSoapResponse *response = SOUP_SOAP_RESPONSE (object);
+
+ /* free memory */
+ if (response->priv->xmldoc) {
+ xmlFreeDoc (response->priv->xmldoc);
+ response->priv->xmldoc = NULL;
+ }
+
+ g_free (response->priv);
+ response->priv = NULL;
+
+ parent_class->finalize (object);
+}
+
+static void
+class_init (SoupSoapResponseClass *klass)
+{
+ GObjectClass *object_class;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = finalize;
+}
+
+static void
+init (SoupSoapResponse *response, SoupSoapResponseClass *klass)
+{
+ response->priv = g_new0 (SoupSoapResponsePrivate, 1);
+
+ response->priv->xmldoc = xmlNewDoc ("1.0");
+}
+
+SOUP_MAKE_TYPE (soup_soap_response, SoupSoapResponse, class_init, init, PARENT_TYPE)
+
+/**
+ * soup_soap_response_new:
+ *
+ * Create a new empty %SoupSoapResponse object, which can be modified with the
+ * accessor functions provided with this class.
+ *
+ * Return value: the new %SoupSoapResponse (or %NULL if there was an error).
+ */
+SoupSoapResponse *
+soup_soap_response_new (void)
+{
+ SoupSoapResponse *response;
+
+ response = g_object_new (SOUP_TYPE_SOAP_RESPONSE, NULL);
+ return response;
+}
+
+/**
+ * soup_soap_response_new_from_string:
+ * @xmlstr: the XML string to parse.
+ *
+ * Create a new %SoupSoapResponse object from the XML string contained in
+ * @xmlstr.
+ *
+ * Return value: the new %SoupSoapResponse (or %NULL if there was an error).
+ */
+SoupSoapResponse *
+soup_soap_response_new_from_string (const char *xmlstr)
+{
+ SoupSoapResponse *response;
+
+ g_return_val_if_fail (xmlstr != NULL, NULL);
+
+ response = g_object_new (SOUP_TYPE_SOAP_RESPONSE, NULL);
+ if (!soup_soap_response_from_string (response, xmlstr)) {
+ g_object_unref (response);
+ return NULL;
+ }
+
+ return response;
+}
+
+/**
+ * soup_soap_response_from_string:
+ * @response: the %SoupSoapResponse object.
+ * @xmlstr: XML string to parse.
+ *
+ * Parses the string contained in @xmlstr and sets all properties from it in the
+ * @response object.
+ *
+ * Return value: %TRUE if successful, %FALSE otherwise.
+ */
+gboolean
+soup_soap_response_from_string (SoupSoapResponse *response, const char *xmlstr)
+{
+ xmlDocPtr old_doc = NULL;
+
+ g_return_val_if_fail (SOUP_IS_SOAP_RESPONSE (response), FALSE);
+ g_return_val_if_fail (xmlstr != NULL, FALSE);
+
+ /* clear the previous contents */
+ if (response->priv->xmldoc)
+ old_doc = response->priv->xmldoc;
+
+ /* parse the string */
+ response->priv->xmldoc = xmlParseMemory (xmlstr, strlen (xmlstr));
+ if (!response->priv->xmldoc) {
+ response->priv->xmldoc = old_doc;
+ return FALSE;
+ }
+
+ xmlFreeDoc (old_doc);
+
+ return TRUE;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003, Novell, Inc.
+ */
+
+#ifndef SOUP_SOAP_RESPONSE_H
+#define SOUP_SOAP_RESPONSE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define SOUP_TYPE_SOAP_RESPONSE (soup_soap_response_get_type ())
+#define SOUP_SOAP_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUP_TYPE_SOAP_RESPONSE, SoupSoapResponse))
+#define SOUP_SOAP_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOUP_TYPE_SOAP_RESPONSE, SoupSoapResponseClass))
+#define SOUP_IS_SOAP_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOUP_TYPE_SOAP_RESPONSE))
+#define SOUP_IS_SOAP_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SOUP_TYPE_SOAP_RESPONSE))
+#define SOUP_SOAP_RESPONSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_SOAP_RESPONSE, SoupSoapResponseClass))
+
+typedef struct _SoupSoapResponsePrivate SoupSoapResponsePrivate;
+
+typedef struct {
+ GObject parent;
+ SoupSoapResponsePrivate *priv;
+} SoupSoapResponse;
+
+typedef struct {
+ GObjectClass parent_class;
+} SoupSoapResponseClass;
+
+GType soup_soap_response_get_type (void);
+
+SoupSoapResponse *soup_soap_response_new (void);
+SoupSoapResponse *soup_soap_response_new_from_string (const char *xmlstr);
+
+gboolean soup_soap_response_from_string (SoupSoapResponse *response, const char *xmlstr);
+char *soup_soap_response_to_string (SoupSoapResponse *response);
+
+G_END_DECLS
+
+#endif