mirror of
https://github.com/apache/httpd.git
synced 2025-07-25 16:11:32 +00:00

Most add already been fixed when PR 59990 had been applied on trunk. Thx klemens git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1827669 13f79535-47bb-0310-9956-ffa450edef68
264 lines
7.4 KiB
C
264 lines
7.4 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_H
|
|
#define APREQ_H
|
|
|
|
#ifdef APREQ_DEBUG
|
|
#include <assert.h>
|
|
#endif
|
|
|
|
#include "ap_config.h"
|
|
#include "apr_tables.h"
|
|
#include <stddef.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @file apreq.h
|
|
* @brief Main header file...
|
|
* @ingroup libapreq2
|
|
*
|
|
* Define the common data structures.
|
|
*/
|
|
|
|
/**
|
|
* Read chucks of data in 64k blocks from the request
|
|
*/
|
|
|
|
#define APREQ_DEFAULT_READ_BLOCK_SIZE (64 * 1024)
|
|
|
|
/**
|
|
* 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.
|
|
* @see ap_set_read_limit
|
|
*/
|
|
#define APREQ_DEFAULT_READ_LIMIT (64 * 1024 * 1024)
|
|
/**
|
|
* 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
|
|
* @see ap_set_brigade_read_limit
|
|
*/
|
|
#define APREQ_DEFAULT_BRIGADE_LIMIT (256 * 1024)
|
|
|
|
/**
|
|
* Number of elements in the initial apr_table
|
|
* @see apr_table_make
|
|
*/
|
|
#define APREQ_DEFAULT_NELTS 8
|
|
|
|
|
|
|
|
/**
|
|
* Check to see if specified bit f is off in bitfield name
|
|
*/
|
|
#define APREQ_FLAGS_OFF(f, name) ((f) &= ~(name##_MASK << name##_BIT))
|
|
/**
|
|
* Check to see if specified bit f is on in bitfield name
|
|
*/
|
|
#define APREQ_FLAGS_ON(f, name) ((f) |= (name##_MASK << name##_BIT))
|
|
/**
|
|
* Get specified bit f in bitfield name
|
|
*/
|
|
#define APREQ_FLAGS_GET(f, name) (((f) >> name##_BIT) & name##_MASK)
|
|
/**
|
|
* Set specified bit f in bitfield name to value
|
|
* Note the below BIT/Mask defines are used sans the
|
|
* _BIT, _MASK because of the this define's \#\#_MASK, \#\#_BIT usage.
|
|
* Each come in a pair
|
|
*/
|
|
#define APREQ_FLAGS_SET(f, name, value) \
|
|
((f) = (((f) & ~(name##_MASK << name##_BIT)) \
|
|
| ((name##_MASK & (value)) << name##_BIT)))
|
|
|
|
/**
|
|
* Charset Bit
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_CHARSET_BIT 0
|
|
|
|
/**
|
|
* Charset Mask
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_CHARSET_MASK 255
|
|
|
|
/**
|
|
* Tainted Bit
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_TAINTED_BIT 8
|
|
/**
|
|
* Tainted Mask
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_TAINTED_MASK 1
|
|
|
|
/**
|
|
* Cookier Version Bit
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
|
|
#define APREQ_COOKIE_VERSION_BIT 11
|
|
/**
|
|
* Cookie Version Mask
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_COOKIE_VERSION_MASK 3
|
|
|
|
/**
|
|
* Cookie's Secure Bit
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_COOKIE_SECURE_BIT 13
|
|
/**
|
|
* Cookie's Secure Mask
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_COOKIE_SECURE_MASK 1
|
|
|
|
/**
|
|
* Cookie's HttpOnly Bit
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_COOKIE_HTTPONLY_BIT 14
|
|
/**
|
|
* Cookie's HttpOnly Mask
|
|
* @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON
|
|
* @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET
|
|
*/
|
|
#define APREQ_COOKIE_HTTPONLY_MASK 1
|
|
|
|
/** Character encodings. */
|
|
typedef enum {
|
|
APREQ_CHARSET_ASCII =0,
|
|
APREQ_CHARSET_LATIN1 =1, /* ISO-8859-1 */
|
|
APREQ_CHARSET_CP1252 =2, /* Windows-1252 */
|
|
APREQ_CHARSET_UTF8 =8
|
|
} apreq_charset_t;
|
|
|
|
|
|
/** @enum apreq_join_t Join type */
|
|
typedef enum {
|
|
APREQ_JOIN_AS_IS, /**< Join the strings without modification */
|
|
APREQ_JOIN_ENCODE, /**< Url-encode the strings before joining them */
|
|
APREQ_JOIN_DECODE, /**< Url-decode the strings before joining them */
|
|
APREQ_JOIN_QUOTE /**< Quote the strings, backslashing existing quote marks. */
|
|
} apreq_join_t;
|
|
|
|
/** @enum apreq_match_t Match type */
|
|
typedef enum {
|
|
APREQ_MATCH_FULL, /**< Full match only. */
|
|
APREQ_MATCH_PARTIAL /**< Partial matches are ok. */
|
|
} apreq_match_t;
|
|
|
|
/** @enum apreq_expires_t Expiration date format */
|
|
typedef enum {
|
|
APREQ_EXPIRES_HTTP, /**< Use date formatting consistent with RFC 2616 */
|
|
APREQ_EXPIRES_NSCOOKIE /**< Use format consistent with Netscape's Cookie Spec */
|
|
} apreq_expires_t;
|
|
|
|
|
|
/** @brief libapreq's pre-extensible string type */
|
|
typedef struct apreq_value_t {
|
|
char *name; /**< value name */
|
|
apr_size_t nlen; /**< length of name */
|
|
apr_size_t dlen; /**< length of data */
|
|
char data[1]; /**< value data */
|
|
} apreq_value_t;
|
|
|
|
/**
|
|
* Adds the specified apreq_value_t to the apr_table_t.
|
|
*
|
|
* @param v value to add
|
|
* @param t add v to this table
|
|
*
|
|
* @return void
|
|
*
|
|
* @ see apr_table_t @see apr_value_t
|
|
*/
|
|
|
|
static APR_INLINE
|
|
void apreq_value_table_add(const apreq_value_t *v, apr_table_t *t) {
|
|
apr_table_addn(t, v->name, v->data);
|
|
}
|
|
|
|
/**
|
|
* @param T type
|
|
* @param A attribute
|
|
* @param P
|
|
*
|
|
* XXX
|
|
*/
|
|
#define apreq_attr_to_type(T,A,P) ( (T*) ((char*)(P)-offsetof(T,A)) )
|
|
|
|
/**
|
|
* Initialize libapreq2. Applications (except apache modules using
|
|
* mod_apreq) should call this exactly once before they use any
|
|
* libapreq2 modules. If you want to modify the list of default parsers
|
|
* with apreq_register_parser(), please use apreq_pre_initialize()
|
|
* and apreq_post_initialize() instead.
|
|
*
|
|
* @param pool a base pool persisting while libapreq2 is used
|
|
* @remarks after you destroy the pool, you have to call this function again
|
|
* with a new pool if you still plan to use libapreq2
|
|
*/
|
|
APREQ_DECLARE(apr_status_t) apreq_initialize(apr_pool_t *pool);
|
|
|
|
|
|
/**
|
|
* Pre-initialize libapreq2. Applications (except apache modules using
|
|
* mod_apreq2) should call this exactly once before they register custom
|
|
* parsers with libapreq2. mod_apreq2 does this automatically during the
|
|
* post-config phase, so modules that need call apreq_register_parser should
|
|
* create a post-config hook using APR_HOOK_MIDDLE.
|
|
*
|
|
* @param pool a base pool persisting while libapreq2 is used
|
|
* @remarks after you destroyed the pool, you have to call this function again
|
|
* with a new pool if you still plan to use libapreq2
|
|
*/
|
|
APREQ_DECLARE(apr_status_t) apreq_pre_initialize(apr_pool_t *pool);
|
|
|
|
/**
|
|
* Post-initialize libapreq2. Applications (except apache modules using
|
|
* mod_apreq2) should this exactly once before they use any
|
|
* libapreq2 modules for parsing.
|
|
*
|
|
* @param pool the same pool that was used in apreq_pre_initialize().
|
|
*/
|
|
APREQ_DECLARE(apr_status_t) apreq_post_initialize(apr_pool_t *pool);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* APREQ_H */
|