From: Graham Leggett Date: Sun, 12 Jun 2016 20:23:21 +0000 (+0000) Subject: mod_dav: Add dav_begin_multistatus, dav_send_one_response, X-Git-Tag: 2.5.0-alpha~1510 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9d10b5661a16331ae028aed6746be634c832a71f;p=thirdparty%2Fapache%2Fhttpd.git mod_dav: Add dav_begin_multistatus, dav_send_one_response, dav_finish_multistatus, dav_send_multistatus, dav_handle_err, dav_failed_proppatch, dav_success_proppatch to mod_dav.h. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1748047 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 456aa6a8e8f..06a6af0159b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,11 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 + *) mod_dav: Add dav_begin_multistatus, dav_send_one_response, + dav_finish_multistatus, dav_send_multistatus, dav_handle_err, + dav_failed_proppatch, dav_success_proppatch to mod_dav.h. + [Jari Urpalainen , Graham Leggett] + *) mod_dav: Add dav_get_provider_name() function to obtain the name of the provider from mod_dav. [Jari Urpalainen ] diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 7dd811bc9dd..e6d23d37fac 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -526,6 +526,10 @@ * 20160315.3 (2.5.0-dev) Add childtags to dav_error. * 20160608.1 (2.5.0-dev) Rename ap_casecmpstr[n]() to ap_cstr_casecmp[n]() * 20160608.2 (2.5.0-dev) Add dav_get_provider_name. + * 20160608.3 (2.5.0-dev) Add dav_begin_multistatus, dav_send_one_response, + * dav_finish_multistatus, dav_send_multistatus, + * dav_handle_err, dav_failed_proppatch, + * dav_success_proppatch. */ #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */ @@ -533,7 +537,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20160608 #endif -#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 3 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c index 1459acc1b68..a534b9ffe14 100644 --- a/modules/dav/main/mod_dav.c +++ b/modules/dav/main/mod_dav.c @@ -443,10 +443,10 @@ static const char *dav_xml_escape_uri(apr_pool_t *p, const char *uri) [Presumably the tag has already been written; this routine is shared by dav_send_multistatus and dav_stream_response.] */ -static void dav_send_one_response(dav_response *response, - apr_bucket_brigade *bb, - ap_filter_t *output, - apr_pool_t *pool) +DAV_DECLARE(void) dav_send_one_response(dav_response *response, + apr_bucket_brigade *bb, + ap_filter_t *output, + apr_pool_t *pool) { apr_text *t = NULL; @@ -505,9 +505,9 @@ static void dav_send_one_response(dav_response *response, response and write tag into BB, destined for R->output_filters. Use xml NAMESPACES in initial tag, if non-NULL. */ -static void dav_begin_multistatus(apr_bucket_brigade *bb, - request_rec *r, int status, - apr_array_header_t *namespaces) +DAV_DECLARE(void) dav_begin_multistatus(apr_bucket_brigade *bb, + request_rec *r, int status, + apr_array_header_t *namespaces) { /* Set the correct status and Content-Type */ r->status = status; @@ -530,8 +530,8 @@ static void dav_begin_multistatus(apr_bucket_brigade *bb, } /* Finish a multistatus response started by dav_begin_multistatus: */ -static apr_status_t dav_finish_multistatus(request_rec *r, - apr_bucket_brigade *bb) +DAV_DECLARE(apr_status_t) dav_finish_multistatus(request_rec *r, + apr_bucket_brigade *bb) { apr_bucket *b; @@ -545,9 +545,9 @@ static apr_status_t dav_finish_multistatus(request_rec *r, return ap_pass_brigade(r->output_filters, bb); } -static void dav_send_multistatus(request_rec *r, int status, - dav_response *first, - apr_array_header_t *namespaces) +DAV_DECLARE(void) dav_send_multistatus(request_rec *r, int status, + dav_response *first, + apr_array_header_t *namespaces) { apr_pool_t *subpool; apr_bucket_brigade *bb = apr_brigade_create(r->pool, @@ -600,8 +600,8 @@ static void dav_log_err(request_rec *r, dav_error *err, int level) * - repos_hooks->copy_resource * - vsn_hooks->update */ -static int dav_handle_err(request_rec *r, dav_error *err, - dav_response *response) +DAV_DECLARE(int) dav_handle_err(request_rec *r, dav_error *err, + dav_response *response) { /* log the errors */ dav_log_err(r, err, APLOG_ERR); @@ -2178,8 +2178,8 @@ static int dav_method_propfind(request_rec *r) return DONE; } -static apr_text * dav_failed_proppatch(apr_pool_t *p, - apr_array_header_t *prop_ctx) +DAV_DECLARE(apr_text *) dav_failed_proppatch(apr_pool_t *p, + apr_array_header_t *prop_ctx) { apr_text_header hdr = { 0 }; int i = prop_ctx->nelts; @@ -2239,7 +2239,8 @@ static apr_text * dav_failed_proppatch(apr_pool_t *p, return hdr.first; } -static apr_text * dav_success_proppatch(apr_pool_t *p, apr_array_header_t *prop_ctx) +DAV_DECLARE(apr_text *) dav_success_proppatch(apr_pool_t *p, + apr_array_header_t *prop_ctx) { apr_text_header hdr = { 0 }; int i = prop_ctx->nelts; diff --git a/modules/dav/main/mod_dav.h b/modules/dav/main/mod_dav.h index 6104ae6997e..93b9b4e27d0 100644 --- a/modules/dav/main/mod_dav.h +++ b/modules/dav/main/mod_dav.h @@ -185,6 +185,23 @@ DAV_DECLARE(dav_error*) dav_push_error(apr_pool_t *p, int status, int error_id, */ DAV_DECLARE(dav_error*) dav_join_error(dav_error* dest, dav_error* src); +typedef struct dav_response dav_response; + +/* +** dav_handle_err() +** +** Handle the standard error processing. must be non-NULL. +** +** is set by the following: +** - dav_validate_request() +** - dav_add_lock() +** - repos_hooks->remove_resource +** - repos_hooks->move_resource +** - repos_hooks->copy_resource +** - vsn_hooks->update +*/ +DAV_DECLARE(int) dav_handle_err(request_rec *r, dav_error *err, + dav_response *response); /* error ID values... */ @@ -517,6 +534,41 @@ typedef enum { #define DAV_STYLE_RFC822 2 #define DAV_TIMEBUF_SIZE 30 +/* Write a complete RESPONSE object out as a xml + * element. Data is sent into brigade BB, which is auto-flushed into + * OUTPUT filter stack. Use POOL for any temporary allocations. + * + * [Presumably the tag has already been written; this + * routine is shared by dav_send_multistatus and dav_stream_response.] + */ +DAV_DECLARE(void) dav_send_one_response(dav_response *response, + apr_bucket_brigade *bb, + ap_filter_t *output, + apr_pool_t *pool); + +/* Factorized helper function: prep request_rec R for a multistatus + * response and write tag into BB, destined for + * R->output_filters. Use xml NAMESPACES in initial tag, if + * non-NULL. + */ +DAV_DECLARE(void) dav_begin_multistatus(apr_bucket_brigade *bb, + request_rec *r, int status, + apr_array_header_t *namespaces); + +/* Finish a multistatus response started by dav_begin_multistatus: */ +DAV_DECLARE(apr_status_t) dav_finish_multistatus(request_rec *r, + apr_bucket_brigade *bb); + +/* Send a multistatus response */ +DAV_DECLARE(void) dav_send_multistatus(request_rec *r, int status, + dav_response *first, + apr_array_header_t *namespaces); + +DAV_DECLARE(apr_text *) dav_failed_proppatch(apr_pool_t *p, + apr_array_header_t *prop_ctx); +DAV_DECLARE(apr_text *) dav_success_proppatch(apr_pool_t *p, + apr_array_header_t *prop_ctx); + DAV_DECLARE(int) dav_get_depth(request_rec *r, int def_depth); DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc,