32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** Licensed to the Apache Software Foundation (ASF) under one or more
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** contributor license agreements. See the NOTICE file distributed with
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** this work for additional information regarding copyright ownership.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** The ASF licenses this file to You under the Apache License, Version 2.0
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** (the "License"); you may not use this file except in compliance with
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** the License. You may obtain a copy of the License at
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** Unless required by applicable law or agreed to in writing, software
2e545ce2450a9953665f701bb05350f0d3f26275nd** distributed under the License is distributed on an "AS IS" BASIS,
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** See the License for the specific language governing permissions and
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor** limitations under the License.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor extern "C" {
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @brief Module API
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @ingroup libapreq2
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * An apreq handle associated with a module. The structure
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * may have variable size, because the module may append its own data
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * structures after it.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** the apreq module which implements this handle */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** the pool which defines the lifetime of the parsed data */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** the allocator, which persists at least as long as the pool */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @brief Vtable describing the necessary module functions.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** name of this apreq module */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** magic number identifying the module and version */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** get a table with all cookies */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*jar)(apreq_handle_t *, const apr_table_t **);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** get a table with all query string parameters */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*args)(apreq_handle_t *, const apr_table_t **);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** get a table with all body parameters */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*body)(apreq_handle_t *, const apr_table_t **);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** get a cookie by its name */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apreq_cookie_t *(*jar_get)(apreq_handle_t *, const char *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** get a query string parameter by its name */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apreq_param_t *(*args_get)(apreq_handle_t *, const char *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** get a body parameter by its name */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apreq_param_t *(*body_get)(apreq_handle_t *, const char *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** gets the parser associated with the request body */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*parser_get)(apreq_handle_t *, const apreq_parser_t **);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** manually set a parser for the request body */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*parser_set)(apreq_handle_t *, apreq_parser_t *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** add a hook function */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*hook_add)(apreq_handle_t *, apreq_hook_t *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** determine the maximum in-memory bytes a brigade may use */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*brigade_limit_get)(apreq_handle_t *, apr_size_t *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** set the maximum in-memory bytes a brigade may use */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*brigade_limit_set)(apreq_handle_t *, apr_size_t);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** determine the maximum amount of data that will be fed into a parser */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*read_limit_get)(apreq_handle_t *, apr_uint64_t *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** set the maximum amount of data that will be fed into a parser */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*read_limit_set)(apreq_handle_t *, apr_uint64_t);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** determine the directory used by the parser for temporary files */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*temp_dir_get)(apreq_handle_t *, const char **);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor /** set the directory used by the parser for temporary files */
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor apr_status_t (*temp_dir_set)(apreq_handle_t *, const char *);
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Defines the module-specific status codes which
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * are commonly considered to be non-fatal.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param s status code returned by an apreq_module_t method.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return 1 if s is fatal, 0 otherwise.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorunsigned apreq_module_status_is_error(apr_status_t s) {
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor switch (s) {
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Expose the parsed "cookie" header associated to this handle.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param t The resulting table, which will either be NULL or a
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * valid table object on return.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or a module-specific error status code.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapr_status_t apreq_jar(apreq_handle_t *req, const apr_table_t **t)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Expose the parsed "query string" associated to this handle.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param t The resulting table, which will either be NULL or a
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * valid table object on return.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or a module-specific error status code.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapr_status_t apreq_args(apreq_handle_t *req, const apr_table_t **t)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Expose the parsed "request body" associated to this handle.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param t The resulting table, which will either be NULL or a
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * valid table object on return.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or a module-specific error status code.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapr_status_t apreq_body(apreq_handle_t *req, const apr_table_t **t)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Fetch the first cookie with the given name.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param name Case-insensitive cookie name.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return First matching cookie, or NULL if none match.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapreq_cookie_t *apreq_jar_get(apreq_handle_t *req, const char *name)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Fetch the first query string param with the given name.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param name Case-insensitive param name.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return First matching param, or NULL if none match.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapreq_param_t *apreq_args_get(apreq_handle_t *req, const char *name)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Fetch the first body param with the given name.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param name Case-insensitive cookie name.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return First matching param, or NULL if none match.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapreq_param_t *apreq_body_get(apreq_handle_t *req, const char *name)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Fetch the active body parser.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param parser Points to the active parser on return.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or module-specific error.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Set the body parser for this request.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param parser New parser to use.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or module-specific error.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Add a parser hook for this request.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The request handle
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param hook Hook to add.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or module-specific error.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapr_status_t apreq_hook_add(apreq_handle_t *req, apreq_hook_t *hook)
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Set the active brigade limit.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The handle.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param bytes New limit to use.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @return APR_SUCCESS or module-specific error.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzorapr_status_t apreq_brigade_limit_set(apreq_handle_t *req,
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * Get the active brigade limit.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param req The handle.
32f5dfaca53f31a4ccb791a811607367ce16e832gryzor * @param bytes Pointer to resulting (current) limit.
static APR_INLINE
static APR_INLINE
static APR_INLINE
static APR_INLINE
static APR_INLINE
const char *query_string,
const char *cookie,
#ifdef __cplusplus