summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2009-09-11 15:51:26 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2009-09-11 15:51:26 +0000
commit2f91efc9c116f042366bc5e8ef6af168fa843641 (patch)
treeb52f2768ad9561ca659436a45acb2e99de2324e0
parent8ba526872a1699aae955a51ce85cf372ef462a7d (diff)
downloadlasso-2f91efc9c116f042366bc5e8ef6af168fa843641.tar.gz
lasso-2f91efc9c116f042366bc5e8ef6af168fa843641.tar.xz
lasso-2f91efc9c116f042366bc5e8ef6af168fa843641.zip
XML: add support for free xml content to LassoMiscTextNode
* lasso/xml/misc_text_node.c: * lasso/xml/misc_text_node.h: it is often necessary to be able to put completely determined content inside lasso generated request (for example when copying an assertion for a Bearer authentication method). In this case you can use lasso_node_get_original_xml_node to get at the original content and lasso_misc_text_node_new_with_xml_node to get a LassNode with the same content. There are two additional function to acces this xml payload: lasso_misc_text_node_get_xml_content and lasso_misc_text_node_set_xml_content.
-rw-r--r--lasso/xml/misc_text_node.c78
-rw-r--r--lasso/xml/misc_text_node.h10
2 files changed, 81 insertions, 7 deletions
diff --git a/lasso/xml/misc_text_node.c b/lasso/xml/misc_text_node.c
index 782c8719..b096826b 100644
--- a/lasso/xml/misc_text_node.c
+++ b/lasso/xml/misc_text_node.c
@@ -22,13 +22,21 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "private.h"
-#include "misc_text_node.h"
+#include <libxml/tree.h>
+#include "../utils.h"
+#include "./private.h"
+#include "./misc_text_node.h"
/*****************************************************************************/
/* private methods */
/*****************************************************************************/
+typedef struct {
+ xmlNode *xml_content;
+} LassoMiscTextNodePrivate;
+
+#define LASSO_MISC_TEXT_NODE_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_MISC_TEXT_NODE, LassoMiscTextNodePrivate))
static struct XmlSnippet schema_snippets[] = {
{ "content", SNIPPET_TEXT_CHILD,
@@ -57,6 +65,12 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
{
xmlNode *xmlnode;
xmlNs *ns;
+ LassoMiscTextNodePrivate *private;
+
+ private = LASSO_MISC_TEXT_NODE_GET_PRIVATE(node);
+ if (private->xml_content) {
+ return xmlCopyNode(private->xml_content, 1);
+ }
if (LASSO_MISC_TEXT_NODE(node)->text_child) {
return xmlNewText((xmlChar*)(LASSO_MISC_TEXT_NODE(node)->content));
@@ -97,10 +111,13 @@ static void
finalize(GObject *object)
{
LassoMiscTextNode *t = LASSO_MISC_TEXT_NODE(object);
+ LassoMiscTextNodePrivate *private;
- g_free(t->name);
- g_free(t->ns_href);
- g_free(t->ns_prefix);
+ private = LASSO_MISC_TEXT_NODE_GET_PRIVATE(object);
+ lasso_release_xml_node(private->xml_content);
+ lasso_release_string(t->name);
+ lasso_release_string(t->ns_href);
+ lasso_release_string(t->ns_prefix);
G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(t));
}
@@ -125,6 +142,7 @@ class_init(LassoMiscTextNodeClass *klass)
lasso_node_class_set_nodename(nclass, "XXX");
lasso_node_class_add_snippets(nclass, schema_snippets);
+ g_type_class_add_private(klass, sizeof(LassoMiscTextNodePrivate));
}
GType
@@ -153,6 +171,38 @@ lasso_misc_text_node_get_type()
}
/**
+ * lasso_misc_text_node_get_xml_content:
+ * @misc_text_node: a #LassoMiscTextNode
+ *
+ * Return the xml content in this node.
+ *
+ * Return value: an #xmlNode or NULL.
+ */
+xmlNode*
+lasso_misc_text_node_get_xml_content(LassoMiscTextNode *misc_text_node)
+{
+ LassoMiscTextNodePrivate *private_data;
+
+ private_data = LASSO_MISC_TEXT_NODE_GET_PRIVATE(misc_text_node);
+ return private_data->xml_content;
+}
+
+/**
+ * lasso_misc_text_node_set_xml_content:
+ * @misc_text_node: a #LassoMiscTextNode
+ *
+ * Set the xml content of this #LassoMiscTextNode
+ */
+void
+lasso_misc_text_node_set_xml_content(LassoMiscTextNode *misc_text_node, xmlNode *node)
+{
+ LassoMiscTextNodePrivate *private_data;
+
+ private_data = LASSO_MISC_TEXT_NODE_GET_PRIVATE(misc_text_node);
+ lasso_assign_xml_node(private_data->xml_content, node);
+}
+
+/**
* lasso_misc_text_node_new:
*
* Creates a new #LassoMiscTextNode object.
@@ -175,7 +225,7 @@ lasso_misc_text_node_new()
*
* Return value: a newly created #LassoMiscTextNode object
**/
-LassoNode*
+LassoMiscTextNode*
lasso_misc_text_node_new_with_string(char *content)
{
LassoMiscTextNode *object;
@@ -184,3 +234,19 @@ lasso_misc_text_node_new_with_string(char *content)
return LASSO_NODE(object);
}
+/**
+ * lasso_misc_text_node_new_with_xml_node:
+ * @xml_node: an #xmlNode
+ *
+ * Creates a new #LassoMiscTextNode object and initialize it with @xml_node.
+ *
+ * Return value: a newly created #LassoMiscTextNode object
+ */
+LassoMiscTextNode*
+lasso_misc_text_node_new_with_xml_node(xmlNode *xml_node)
+{
+ LassoMiscTextNode *object;
+ object = g_object_new(LASSO_TYPE_MISC_TEXT_NODE, NULL);
+ lasso_misc_text_node_set_xml_content(object, xml_node);
+ return (LassoNode*)object;
+}
diff --git a/lasso/xml/misc_text_node.h b/lasso/xml/misc_text_node.h
index f6733bed..23f7d211 100644
--- a/lasso/xml/misc_text_node.h
+++ b/lasso/xml/misc_text_node.h
@@ -68,10 +68,18 @@ struct _LassoMiscTextNodeClass {
LassoNodeClass parent;
};
+LASSO_EXPORT void lasso_misc_text_node_set_xml_content(LassoMiscTextNode *misc_text_node,
+ xmlNode *node);
+
+LASSO_EXPORT xmlNode* lasso_misc_text_node_get_xml_content(LassoMiscTextNode *misc_text_node);
+
LASSO_EXPORT GType lasso_misc_text_node_get_type(void);
+
LASSO_EXPORT LassoNode* lasso_misc_text_node_new(void);
-LASSO_EXPORT LassoNode* lasso_misc_text_node_new_with_string(char *content);
+LASSO_EXPORT LassoMiscTextNode* lasso_misc_text_node_new_with_string(char *content);
+
+LASSO_EXPORT LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node(xmlNode *xml_node);
#ifdef __cplusplus