mirror of
https://github.com/apache/httpd.git
synced 2025-08-04 05:42:12 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1211495 13f79535-47bb-0310-9956-ffa450edef68
183 lines
5.7 KiB
C
183 lines
5.7 KiB
C
/*
|
|
** Licensed to the Apache Software Foundation (ASF) under one or more
|
|
** contributor license agreements. See the NOTICE file distributed with
|
|
** this work for additional information regarding copyright ownership.
|
|
** The ASF licenses this file to You under the Apache License, Version 2.0
|
|
** (the "License"); you may not use this file except in compliance with
|
|
** the License. You may obtain a copy of the License at
|
|
**
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
**
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
** See the License for the specific language governing permissions and
|
|
** limitations under the License.
|
|
*/
|
|
|
|
#ifndef APREQ_APACHE2_H
|
|
#define APREQ_APACHE2_H
|
|
|
|
#include "apreq_module.h"
|
|
#include "apr_optional.h"
|
|
#include <httpd.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/**
|
|
* @defgroup mod_apreq2 Apache 2.X Filter Module
|
|
* @ingroup APACHE_MODS
|
|
* @brief mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X.
|
|
*
|
|
* mod_apreq2 provides the "APREQ2" input filter for using libapreq2
|
|
* (and allow its parsed data structures to be shared) within
|
|
* the Apache 2.X webserver. Using it, libapreq2 works properly
|
|
* in every phase of the HTTP request, from translation handlers
|
|
* to output filters, and even for subrequests / internal redirects.
|
|
*
|
|
* <hr>
|
|
*
|
|
* <h2>Activating mod_apreq2 in Apache 2.X</h2>
|
|
*
|
|
* The installation process triggered by
|
|
* <code>% make install</code>
|
|
* <em>will not modify your webserver's config file</em>. Hence,
|
|
* be sure you activate it on startup by adding a LoadModule directive
|
|
* to your webserver config; e.g.
|
|
*
|
|
* @code
|
|
*
|
|
* LoadModule apreq_module modules/mod_apreq2.so
|
|
*
|
|
* @endcode
|
|
*
|
|
* The mod_apreq2 filter is named "apreq2", and may be used in Apache's
|
|
* input filter directives, e.g.
|
|
* @code
|
|
*
|
|
* AddInputFilter apreq2 # or
|
|
* SetInputFilter apreq2
|
|
*
|
|
* @endcode
|
|
*
|
|
* However, this is not required because libapreq2 will add the filter (only)
|
|
* if it's necessary. You just need to ensure that your module invokes
|
|
* apreq_handle_apache2() <em>before the content handler ultimately reads
|
|
* from the input filter chain</em>. It is important to realize that no
|
|
* matter how the input filters are initially arranged, the APREQ2 filter
|
|
* will attempt to reposition itself to be the last input filter to read the
|
|
* data.
|
|
*
|
|
* If you want to use other input filters to transform the incoming HTTP
|
|
* request data, is important to register those filters with Apache
|
|
* as having type AP_FTYPE_CONTENT_SET or AP_FTYPE_RESOURCE. Due to the
|
|
* limitations of Apache's current input filter design, types higher than
|
|
* AP_FTYPE_CONTENT_SET may not work properly whenever the apreq filter is
|
|
* active.
|
|
*
|
|
* This is especially true when a content handler uses libapreq2 to parse
|
|
* some of the post data before doing an internal redirect. Any input
|
|
* filter subsequently added to the redirected request will bypass the
|
|
* original apreq filter (and therefore lose access to some of the original
|
|
* post data), unless its type is less than the type of the apreq filter
|
|
* (currently AP_FTYPE_PROTOCOL-1).
|
|
*
|
|
*
|
|
* <H2>Server Configuration Directives</H2>
|
|
*
|
|
* <TABLE class="qref">
|
|
* <CAPTION>Per-directory commands for mod_apreq2</CAPTION>
|
|
* <TR>
|
|
* <TH>Directive</TH>
|
|
* <TH>Context</TH>
|
|
* <TH>Default</TH><TH>Description</TH>
|
|
* </TR>
|
|
* <TR class="odd">
|
|
* <TD>APREQ2_ReadLimit</TD>
|
|
* <TD>directory</TD>
|
|
* <TD> #APREQ_DEFAULT_READ_LIMIT </TD>
|
|
* <TD> Maximum number of bytes mod_apreq2 will send off to libapreq2
|
|
* for parsing. mod_apreq2 will log this event and subsequently
|
|
* remove itself from the filter chain.
|
|
* </TD>
|
|
* </TR>
|
|
* <TR>
|
|
* <TD>APREQ2_BrigadeLimit</TD>
|
|
* <TD>directory</TD>
|
|
* <TD>#APREQ_DEFAULT_BRIGADE_LIMIT</TD>
|
|
* <TD> Maximum number of bytes mod_apreq2 will let accumulate
|
|
* within the heap-buckets in a brigade. Excess data will be
|
|
* spooled to an appended file bucket.
|
|
* </TD>
|
|
* </TR>
|
|
* <TR class="odd">
|
|
* <TD>APREQ2_TempDir</TD>
|
|
* <TD>directory</TD>
|
|
* <TD>NULL</TD>
|
|
* <TD> Sets the location of the temporary directory apreq will use to spool
|
|
* overflow brigade data (based on the APREQ2_BrigadeLimit setting).
|
|
* If left unset, libapreq2 will select a platform-specific location
|
|
* via apr_temp_dir_get().
|
|
* </TD>
|
|
* </TR>
|
|
* </TABLE>
|
|
*
|
|
* <H2>Implementation Details</H2>
|
|
* <PRE>
|
|
* XXX apreq as a normal input filter
|
|
* XXX apreq as a "virtual" content handler.
|
|
* XXX apreq as a transparent "tee".
|
|
* XXX apreq parser registration in post_config
|
|
* </PRE>
|
|
*
|
|
* @{
|
|
*/
|
|
/**
|
|
* Create an apreq handle which communicates with an Apache 2.X
|
|
* request_rec.
|
|
*/
|
|
APREQ_DECLARE(apreq_handle_t *) apreq_handle_apache2(request_rec *r);
|
|
|
|
/**
|
|
*
|
|
*
|
|
*/
|
|
#ifdef WIN32
|
|
typedef __declspec(dllexport) apreq_handle_t *
|
|
(__stdcall apr_OFN_apreq_handle_apache2_t) (request_rec *r);
|
|
#else
|
|
APR_DECLARE_OPTIONAL_FN(APREQ_DECLARE(apreq_handle_t *),
|
|
apreq_handle_apache2, (request_rec *r));
|
|
#endif
|
|
|
|
/**
|
|
* The mod_apreq2 filter is named "apreq2", and may be used in Apache's
|
|
* input filter directives, e.g.
|
|
* @code
|
|
*
|
|
* AddInputFilter apreq2 # or
|
|
* SetInputFilter apreq2
|
|
* @endcode
|
|
* See above
|
|
*/
|
|
#define APREQ_FILTER_NAME "apreq2"
|
|
|
|
/**
|
|
* The Apache2 Module Magic Number for use in the Apache 2.x module structures
|
|
* This gets bumped if changes in th4e API will break third party applications
|
|
* using this apache2 module
|
|
* @see APREQ_MODULE
|
|
*/
|
|
#define APREQ_APACHE2_MMN 20101207
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|