summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2013-12-14 13:16:17 +0100
committerJens Georg <mail@jensge.org>2014-05-31 09:50:54 +0200
commitfcd094d21baa999f56945ebfcce1f072950054ee (patch)
treebf6fb52db6589b1d350a80f54f7845dc4410ef08
parent8e0e8148675925767be7bedf81e6c4e8185d1be5 (diff)
downloadgupnp-av-fcd094d21baa999f56945ebfcce1f072950054ee.tar.gz
Add utility functions for ns creation
https://bugzilla.gnome.org/show_bug.cgi?id=705564
-rw-r--r--libgupnp-av/gupnp-didl-lite-parser.c28
-rw-r--r--libgupnp-av/gupnp-didl-lite-writer.c36
-rw-r--r--libgupnp-av/xml-util.c33
-rw-r--r--libgupnp-av/xml-util.h14
4 files changed, 67 insertions, 44 deletions
diff --git a/libgupnp-av/gupnp-didl-lite-parser.c b/libgupnp-av/gupnp-didl-lite-parser.c
index c5b8500..8f31605 100644
--- a/libgupnp-av/gupnp-didl-lite-parser.c
+++ b/libgupnp-av/gupnp-didl-lite-parser.c
@@ -304,29 +304,17 @@ gupnp_didl_lite_parser_parse_didl_recursive (GUPnPDIDLLiteParser *parser,
/* Create UPnP and DC namespaces if they don't exist */
if (! upnp_ns)
- upnp_ns = xmlNewNs (xmlDocGetRootElement (doc),
- (unsigned char *)
- "urn:schemas-upnp-org:metadata-1-0/upnp/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_UPNP);
+ upnp_ns = xml_util_create_namespace (xmlDocGetRootElement (doc),
+ GUPNP_XML_NAMESPACE_UPNP);
if (! dc_ns)
- dc_ns = xmlNewNs (xmlDocGetRootElement (doc),
- (unsigned char *)
- "http://purl.org/dc/elements/1.1/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_DC);
+ dc_ns = xml_util_create_namespace (xmlDocGetRootElement (doc),
+ GUPNP_XML_NAMESPACE_DC);
if (! dlna_ns)
- dlna_ns = xmlNewNs (xmlDocGetRootElement (doc),
- (unsigned char *)
- "urn:schemas-dlna-org:metadata-2-0/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_DLNA);
+ dlna_ns = xml_util_create_namespace (xmlDocGetRootElement (doc),
+ GUPNP_XML_NAMESPACE_DLNA);
if (! pv_ns)
- pv_ns = xmlNewNs (xmlDocGetRootElement (doc),
- (unsigned char *)
- "http://www.pv.com/pvns/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_PV);
+ pv_ns = xml_util_create_namespace (xmlDocGetRootElement (doc),
+ GUPNP_XML_NAMESPACE_PV);
xml_doc = gupnp_xml_doc_new (doc);
diff --git a/libgupnp-av/gupnp-didl-lite-writer.c b/libgupnp-av/gupnp-didl-lite-writer.c
index 558eb47..1ced042 100644
--- a/libgupnp-av/gupnp-didl-lite-writer.c
+++ b/libgupnp-av/gupnp-didl-lite-writer.c
@@ -399,33 +399,21 @@ gupnp_didl_lite_writer_constructed (GObject *object)
(unsigned char *) "DIDL-Lite",
NULL);
xmlDocSetRootElement (priv->xml_doc->doc, priv->xml_node);
- priv->dc_ns = xmlNewNs (priv->xml_node,
- (unsigned char *)
- "http://purl.org/dc/elements/1.1/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_DC);
- priv->upnp_ns = xmlNewNs (priv->xml_node,
- (unsigned char *)
- "urn:schemas-upnp-org:metadata-1-0/upnp/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_UPNP);
+ priv->dc_ns = xml_util_create_namespace (priv->xml_node,
+ GUPNP_XML_NAMESPACE_DC);
+
+ priv->upnp_ns = xml_util_create_namespace (priv->xml_node,
+ GUPNP_XML_NAMESPACE_UPNP);
/* Not adding dlna namespace declaration to any node yet.
Add the namespace to Didl-Lite element only if any of the child
nodes have dlna namespace prefix attributes */
- priv->dlna_ns = xmlNewNs (NULL,
- (unsigned char *)
- "urn:schemas-dlna-org:metadata-1-0/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_DLNA);
- priv->pv_ns = xmlNewNs (priv->xml_node,
- (unsigned char *)
- "http://www.pv.com/pvns/",
- (unsigned char *)
- GUPNP_DIDL_LITE_WRITER_NAMESPACE_PV);
- xmlNewNs (priv->xml_node,
- (unsigned char *)
- "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/",
- NULL);
+ priv->dlna_ns = xml_util_create_namespace (NULL,
+ GUPNP_XML_NAMESPACE_DLNA);
+ priv->pv_ns = xml_util_create_namespace (priv->xml_node,
+ GUPNP_XML_NAMESPACE_PV);
+
+ xml_util_create_namespace (priv->xml_node,
+ GUPNP_XML_NAMESPACE_DIDL_LITE);
if (priv->language)
xmlSetProp (priv->xml_node,
diff --git a/libgupnp-av/xml-util.c b/libgupnp-av/xml-util.c
index 4543c74..a8de2c8 100644
--- a/libgupnp-av/xml-util.c
+++ b/libgupnp-av/xml-util.c
@@ -27,6 +27,23 @@
#include "xml-util.h"
+typedef struct _GUPnPXMLNamespaceDescription
+{
+ char *uri;
+ char *prefix;
+} GUPnPXMLNamespaceDescription;
+
+
+static GUPnPXMLNamespaceDescription gupnp_xml_namespaces[] =
+{
+ { "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/", NULL },
+ { "http://purl.org/dc/elements/1.1/", "dc" },
+ { "urn:schemas-dlna-org:metadata-1-0/", "dlna" },
+ { "http://www.pv.com/pvns/", "pv" },
+ { "urn:schemas-upnp-org:metadata-1-0/upnp/", "upnp" },
+ NULL
+};
+
xmlNode *
xml_util_get_element (xmlNode *node,
...)
@@ -411,3 +428,19 @@ xml_util_get_attributes_map (xmlNode *node)
return attributes_map;
}
+
+/**
+ * xml_util_create_namespace:
+ * @root: (allow-none): Document root node or %NULL for anonymous ns.
+ * @ns: Namespace
+ * @returns: Newly created namespace on root node
+ */
+xmlNsPtr
+xml_util_create_namespace (xmlNodePtr root, GUPnPXMLNamespace ns)
+{
+ g_return_val_if_fail (ns < GUPNP_XML_NAMESPACE_COUNT, NULL);
+
+ return xmlNewNs (root,
+ (const xmlChar *) gupnp_xml_namespaces[ns].uri,
+ (const xmlChar *) gupnp_xml_namespaces[ns].prefix);
+}
diff --git a/libgupnp-av/xml-util.h b/libgupnp-av/xml-util.h
index ffa5e50..8d34b4b 100644
--- a/libgupnp-av/xml-util.h
+++ b/libgupnp-av/xml-util.h
@@ -30,6 +30,16 @@
#include <libxml/tree.h>
#include <stdarg.h>
+typedef enum _GUPnPXMLNamespace
+{
+ GUPNP_XML_NAMESPACE_DIDL_LITE,
+ GUPNP_XML_NAMESPACE_DC,
+ GUPNP_XML_NAMESPACE_DLNA,
+ GUPNP_XML_NAMESPACE_PV,
+ GUPNP_XML_NAMESPACE_UPNP,
+ GUPNP_XML_NAMESPACE_COUNT
+} GUPnPXMLNamespace;
+
G_BEGIN_DECLS
/* Misc utilities for inspecting xmlNodes */
@@ -117,6 +127,10 @@ xml_util_copy_node (xmlNode *node);
G_GNUC_INTERNAL GHashTable *
xml_util_get_attributes_map (xmlNode *node);
+G_GNUC_INTERNAL xmlNsPtr
+xml_util_create_namespace (xmlNodePtr root,
+ GUPnPXMLNamespace ns);
+
G_END_DECLS
#endif /* __XML_UTIL_H__ */