• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files

include/apr_buckets.h

Go to the documentation of this file.
00001 /* Licensed to the Apache Software Foundation (ASF) under one or more
00002  * contributor license agreements.  See the NOTICE file distributed with
00003  * this work for additional information regarding copyright ownership.
00004  * The ASF licenses this file to You under the Apache License, Version 2.0
00005  * (the "License"); you may not use this file except in compliance with
00006  * the License.  You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00021 #ifndef APR_BUCKETS_H
00022 #define APR_BUCKETS_H
00023 
00024 #if defined(APR_BUCKET_DEBUG) && !defined(APR_RING_DEBUG)
00025 #define APR_RING_DEBUG
00026 #endif
00027 
00028 #include "apu.h"
00029 #include "apr_network_io.h"
00030 #include "apr_file_io.h"
00031 #include "apr_general.h"
00032 #include "apr_mmap.h"
00033 #include "apr_errno.h"
00034 #include "apr_ring.h"
00035 #include "apr.h"
00036 #if APR_HAVE_SYS_UIO_H
00037 #include <sys/uio.h>    /* for struct iovec */
00038 #endif
00039 #if APR_HAVE_STDARG_H
00040 #include <stdarg.h>
00041 #endif
00042 
00043 #ifdef __cplusplus
00044 extern "C" {
00045 #endif
00046 
00054 #define APR_BUCKET_BUFF_SIZE 8000
00055 
00057 typedef enum {
00058     APR_BLOCK_READ,   
00059     APR_NONBLOCK_READ 
00060 } apr_read_type_e;
00061 
00114 /*
00115  * Forward declaration of the main types.
00116  */
00117 
00119 typedef struct apr_bucket_brigade apr_bucket_brigade;
00121 typedef struct apr_bucket apr_bucket;
00123 typedef struct apr_bucket_alloc_t apr_bucket_alloc_t;
00124 
00126 typedef struct apr_bucket_type_t apr_bucket_type_t;
00127 
00131 struct apr_bucket_type_t {
00135     const char *name;
00140     int num_func;
00151     enum {
00153         APR_BUCKET_DATA = 0,
00155         APR_BUCKET_METADATA = 1
00156     } is_metadata;
00164     void (*destroy)(void *data);
00165 
00176     apr_status_t (*read)(apr_bucket *b, const char **str, apr_size_t *len, 
00177                          apr_read_type_e block);
00178     
00192     apr_status_t (*setaside)(apr_bucket *e, apr_pool_t *pool);
00193 
00203     apr_status_t (*split)(apr_bucket *e, apr_size_t point);
00204 
00211     apr_status_t (*copy)(apr_bucket *e, apr_bucket **c);
00212 
00213 };
00214 
00224 struct apr_bucket {
00226     APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;
APR_RING_ENTRY(apr_bucket) link;