00001 /* ==================================================================== 00002 * The Apache Software License, Version 1.1 00003 * 00004 * Copyright (c) 2003 The Apache Software Foundation. All rights 00005 * reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * 1. Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * 00014 * 2. Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in 00016 * the documentation and/or other materials provided with the 00017 * distribution. 00018 * 00019 * 3. The end-user documentation included with the redistribution, 00020 * if any, must include the following acknowledgment: 00021 * "This product includes software developed by the 00022 * Apache Software Foundation (http://www.apache.org/)." 00023 * Alternately, this acknowledgment may appear in the software itself, 00024 * if and wherever such third-party acknowledgments normally appear. 00025 * 00026 * 4. The names "Apache" and "Apache Software Foundation" must 00027 * not be used to endorse or promote products derived from this 00028 * software without prior written permission. For written 00029 * permission, please contact apache@apache.org. 00030 * 00031 * 5. Products derived from this software may not be called "Apache", 00032 * nor may "Apache" appear in their name, without prior written 00033 * permission of the Apache Software Foundation. 00034 * 00035 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 00036 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00037 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00038 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 00039 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00040 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00041 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 00042 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00043 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00044 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 00045 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00046 * SUCH DAMAGE. 00047 * ==================================================================== 00048 * 00049 * This software consists of voluntary contributions made by many 00050 * individuals on behalf of the Apache Software Foundation. For more 00051 * information on the Apache Software Foundation, please see 00052 * <http://www.apache.org/>. 00053 */ 00054 00055 #ifndef APREQ_PARSERS_H 00056 #define APREQ_PARSERS_H 00057 00058 #include "apreq.h" 00059 #include "apr_tables.h" 00060 #include "apr_buckets.h" 00061 #include "apr_file_io.h" 00062 00063 #ifdef __cplusplus 00064 extern "C" { 00065 #endif 00066 00067 00081 typedef struct apreq_cfg_t { 00082 apr_off_t max_len; 00083 apr_size_t max_brigade_len; /* in-memory cutoff */ 00084 int max_fields; 00085 int read_ahead; /* prefetch length */ 00086 int disable_uploads; 00087 char *temp_dir; 00088 } apreq_cfg_t; 00089 00090 00091 #define APREQ_DECLARE_PARSER(f) apr_status_t (f)(apreq_parser_t *parser, \ 00092 const apreq_cfg_t *cfg, \ 00093 apr_table_t *t, \ 00094 apr_bucket_brigade *bb) 00095 00096 #define APREQ_DECLARE_HOOK(f) apr_status_t (f)(apreq_hook_t *hook, \ 00097 apr_pool_t *pool, \ 00098 const apreq_cfg_t *cfg, \ 00099 apr_bucket_brigade *bb) 00100 00101 #define apreq_run_parser(psr,cfg,t,bb) (psr)->parser(psr,cfg,t,bb) 00102 #define apreq_run_hook(h,pool,cfg,bb) (h)->hook(h,pool,cfg,bb) 00103 00104 typedef struct apreq_hook_t apreq_hook_t; 00105 typedef struct apreq_parser_t apreq_parser_t; 00106 00107 struct apreq_hook_t { 00108 APREQ_DECLARE_HOOK (*hook); 00109 apreq_hook_t *next; 00110 void *ctx; 00111 }; 00112 00113 struct apreq_parser_t { 00114 APREQ_DECLARE_PARSER (*parser); 00115 const char *content_type; 00116 apreq_hook_t *hook; 00117 void *ctx; 00118 }; 00119 APREQ_DECLARE(apr_status_t) apreq_brigade_concat(apr_pool_t *pool, 00120 const apreq_cfg_t *cfg, 00121 apr_bucket_brigade *out, 00122 apr_bucket_brigade *in); 00123 00124 00125 APREQ_DECLARE_PARSER(apreq_parse_headers); 00126 APREQ_DECLARE_PARSER(apreq_parse_urlencoded); 00127 APREQ_DECLARE_PARSER(apreq_parse_multipart); 00128 00129 APREQ_DECLARE(apreq_parser_t *) apreq_make_parser(apr_pool_t *pool, 00130 const char *enctype, 00131 APREQ_DECLARE_PARSER(*parser), 00132 apreq_hook_t *hook, 00133 void *ctx); 00134 00135 APREQ_DECLARE(apreq_hook_t *) apreq_make_hook(apr_pool_t *pool, 00136 APREQ_DECLARE_HOOK(*hook), 00137 apreq_hook_t *next, 00138 void *ctx); 00139 00140 APREQ_DECLARE(apr_status_t)apreq_add_hook(apreq_parser_t *p, 00141 apreq_hook_t *h); 00142 00143 APREQ_DECLARE(apreq_parser_t *)apreq_parser(void *env, apreq_hook_t *hook); 00144 00146 #ifdef __cplusplus 00147 } 00148 #endif 00149 00150 #endif /*APREQ_PARSERS_H*/
1.3