Apache Software Foundation > HTTP Server Project > Request Library Subproject

Apache HTTP Server Request Library

- Main Page
- Related Pages
- Modules
- Data Structures
- Files
- Examples

# include/apreq_parser.h

Go to the documentation of this file.

    00001 /*
    00002 **  Licensed to the Apache Software Foundation (ASF) under one or more
    00003 ** contributor license agreements.  See the NOTICE file distributed with
    00004 ** this work for additional information regarding copyright ownership.
    00005 ** The ASF licenses this file to You under the Apache License, Version 2.0
    00006 ** (the "License"); you may not use this file except in compliance with
    00007 ** the License.  You may obtain a copy of the License at
    00008 **
    00009 **      http://www.apache.org/licenses/LICENSE-2.0
    00010 **
    00011 **  Unless required by applicable law or agreed to in writing, software
    00012 **  distributed under the License is distributed on an "AS IS" BASIS,
    00013 **  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    00014 **  See the License for the specific language governing permissions and
    00015 **  limitations under the License.
    00016 */
    00017
    00018 #ifndef APREQ_PARSERS_H
    00019 #define APREQ_PARSERS_H
    00020 /* These structs are defined below */
    00021
    00022 #include "apreq_param.h"
    00023
    00024 #ifdef __cplusplus
    00025 extern "C" {
    00026 #endif /* __cplusplus */
    00027
    00039 typedef struct apreq_hook_t apreq_hook_t;
    00040
    00044 typedef struct apreq_parser_t apreq_parser_t;
    00045
    00047 #define APREQ_PARSER_ARGS  apreq_parser_t *parser,     \
    00048                            apr_table_t *t,             \
    00049                            apr_bucket_brigade *bb
    00050
    00052 #define APREQ_HOOK_ARGS    apreq_hook_t *hook,         \
    00053                            apreq_param_t *param,       \
    00054                            apr_bucket_brigade *bb
    00055
    00059 typedef apr_status_t (*apreq_parser_function_t)(APREQ_PARSER_ARGS);
    00060
    00064 typedef apr_status_t (*apreq_hook_function_t)(APREQ_HOOK_ARGS);
    00065
    00069 #define APREQ_DECLARE_PARSER(f) APREQ_DECLARE_NONSTD(apr_status_t) \
    00070                                 (f) (APREQ_PARSER_ARGS)
    00071
    00075 #define APREQ_DECLARE_HOOK(f)   APREQ_DECLARE_NONSTD(apr_status_t) \
    00076                                 (f) (APREQ_HOOK_ARGS)
    00077
    00083 struct apreq_hook_t {
    00084     apreq_hook_function_t hook;
    00085     apreq_hook_t         *next;
    00086     apr_pool_t           *pool;
    00087     void *ctx;
    00088 };
    00089
    00093 struct apreq_parser_t {
    00095     apreq_parser_function_t parser;
    00097     const char             *content_type;
    00099     apr_pool_t             *pool;
    00101     apr_bucket_alloc_t     *bucket_alloc;
    00103     apr_size_t              brigade_limit;
    00105     const char             *temp_dir;
    00107     apreq_hook_t           *hook;
    00109     void                   *ctx;
    00110 };
    00111
    00112
    00123 static APR_INLINE
    00124 apr_status_t apreq_parser_run(struct apreq_parser_t *psr, apr_table_t *t,
    00125                               apr_bucket_brigade *bb)
    00126 {
    00127     return psr->parser(psr, t, bb);
    00128 }
    00129
    00137 static APR_INLINE
    00138 apr_status_t apreq_hook_run(struct apreq_hook_t *h, apreq_param_t *param,
    00139                             apr_bucket_brigade *bb)
    00140 {
    00141     return h->hook(h, param, bb);
    00142 }
    00143
    00144
    00150 APREQ_DECLARE_PARSER(apreq_parse_headers);
    00151
    00155 APREQ_DECLARE_PARSER(apreq_parse_urlencoded);
    00156
    00163 APREQ_DECLARE_PARSER(apreq_parse_multipart);
    00164
    00173 APREQ_DECLARE_PARSER(apreq_parse_generic);
    00174
    00182 APREQ_DECLARE_HOOK(apreq_hook_apr_xml_parser);
    00183
    00197 APREQ_DECLARE(apreq_parser_t *) apreq_parser_make(apr_pool_t *pool,
    00198                                                   apr_bucket_alloc_t *ba,
    00199                                                   const char *content_type,
    00200                                                   apreq_parser_function_t pfn,
    00201                                                   apr_size_t brigade_limit,
    00202                                                   const char *temp_dir,
    00203                                                   apreq_hook_t *hook,
    00204                                                   void *ctx);
    00205
    00215 APREQ_DECLARE(apreq_hook_t *) apreq_hook_make(apr_pool_t *pool,
    00216                                               apreq_hook_function_t hook,
    00217                                               apreq_hook_t *next,
    00218                                               void *ctx);
    00219
    00220
    00227 APREQ_DECLARE(apr_status_t) apreq_parser_add_hook(apreq_parser_t *p,
    00228                                                   apreq_hook_t *h);
    00229
    00230
    00237 APREQ_DECLARE(apreq_parser_function_t)apreq_parser(const char *enctype);
    00238
    00239
    00252 APREQ_DECLARE(apr_status_t) apreq_register_parser(const char *enctype,
    00253                                                   apreq_parser_function_t pfn);
    00254
    00255
    00261 APREQ_DECLARE_HOOK(apreq_hook_disable_uploads);
    00262
    00267 APREQ_DECLARE_HOOK(apreq_hook_discard_brigade);
    00268
    00272 typedef struct apreq_hook_find_param_ctx_t {
    00273     const char    *name;
    00274     apreq_param_t *param;
    00275     apreq_hook_t  *prev;
    00276 } apreq_hook_find_param_ctx_t;
    00277
    00278
    00293 APREQ_DECLARE_HOOK(apreq_hook_find_param);
    00294
    00295
    00296 #ifdef __cplusplus
    00297 }
    00298
    00299 #endif
    00300 #endif /* APREQ_PARSERS_H */

Copyright © 2003-2006 The Apache Software Foundation.
See LICENSE.

page generated by `doxygen` version 1.5.6 on 25 Nov 2010