elements and property elements that need to be taken into account
when generating a property. The document element and property element
are made available in the dav_liveprop_elem structure under the
DAV_PROP_ELEMENT key in the resource pool.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@
1879889 13f79535-47bb-0310-9956-
ffa450edef68
-*- coding: utf-8 -*-
Changes with Apache 2.5.1
+ *) mod_dav: Some DAV extensions, like CalDAV, specify both document
+ elements and property elements that need to be taken into account
+ when generating a property. The document element and property element
+ are made available in the dav_liveprop_elem structure under the
+ DAV_PROP_ELEMENT key in the resource pool. [Graham Leggett]
+
*) mod_dav: Add utility functions dav_validate_root_ns(),
dav_find_child_ns(), dav_find_next_ns(), dav_find_attr_ns() and
dav_find_attr() so that other modules get to play too.
* 20200705.1 (2.5.1-dev) Add dav_validate_root_ns(), dav_find_child_ns(),
* dav_find_next_ns(), dav_find_attr_ns() and
* dav_find_attr().
+ * 20200705.2 (2.5.1-dev) Add dav_liveprop_elem structure and
+ * DAV_PROP_ELEMENT key.
*/
#define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20200705
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */
/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
** property, and does not want it handled as a dead property, it should
** return DAV_PROP_INSERT_NOTSUPP.
**
+ ** Some DAV extensions, like CalDAV, specify both document elements
+ ** and property elements that need to be taken into account when
+ ** generating a property. The document element and property element
+ ** are made available in the dav_liveprop_elem structure under the
+ ** DAV_PROP_ELEMENT key in the resource pool, accessible as follows:
+ **
+ ** apr_pool_userdata_get(&elem, DAV_PROP_ELEMENT, resource->pool);
+ **
** Returns one of DAV_PROP_INSERT_* based on what happened.
**
** ### we may need more context... ie. the lock database
DAV_DECLARE(void) dav_add_all_liveprop_xmlns(apr_pool_t *p,
apr_text_header *phdr);
+/*
+ ** When calling insert_prop(), the request element is associated with
+ ** the pool userdata attached to the resource. Access as follows:
+ **
+ ** apr_pool_userdata_get(&elem, DAV_PROP_ELEMENT, resource->pool);
+ **
+ */
+#define DAV_PROP_ELEMENT "mod_dav-element"
+
+typedef struct {
+ const apr_xml_doc *doc;
+ const apr_xml_elem *elem;
+} dav_liveprop_elem;
+
/*
** The following three functions are part of mod_dav's internal handling
** for the core WebDAV properties. They are not part of mod_dav's API.
apr_text_header hdr_ns = { 0 };
int have_good = 0;
dav_get_props_result result = { 0 };
+ dav_liveprop_elem *element;
char *marks_liveprop;
dav_xmlns_info *xi;
int xi_filled = 0;
+ /* we lose both the document and the element when calling (insert_prop),
+ * make these available in the pool.
+ */
+ element = apr_pcalloc(propdb->resource->pool, sizeof(dav_liveprop_elem));
+ element->doc = doc;
+ apr_pool_userdata_setn(element, DAV_PROP_ELEMENT, NULL, propdb->resource->pool);
+
/* ### NOTE: we should pass in TWO buffers -- one for keys, one for
the marks */
dav_prop_insert inserted;
dav_prop_name name;
+ element->elem = elem;
+
/*
** First try live property providers; if they don't handle
** the property, then try looking it up in the propdb.