std_liveprop.c revision 5fbee309625f7a631a42d7dc05bbfa0d45a926cc
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering/* ====================================================================
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * The Apache Software License, Version 1.1
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Copyright (c) 2000 The Apache Software Foundation. All rights
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Redistribution and use in source and binary forms, with or without
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * modification, are permitted provided that the following conditions
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering * 1. Redistributions of source code must retain the above copyright
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering * notice, this list of conditions and the following disclaimer.
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * 2. Redistributions in binary form must reproduce the above copyright
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * notice, this list of conditions and the following disclaimer in
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * the documentation and/or other materials provided with the
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * distribution.
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * 3. The end-user documentation included with the redistribution,
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering * if any, must include the following acknowledgment:
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * "This product includes software developed by the
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Apache Software Foundation (http://www.apache.org/)."
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Alternately, this acknowledgment may appear in the software itself,
56ba3c78ae35065064c4289a0c8e22a81256af20Zbigniew Jędrzejewski-Szmek * if and wherever such third-party acknowledgments normally appear.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * 4. The names "Apache" and "Apache Software Foundation" must
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * not be used to endorse or promote products derived from this
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * software without prior written permission. For written
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * permission, please contact apache@apache.org.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * 5. Products derived from this software may not be called "Apache",
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * nor may "Apache" appear in their name, without prior written
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * permission of the Apache Software Foundation.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * ====================================================================
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * This software consists of voluntary contributions made by many
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * individuals on behalf of the Apache Software Foundation. For more
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * information on the Apache Software Foundation, please see
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek/* forward-declare */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const dav_hooks_liveprop dav_core_hooks_liveprop;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** The namespace URIs that we use. There will only ever be "DAV:".
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const char * const dav_core_namespace_uris[] =
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** Define each of the core properties that this provider will handle.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** Note that all of them are in the DAV: namespace, which has a
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** provider-local index of 0.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const dav_liveprop_spec dav_core_props[] =
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "comment", DAV_PROPID_comment, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "creator-displayname", DAV_PROPID_creator_displayname, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "displayname", DAV_PROPID_displayname, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "resourcetype", DAV_PROPID_resourcetype, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "source", DAV_PROPID_source, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "supported-live-property-set",
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek DAV_PROPID_supported_live_property_set, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "supported-method-set", DAV_PROPID_supported_method_set, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "supported-report-set", DAV_PROPID_supported_report_set, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0 } /* sentinel */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const dav_liveprop_group dav_core_liveprop_group =
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic dav_prop_insert dav_core_insert_prop(const dav_resource *resource,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* fall through */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* ### should we denote lock-null resources? */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = ""; /* becomes: <D:resourcetype/> */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_WORKSPACE:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_ACTIVITY:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* ### bad juju */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_supported_live_property_set:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* ### insert all live property names ### */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* ### leverage code from dav_method_options ### */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* ### where to get "r" ??? */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering const dav_hooks_vsn *vsn_hooks = dav_get_vsn_hooks(r);
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering if ((err = (*vsn_hooks->avail_reports)(resource,
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "DAV:supported-report-set could not "
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "be determined due to a problem "
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "fetching the available reports "
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "for this resource.",
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* ### can't return err... sigh. punt for now. */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* no reports are defined. break with value="" */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering for (; reports->nmspace != NULL; ++reports) {
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* Note: presume reports->namespace is XML/URL quoted */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering const char *v = apr_psprintf(p, "<%s xmlns=\"%s\"/>" DEBUG_CR,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek reports->name, reports->nmspace);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* This isn't very memory-efficient, but there should only
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek be a small number of reports */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = apr_pstrcat(p, value, v, NULL);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* above code disabled. FALLTHROUGH */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_creator_displayname:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek ** This property is known, but not defined as a liveprop. However,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek ** it may be a dead property.
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering /* assert: value != NULL */
if (insvalue) {
return which;
int *defer_to_dead)
return NULL;
const char *name,