00001 /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as 00002 * applicable. 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * 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 */ 00016 /** 00017 * @file apr_buckets.h 00018 * @brief APR-UTIL Buckets/Bucket Brigades 00019 */ 00020 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 00047 /** 00048 * @defgroup APR_Util_Bucket_Brigades Bucket Brigades 00049 * @ingroup APR_Util 00050 * @{ 00051 */ 00052 00053 /** default bucket buffer size - 8KB minus room for memory allocator headers */ 00054 #define APR_BUCKET_BUFF_SIZE 8000 00055 00056 /** Determines how a bucket or brigade should be read */ 00057 typedef enum { 00058 APR_BLOCK_READ, /**< block until data becomes available */ 00059 APR_NONBLOCK_READ /**< return immediately if no data is available */ 00060 } apr_read_type_e; 00061 00062 /** 00063 * The one-sentence buzzword-laden overview: Bucket brigades represent 00064 * a complex data stream that can be passed through a layered IO 00065 * system without unnecessary copying. A longer overview follows... 00066 * 00067 * A bucket brigade is a doubly linked list (ring) of buckets, so we 00068 * aren't limited to inserting at the front and removing at the end. 00069 * Buckets are only passed around as members of a brigade, although 00070 * singleton buckets can occur for short periods of time. 00071 * 00072 * Buckets are data stores of various types. They can refer to data in 00073 * memory, or part of a file or mmap area, or the output of a process, 00074 * etc. Buckets also have some type-dependent accessor functions: 00075 * read, split, copy, setaside, and destroy. 00076 * 00077 * read returns the address and size of the data in the bucket. If the 00078 * data isn't in memory then it is read in and the bucket changes type 00079 * so that it can refer to the new location of the data. If all the 00080 * data doesn't fit in the bucket then a new bucket is inserted into 00081 * the brigade to hold the rest of it. 00082 * 00083 * split divides the data in a bucket into two regions. After a split 00084 * the original bucket refers to the first part of the data and a new 00085 * bucket inserted into the brigade after the original bucket refers 00086 * to the second part of the data. Reference counts are maintained as 00087 * necessary. 00088 * 00089 * setaside ensures that the data in the bucket has a long enough 00090 * lifetime. Sometimes it is convenient to create a bucket referring 00091 * to data on the stack in the expectation that it will be consumed 00092 * (output to the network) before the stack is unwound. If that 00093 * expectation turns out not to be valid, the setaside function is 00094 * called to move the data somewhere safer. 00095 * 00096 * copy makes a duplicate of the bucket structure as long as it's 00097 * possible to have multiple references to a single copy of the 00098 * data itself. Not all bucket types can be copied. 00099 * 00100 * destroy maintains the reference counts on the resources used by a 00101 * bucket and frees them if necessary. 00102 * 00103 * Note: all of the above functions have wrapper macros (apr_bucket_read(), 00104 * apr_bucket_destroy(), etc), and those macros should be used rather 00105 * than using the function pointers directly. 00106 * 00107 * To write a bucket brigade, they are first made into an iovec, so that we 00108 * don't write too little data at one time. Currently we ignore compacting the 00109 * buckets into as few buckets as possible, but if we really want good 00110 * performance, then we need to compact the buckets before we convert to an 00111 * iovec, or possibly while we are converting to an iovec. 00112 */ 00113 00114 /* 00115 * Forward declaration of the main types. 00116 */ 00117 00118 /** @see apr_bucket_brigade */ 00119 typedef struct apr_bucket_brigade apr_bucket_brigade; 00120 /** @see apr_bucket */ 00121 typedef struct apr_bucket apr_bucket; 00122 /** @see apr_bucket_alloc_t */ 00123 typedef struct apr_bucket_alloc_t apr_bucket_alloc_t; 00124 00125 /** @see apr_bucket_type_t */ 00126 typedef struct apr_bucket_type_t apr_bucket_type_t; 00127 00128 /** 00129 * Basic bucket type 00130 */ 00131 struct apr_bucket_type_t { 00132 /** 00133 * The name of the bucket type 00134 */ 00135 const char *name; 00136 /** 00137 * The number of functions this bucket understands. Can not be less than 00138 * five. 00139 */ 00140 int num_func; 00141 /** 00142 * Whether the bucket contains metadata (ie, information that 00143 * describes the regular contents of the brigade). The metadata 00144 * is not returned by apr_bucket_read() and is not indicated by 00145 * the ->length of the apr_bucket itself. In other words, an 00146 * empty bucket is safe to arbitrarily remove if and only if it 00147 * contains no metadata. In this sense, "data" is just raw bytes 00148 * that are the "content" of the brigade and "metadata" describes 00149 * that data but is not a proper part of it. 00150 */ 00151 enum { 00152 /** This bucket type represents actual data to send to the client. */ 00153 APR_BUCKET_DATA = 0, 00154 /** This bucket type represents metadata. */ 00155 APR_BUCKET_METADATA = 1 00156 } is_metadata; 00157 /** 00158 * Free the private data and any resources used by the bucket (if they 00159 * aren't shared with another bucket). This function is required to be 00160 * implemented for all bucket types, though it might be a no-op on some 00161 * of them (namely ones that never allocate any private data structures). 00162 * @param data The private data pointer from the bucket to be destroyed 00163 */ 00164 void (*destroy)(void *data); 00165 00166 /** 00167 * Read the data from the bucket. This is required to be implemented 00168 * for all bucket types. 00169 * @param b The bucket to read from 00170 * @param str A place to store the data read. Allocation should only be 00171 * done if absolutely necessary. 00172 * @param len The amount of data read. 00173 * @param block Should this read function block if there is more data that 00174 * cannot be read immediately. 00175 */ 00176 apr_status_t (*read)(apr_bucket *b, const char **str, apr_size_t *len, 00177 apr_read_type_e block); 00178 00179 /** 00180 * Make it possible to set aside the data for at least as long as the 00181 * given pool. Buckets containing data that could potentially die before 00182 * this pool (e.g. the data resides on the stack, in a child pool of 00183 * the given pool, or in a disjoint pool) must somehow copy, shift, or 00184 * transform the data to have the proper lifetime. 00185 * @param e The bucket to convert 00186 * @remark Some bucket types contain data that will always outlive the 00187 * bucket itself. For example no data (EOS and FLUSH), or the data 00188 * resides in global, constant memory (IMMORTAL), or the data is on 00189 * the heap (HEAP). For these buckets, apr_bucket_setaside_noop can 00190 * be used. 00191 */ 00192 apr_status_t (*setaside)(apr_bucket *e, apr_pool_t *pool); 00193 00194 /** 00195 * Split one bucket in two at the specified position by duplicating 00196 * the bucket structure (not the data) and modifying any necessary 00197 * start/end/offset information. If it's not possible to do this 00198 * for the bucket type (perhaps the length of the data is indeterminate, 00199 * as with pipe and socket buckets), then APR_ENOTIMPL is returned. 00200 * @param e The bucket to split 00201 * @param point The offset of the first byte in the new bucket 00202 */ 00203 apr_status_t (*split)(apr_bucket *e, apr_size_t point); 00204 00205 /** 00206 * Copy the bucket structure (not the data), assuming that this is 00207 * possible for the bucket type. If it's not, APR_ENOTIMPL is returned. 00208 * @param e The bucket to copy 00209 * @param c Returns a pointer to the new bucket 00210 */ 00211 apr_status_t (*copy)(apr_bucket *e, apr_bucket **c); 00212 00213 }; 00214 00215 /** 00216 * apr_bucket structures are allocated on the malloc() heap and 00217 * their lifetime is controlled by the parent apr_bucket_brigade 00218 * structure. Buckets can move from one brigade to another e.g. by 00219 * calling APR_BRIGADE_CONCAT(). In general the data in a bucket has 00220 * the same lifetime as the bucket and is freed when the bucket is 00221 * destroyed; if the data is shared by more than one bucket (e.g. 00222 * after a split) the data is freed when the last bucket goes away. 00223 */ 00224 struct apr_bucket { 00225 /** Links to the rest of the brigade */ 00226 APR_RING_ENTRY(apr_bucket) link; 00227 /** The type of bucket. */ 00228 const apr_bucket_type_t *type; 00229 /** The length of the data in the bucket. This could have been implemented 00230 * with a function, but this is an optimization, because the most 00231 * common thing to do will be to get the length. If the length is unknown, 00232 * the value of this field will be (apr_size_t)(-1). 00233 */ 00234 apr_size_t length; 00235 /** The start of the data in the bucket relative to the private base 00236 * pointer. The vast majority of bucket types allow a fixed block of 00237 * data to be referenced by multiple buckets, each bucket pointing to 00238 * a different segment of the data. That segment starts at base+start 00239 * and ends at base+start+length. 00240 * If the length == (apr_size_t)(-1), then start == -1. 00241 */ 00242 apr_off_t start; 00243 /** type-dependent data hangs off this pointer */ 00244 void *data; 00245 /** 00246 * Pointer to function used to free the bucket. This function should 00247 * always be defined and it should be consistent with the memory 00248 * function used to allocate the bucket. For example, if malloc() is 00249 * used to allocate the bucket, this pointer should point to free(). 00250 * @param e Pointer to the bucket being freed 00251 */ 00252 void (*free)(void *e); 00253 /** The freelist from which this bucket was allocated */ 00254 apr_bucket_alloc_t *list; 00255 }; 00256 00257 /** A list of buckets */ 00258 struct apr_bucket_brigade { 00259 /** The pool to associate the brigade with. The data is not allocated out 00260 * of the pool, but a cleanup is registered with this pool. If the 00261 * brigade is destroyed by some mechanism other than pool destruction, 00262 * the destroying function is responsible for killing the cleanup. 00263 */ 00264 apr_pool_t *p; 00265 /** The buckets in the brigade are on this list. */ 00266 /* 00267 * The apr_bucket_list structure doesn't actually need a name tag 00268 * because it has no existence independent of struct apr_bucket_brigade; 00269 * the ring macros are designed so that you can leave the name tag 00270 * argument empty in this situation but apparently the Windows compiler 00271 * doesn't like that. 00272 */ 00273 APR_RING_HEAD(apr_bucket_list, apr_bucket) list; 00274 /** The freelist from which this bucket was allocated */ 00275 apr_bucket_alloc_t *bucket_alloc; 00276 }; 00277 00278 00279 /** 00280 * Function called when a brigade should be flushed 00281 */ 00282 typedef apr_status_t (*apr_brigade_flush)(apr_bucket_brigade *bb, void *ctx); 00283 00284 /* 00285 * define APR_BUCKET_DEBUG if you want your brigades to be checked for 00286 * validity at every possible instant. this will slow your code down 00287 * substantially but is a very useful debugging tool. 00288 */ 00289 #ifdef APR_BUCKET_DEBUG 00290 00291 #define APR_BRIGADE_CHECK_CONSISTENCY(b) \ 00292 APR_RING_CHECK_CONSISTENCY(&(b)->list, apr_bucket, link) 00293 00294 #define APR_BUCKET_CHECK_CONSISTENCY(e) \ 00295 APR_RING_CHECK_ELEM_CONSISTENCY((e), apr_bucket, link) 00296 00297 #else 00298 /** 00299 * checks the ring pointers in a bucket brigade for consistency. an 00300 * abort() will be triggered if any inconsistencies are found. 00301 * note: this is a no-op unless APR_BUCKET_DEBUG is defined. 00302 * @param b The brigade 00303 */ 00304 #define APR_BRIGADE_CHECK_CONSISTENCY(b) 00305 /** 00306 * checks the brigade a bucket is in for ring consistency. an 00307 * abort() will be triggered if any inconsistencies are found. 00308 * note: this is a no-op unless APR_BUCKET_DEBUG is defined. 00309 * @param e The bucket 00310 */ 00311 #define APR_BUCKET_CHECK_CONSISTENCY(e) 00312 #endif 00313 00314 00315 /** 00316 * Wrappers around the RING macros to reduce the verbosity of the code 00317 * that handles bucket brigades. 00318 */ 00319 /** 00320 * The magic pointer value that indicates the head of the brigade 00321 * @remark This is used to find the beginning and end of the brigade, eg: 00322 * <pre> 00323 * while (e != APR_BRIGADE_SENTINEL(b)) { 00324 * ... 00325 * e = APR_BUCKET_NEXT(e); 00326 * } 00327 * </pre> 00328 * @param b The brigade 00329 * @return The magic pointer value 00330 */ 00331 #define APR_BRIGADE_SENTINEL(b) APR_RING_SENTINEL(&(b)->list, apr_bucket, link) 00332 00333 /** 00334 * Determine if the bucket brigade is empty 00335 * @param b The brigade to check 00336 * @return true or false 00337 */ 00338 #define APR_BRIGADE_EMPTY(b) APR_RING_EMPTY(&(b)->list, apr_bucket, link) 00339 00340 /** 00341 * Return the first bucket in a brigade 00342 * @param b The brigade to query 00343 * @return The first bucket in the brigade 00344 */ 00345 #define APR_BRIGADE_FIRST(b) APR_RING_FIRST(&(b)->list) 00346 /** 00347 * Return the last bucket in a brigade 00348 * @param b The brigade to query 00349 * @return The last bucket in the brigade 00350 */ 00351 #define APR_BRIGADE_LAST(b) APR_RING_LAST(&(b)->list) 00352 00353 /** 00354 * Iterate through a bucket brigade 00355 * @param e The current bucket 00356 * @param b The brigade to iterate over 00357 * @remark This is the same as either: 00358 * <pre> 00359 * e = APR_BRIGADE_FIRST(b); 00360 * while (e != APR_BRIGADE_SENTINEL(b)) { 00361 * ... 00362 * e = APR_BUCKET_NEXT(e); 00363 * } 00364 * OR 00365 * for (e = APR_BRIGADE_FIRST(b); 00366 * e != APR_BRIGADE_SENTINEL(b); 00367 * e = APR_BUCKET_NEXT(e)) { 00368 * ... 00369 * } 00370 * </pre> 00371 * @warning Be aware that you cannot change the value of e within 00372 * the foreach loop, nor can you destroy the bucket it points to. 00373 * Modifying the prev and next pointers of the bucket is dangerous 00374 * but can be done if you're careful. If you change e's value or 00375 * destroy the bucket it points to, then APR_BRIGADE_FOREACH 00376 * will have no way to find out what bucket to use for its next 00377 * iteration. The reason for this can be seen by looking closely 00378 * at the equivalent loops given in the tip above. So, for example, 00379 * if you are writing a loop that empties out a brigade one bucket 00380 * at a time, APR_BRIGADE_FOREACH just won't work for you. Do it 00381 * by hand, like so: 00382 * <pre> 00383 * while (!APR_BRIGADE_EMPTY(b)) { 00384 * e = APR_BRIGADE_FIRST(b); 00385 * ... 00386 * apr_bucket_delete(e); 00387 * } 00388 * </pre> 00389 * @deprecated This macro causes more headaches than it's worth. Use 00390 * one of the alternatives documented here instead; the clarity gained 00391 * in what's really going on is well worth the extra line or two of code. 00392 * This macro will be removed at some point in the future. 00393 */ 00394 #define APR_BRIGADE_FOREACH(e, b) \ 00395 APR_RING_FOREACH((e), &(b)->list, apr_bucket, link) 00396 00397 /** 00398 * Insert a list of buckets at the front of a brigade 00399 * @param b The brigade to add to 00400 * @param e The first bucket in a list of buckets to insert 00401 */ 00402 #define APR_BRIGADE_INSERT_HEAD(b, e) do { \ 00403 apr_bucket *ap__b = (e); \ 00404 APR_RING_INSERT_HEAD(&(b)->list, ap__b, apr_bucket, link); \ 00405 APR_BRIGADE_CHECK_CONSISTENCY((b)); \ 00406 } while (0) 00407 00408 /** 00409 * Insert a list of buckets at the end of a brigade 00410 * @param b The brigade to add to 00411 * @param e The first bucket in a list of buckets to insert 00412 */ 00413 #define APR_BRIGADE_INSERT_TAIL(b, e) do { \ 00414 apr_bucket *ap__b = (e); \ 00415 APR_RING_INSERT_TAIL(&(b)->list, ap__b, apr_bucket, link); \ 00416 APR_BRIGADE_CHECK_CONSISTENCY((b)); \ 00417 } while (0) 00418 00419 /** 00420 * Concatenate brigade b onto the end of brigade a, leaving brigade b empty 00421 * @param a The first brigade 00422 * @param b The second brigade 00423 */ 00424 #define APR_BRIGADE_CONCAT(a, b) do { \ 00425 APR_RING_CONCAT(&(a)->list, &(b)->list, apr_bucket, link); \ 00426 APR_BRIGADE_CHECK_CONSISTENCY((a)); \ 00427 } while (0) 00428 00429 /** 00430 * Prepend brigade b onto the beginning of brigade a, leaving brigade b empty 00431 * @param a The first brigade 00432 * @param b The second brigade 00433 */ 00434 #define APR_BRIGADE_PREPEND(a, b) do { \ 00435 APR_RING_PREPEND(&(a)->list, &(b)->list, apr_bucket, link); \ 00436 APR_BRIGADE_CHECK_CONSISTENCY((a)); \ 00437 } while (0) 00438 00439 /** 00440 * Insert a list of buckets before a specified bucket 00441 * @param a The bucket to insert before 00442 * @param b The buckets to insert 00443 */ 00444 #define APR_BUCKET_INSERT_BEFORE(a, b) do { \ 00445 apr_bucket *ap__a = (a), *ap__b = (b); \ 00446 APR_RING_INSERT_BEFORE(ap__a, ap__b, link); \ 00447 APR_BUCKET_CHECK_CONSISTENCY(ap__a); \ 00448 } while (0) 00449 00450 /** 00451 * Insert a list of buckets after a specified bucket 00452 * @param a The bucket to insert after 00453 * @param b The buckets to insert 00454 */ 00455 #define APR_BUCKET_INSERT_AFTER(a, b) do { \ 00456 apr_bucket *ap__a = (a), *ap__b = (b); \ 00457 APR_RING_INSERT_AFTER(ap__a, ap__b, link); \ 00458 APR_BUCKET_CHECK_CONSISTENCY(ap__a); \ 00459 } while (0) 00460 00461 /** 00462 * Get the next bucket in the list 00463 * @param e The current bucket 00464 * @return The next bucket 00465 */ 00466 #define APR_BUCKET_NEXT(e) APR_RING_NEXT((e), link) 00467 /** 00468 * Get the previous bucket in the list 00469 * @param e The current bucket 00470 * @return The previous bucket 00471 */ 00472 #define APR_BUCKET_PREV(e) APR_RING_PREV((e), link) 00473 00474 /** 00475 * Remove a bucket from its bucket brigade 00476 * @param e The bucket to remove 00477 */ 00478 #define APR_BUCKET_REMOVE(e) APR_RING_REMOVE((e), link) 00479 00480 /** 00481 * Initialize a new bucket's prev/next pointers 00482 * @param e The bucket to initialize 00483 */ 00484 #define APR_BUCKET_INIT(e) APR_RING_ELEM_INIT((e), link) 00485 00486 /** 00487 * Determine if a bucket contains metadata. An empty bucket is 00488 * safe to arbitrarily remove if and only if this is false. 00489 * @param e The bucket to inspect 00490 * @return true or false 00491 */ 00492 #define APR_BUCKET_IS_METADATA(e) ((e)->type->is_metadata) 00493 00494 /** 00495 * Determine if a bucket is a FLUSH bucket 00496 * @param e The bucket to inspect 00497 * @return true or false 00498 */ 00499 #define APR_BUCKET_IS_FLUSH(e) ((e)->type == &apr_bucket_type_flush) 00500 /** 00501 * Determine if a bucket is an EOS bucket 00502 * @param e The bucket to inspect 00503 * @return true or false 00504 */ 00505 #define APR_BUCKET_IS_EOS(e) ((e)->type == &apr_bucket_type_eos) 00506 /** 00507 * Determine if a bucket is a FILE bucket 00508 * @param e The bucket to inspect 00509 * @return true or false 00510 */ 00511 #define APR_BUCKET_IS_FILE(e) ((e)->type == &apr_bucket_type_file) 00512 /** 00513 * Determine if a bucket is a PIPE bucket 00514 * @param e The bucket to inspect 00515 * @return true or false 00516 */ 00517 #define APR_BUCKET_IS_PIPE(e) ((e)->type == &apr_bucket_type_pipe) 00518 /** 00519 * Determine if a bucket is a SOCKET bucket 00520 * @param e The bucket to inspect 00521 * @return true or false 00522 */ 00523 #define APR_BUCKET_IS_SOCKET(e) ((e)->type == &apr_bucket_type_socket) 00524 /** 00525 * Determine if a bucket is a HEAP bucket 00526 * @param e The bucket to inspect 00527 * @return true or false 00528 */ 00529 #define APR_BUCKET_IS_HEAP(e) ((e)->type == &apr_bucket_type_heap) 00530 /** 00531 * Determine if a bucket is a TRANSIENT bucket 00532 * @param e The bucket to inspect 00533 * @return true or false 00534 */ 00535 #define APR_BUCKET_IS_TRANSIENT(e) ((e)->type == &apr_bucket_type_transient) 00536 /** 00537 * Determine if a bucket is a IMMORTAL bucket 00538 * @param e The bucket to inspect 00539 * @return true or false 00540 */ 00541 #define APR_BUCKET_IS_IMMORTAL(e) ((e)->type == &apr_bucket_type_immortal) 00542 #if APR_HAS_MMAP 00543 /** 00544 * Determine if a bucket is a MMAP bucket 00545 * @param e The bucket to inspect 00546 * @return true or false 00547 */ 00548 #define APR_BUCKET_IS_MMAP(e) ((e)->type == &apr_bucket_type_mmap) 00549 #endif 00550 /** 00551 * Determine if a bucket is a POOL bucket 00552 * @param e The bucket to inspect 00553 * @return true or false 00554 */ 00555 #define APR_BUCKET_IS_POOL(e) ((e)->type == &apr_bucket_type_pool) 00556 00557 /* 00558 * General-purpose reference counting for the various bucket types. 00559 * 00560 * Any bucket type that keeps track of the resources it uses (i.e. 00561 * most of them except for IMMORTAL, TRANSIENT, and EOS) needs to 00562 * attach a reference count to the resource so that it can be freed 00563 * when the last bucket that uses it goes away. Resource-sharing may 00564 * occur because of bucket splits or buckets that refer to globally 00565 * cached data. */ 00566 00567 /** @see apr_bucket_refcount */ 00568 typedef struct apr_bucket_refcount apr_bucket_refcount; 00569 /** 00570 * The structure used to manage the shared resource must start with an 00571 * apr_bucket_refcount which is updated by the general-purpose refcount 00572 * code. A pointer to the bucket-type-dependent private data structure 00573 * can be cast to a pointer to an apr_bucket_refcount and vice versa. 00574 */ 00575 struct apr_bucket_refcount { 00576 /** The number of references to this bucket */ 00577 int refcount; 00578 }; 00579 00580 /* ***** Reference-counted bucket types ***** */ 00581 00582 /** @see apr_bucket_heap */ 00583 typedef struct apr_bucket_heap apr_bucket_heap; 00584 /** 00585 * A bucket referring to data allocated off the heap. 00586 */ 00587 struct apr_bucket_heap { 00588 /** Number of buckets using this memory */ 00589 apr_bucket_refcount refcount; 00590 /** The start of the data actually allocated. This should never be 00591 * modified, it is only used to free the bucket. 00592 */ 00593 char *base; 00594 /** how much memory was allocated */ 00595 apr_size_t alloc_len; 00596 /** function to use to delete the data */ 00597 void (*free_func)(void *data); 00598 }; 00599 00600 /** @see apr_bucket_pool */ 00601 typedef struct apr_bucket_pool apr_bucket_pool; 00602 /** 00603 * A bucket referring to data allocated from a pool 00604 */ 00605 struct apr_bucket_pool { 00606 /** The pool bucket must be able to be easily morphed to a heap 00607 * bucket if the pool gets cleaned up before all references are 00608 * destroyed. This apr_bucket_heap structure is populated automatically 00609 * when the pool gets cleaned up, and subsequent calls to pool_read() 00610 * will result in the apr_bucket in question being morphed into a 00611 * regular heap bucket. (To avoid having to do many extra refcount 00612 * manipulations and b->data manipulations, the apr_bucket_pool 00613 * struct actually *contains* the apr_bucket_heap struct that it 00614 * will become as its first element; the two share their 00615 * apr_bucket_refcount members.) 00616 */ 00617 apr_bucket_heap heap; 00618 /** The block of data actually allocated from the pool. 00619 * Segments of this block are referenced by adjusting 00620 * the start and length of the apr_bucket accordingly. 00621 * This will be NULL after the pool gets cleaned up. 00622 */ 00623 const char *base; 00624 /** The pool the data was allocated from. When the pool 00625 * is cleaned up, this gets set to NULL as an indicator 00626 * to pool_read() that the data is now on the heap and 00627 * so it should morph the bucket into a regular heap 00628 * bucket before continuing. 00629 */ 00630 apr_pool_t *pool; 00631 /** The freelist this structure was allocated from, which is 00632 * needed in the cleanup phase in order to allocate space on the heap 00633 */ 00634 apr_bucket_alloc_t *list; 00635 }; 00636 00637 #if APR_HAS_MMAP 00638 /** @see apr_bucket_mmap */ 00639 typedef struct apr_bucket_mmap apr_bucket_mmap; 00640 /** 00641 * A bucket referring to an mmap()ed file 00642 */ 00643 struct apr_bucket_mmap { 00644 /** Number of buckets using this memory */ 00645 apr_bucket_refcount refcount; 00646 /** The mmap this sub_bucket refers to */ 00647 apr_mmap_t *mmap; 00648 }; 00649 #endif 00650 00651 /** @see apr_bucket_file */ 00652 typedef struct apr_bucket_file apr_bucket_file; 00653 /** 00654 * A bucket referring to an file 00655 */ 00656 struct apr_bucket_file { 00657 /** Number of buckets using this memory */ 00658 apr_bucket_refcount refcount; 00659 /** The file this bucket refers to */ 00660 apr_file_t *fd; 00661 /** The pool into which any needed structures should 00662 * be created while reading from this file bucket */ 00663 apr_pool_t *readpool; 00664 #if APR_HAS_MMAP 00665 /** Whether this bucket should be memory-mapped if 00666 * a caller tries to read from it */ 00667 int can_mmap; 00668 #endif /* APR_HAS_MMAP */ 00669 }; 00670 00671 /** @see apr_bucket_structs */ 00672 typedef union apr_bucket_structs apr_bucket_structs; 00673 /** 00674 * A union of all bucket structures so we know what 00675 * the max size is. 00676 */ 00677 union apr_bucket_structs { 00678 apr_bucket b; /**< Bucket */ 00679 apr_bucket_heap heap; /**< Heap */ 00680 apr_bucket_pool pool; /**< Pool */ 00681 #if APR_HAS_MMAP 00682 apr_bucket_mmap mmap; /**< MMap */ 00683 #endif 00684 apr_bucket_file file; /**< File */ 00685 }; 00686 00687 /** 00688 * The amount that apr_bucket_alloc() should allocate in the common case. 00689 * Note: this is twice as big as apr_bucket_structs to allow breathing 00690 * room for third-party bucket types. 00691 */ 00692 #define APR_BUCKET_ALLOC_SIZE APR_ALIGN_DEFAULT(2*sizeof(apr_bucket_structs)) 00693 00694 /* ***** Bucket Brigade Functions ***** */ 00695 /** 00696 * Create a new bucket brigade. The bucket brigade is originally empty. 00697 * @param p The pool to associate with the brigade. Data is not allocated out 00698 * of the pool, but a cleanup is registered. 00699 * @param list The bucket allocator to use 00700 * @return The empty bucket brigade 00701 */ 00702 APU_DECLARE(apr_bucket_brigade *) apr_brigade_create(apr_pool_t *p, 00703 apr_bucket_alloc_t *list); 00704 00705 /** 00706 * destroy an entire bucket brigade. This includes destroying all of the 00707 * buckets within the bucket brigade's bucket list. 00708 * @param b The bucket brigade to destroy 00709 */ 00710 APU_DECLARE(apr_status_t) apr_brigade_destroy(apr_bucket_brigade *b); 00711 00712 /** 00713 * empty out an entire bucket brigade. This includes destroying all of the 00714 * buckets within the bucket brigade's bucket list. This is similar to 00715 * apr_brigade_destroy(), except that it does not deregister the brigade's 00716 * pool cleanup function. 00717 * @param data The bucket brigade to clean up 00718 * @remark Generally, you should use apr_brigade_destroy(). This function 00719 * can be useful in situations where you have a single brigade that 00720 * you wish to reuse many times by destroying all of the buckets in 00721 * the brigade and putting new buckets into it later. 00722 */ 00723 APU_DECLARE(apr_status_t) apr_brigade_cleanup(void *data); 00724 00725 /** 00726 * Split a bucket brigade into two, such that the given bucket is the 00727 * first in the new bucket brigade. This function is useful when a 00728 * filter wants to pass only the initial part of a brigade to the next 00729 * filter. 00730 * @param b The brigade to split 00731 * @param e The first element of the new brigade 00732 * @return The new brigade 00733 */ 00734 APU_DECLARE(apr_bucket_brigade *) apr_brigade_split(apr_bucket_brigade *b, 00735 apr_bucket *e); 00736 00737 /** 00738 * Partition a bucket brigade at a given offset (in bytes from the start of 00739 * the brigade). This is useful whenever a filter wants to use known ranges 00740 * of bytes from the brigade; the ranges can even overlap. 00741 * @param b The brigade to partition 00742 * @param point The offset at which to partition the brigade 00743 * @param after_point Returns a pointer to the first bucket after the partition 00744 */ 00745 APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b, 00746 apr_off_t point, 00747 apr_bucket **after_point); 00748 00749 #if APR_NOT_DONE_YET 00750 /** 00751 * consume nbytes from beginning of b -- call apr_bucket_destroy as 00752 * appropriate, and/or modify start on last element 00753 * @param b The brigade to consume data from 00754 * @param nbytes The number of bytes to consume 00755 */ 00756 APU_DECLARE(void) apr_brigade_consume(apr_bucket_brigade *b, 00757 apr_off_t nbytes); 00758 #endif 00759 00760 /** 00761 * Return the total length of the brigade. 00762 * @param bb The brigade to compute the length of 00763 * @param read_all Read unknown-length buckets to force a size 00764 * @param length Returns the length of the brigade, or -1 if the brigade has 00765 * buckets of indeterminate length and read_all is 0. 00766 */ 00767 APU_DECLARE(apr_status_t) apr_brigade_length(apr_bucket_brigade *bb, 00768 int read_all, 00769 apr_off_t *length); 00770 00771 /** 00772 * Take a bucket brigade and store the data in a flat char* 00773 * @param bb The bucket brigade to create the char* from 00774 * @param c The char* to write into 00775 * @param len The maximum length of the char array. On return, it is the 00776 * actual length of the char array. 00777 */ 00778 APU_DECLARE(apr_status_t) apr_brigade_flatten(apr_bucket_brigade *bb, 00779 char *c, 00780 apr_size_t *len); 00781 00782 /** 00783 * Creates a pool-allocated string representing a flat bucket brigade 00784 * @param bb The bucket brigade to create the char array from 00785 * @param c On return, the allocated char array 00786 * @param len On return, the length of the char array. 00787 * @param pool The pool to allocate the string from. 00788 */ 00789 APU_DECLARE(apr_status_t) apr_brigade_pflatten(apr_bucket_brigade *bb, 00790 char **c, 00791 apr_size_t *len, 00792 apr_pool_t *pool); 00793 00794 /** 00795 * Split a brigade to represent one LF line. 00796 * @param bbOut The bucket brigade that will have the LF line appended to. 00797 * @param bbIn The input bucket brigade to search for a LF-line. 00798 * @param block The blocking mode to be used to split the line. 00799 * @param maxbytes The maximum bytes to read. If this many bytes are seen 00800 * without a LF, the brigade will contain a partial line. 00801 */ 00802 APU_DECLARE(apr_status_t) apr_brigade_split_line(apr_bucket_brigade *bbOut, 00803 apr_bucket_brigade *bbIn, 00804 apr_read_type_e block, 00805 apr_off_t maxbytes); 00806 00807 /** 00808 * create an iovec of the elements in a bucket_brigade... return number 00809 * of elements used. This is useful for writing to a file or to the 00810 * network efficiently. 00811 * @param b The bucket brigade to create the iovec from 00812 * @param vec The iovec to create 00813 * @param nvec The number of elements in the iovec. On return, it is the 00814 * number of iovec elements actually filled out. 00815 */ 00816 APU_DECLARE(apr_status_t) apr_brigade_to_iovec(apr_bucket_brigade *b, 00817 struct iovec *vec, int *nvec); 00818 00819 /** 00820 * This function writes a list of strings into a bucket brigade. 00821 * @param b The bucket brigade to add to 00822 * @param flush The flush function to use if the brigade is full 00823 * @param ctx The structure to pass to the flush function 00824 * @param va A list of strings to add 00825 * @return APR_SUCCESS or error code. 00826 */ 00827 APU_DECLARE(apr_status_t) apr_brigade_vputstrs(apr_bucket_brigade *b, 00828 apr_brigade_flush flush, 00829 void *ctx, 00830 va_list va); 00831 00832 /** 00833 * This function writes a string into a bucket brigade. 00834 * @param b The bucket brigade to add to 00835 * @param flush The flush function to use if the brigade is full 00836 * @param ctx The structure to pass to the flush function 00837 * @param str The string to add 00838 * @param nbyte The number of bytes to write 00839 * @return APR_SUCCESS or error code 00840 */ 00841 APU_DECLARE(apr_status_t) apr_brigade_write(apr_bucket_brigade *b, 00842 apr_brigade_flush flush, void *ctx, 00843 const char *str, apr_size_t nbyte); 00844 00845 /** 00846 * This function writes multiple strings into a bucket brigade. 00847 * @param b The bucket brigade to add to 00848 * @param flush The flush function to use if the brigade is full 00849 * @param ctx The structure to pass to the flush function 00850 * @param vec The strings to add (address plus length for each) 00851 * @param nvec The number of entries in iovec 00852 * @return APR_SUCCESS or error code 00853 */ 00854 APU_DECLARE(apr_status_t) apr_brigade_writev(apr_bucket_brigade *b, 00855 apr_brigade_flush flush, 00856 void *ctx, 00857 const struct iovec *vec, 00858 apr_size_t nvec); 00859 00860 /** 00861 * This function writes a string into a bucket brigade. 00862 * @param bb The bucket brigade to add to 00863 * @param flush The flush function to use if the brigade is full 00864 * @param ctx The structure to pass to the flush function 00865 * @param str The string to add 00866 * @return APR_SUCCESS or error code 00867 */ 00868 APU_DECLARE(apr_status_t) apr_brigade_puts(apr_bucket_brigade *bb, 00869 apr_brigade_flush flush, void *ctx, 00870 const char *str); 00871 00872 /** 00873 * This function writes a character into a bucket brigade. 00874 * @param b The bucket brigade to add to 00875 * @param flush The flush function to use if the brigade is full 00876 * @param ctx The structure to pass to the flush function 00877 * @param c The character to add 00878 * @return APR_SUCCESS or error code 00879 */ 00880 APU_DECLARE(apr_status_t) apr_brigade_putc(apr_bucket_brigade *b, 00881 apr_brigade_flush flush, void *ctx, 00882 const char c); 00883 00884 /** 00885 * This function writes an unspecified number of strings into a bucket brigade. 00886 * @param b The bucket brigade to add to 00887 * @param flush The flush function to use if the brigade is full 00888 * @param ctx The structure to pass to the flush function 00889 * @param ... The strings to add 00890 * @return APR_SUCCESS or error code 00891 */ 00892 APU_DECLARE_NONSTD(apr_status_t) apr_brigade_putstrs(apr_bucket_brigade *b, 00893 apr_brigade_flush flush, 00894 void *ctx, ...); 00895 00896 /** 00897 * Evaluate a printf and put the resulting string at the end 00898 * of the bucket brigade. 00899 * @param b The brigade to write to 00900 * @param flush The flush function to use if the brigade is full 00901 * @param ctx The structure to pass to the flush function 00902 * @param fmt The format of the string to write 00903 * @param ... The arguments to fill out the format 00904 * @return APR_SUCCESS or error code 00905 */ 00906 APU_DECLARE_NONSTD(apr_status_t) apr_brigade_printf(apr_bucket_brigade *b, 00907 apr_brigade_flush flush, 00908 void *ctx, 00909 const char *fmt, ...) 00910 __attribute__((format(printf,4,5))); 00911 00912 /** 00913 * Evaluate a printf and put the resulting string at the end 00914 * of the bucket brigade. 00915 * @param b The brigade to write to 00916 * @param flush The flush function to use if the brigade is full 00917 * @param ctx The structure to pass to the flush function 00918 * @param fmt The format of the string to write 00919 * @param va The arguments to fill out the format 00920 * @return APR_SUCCESS or error code 00921 */ 00922 APU_DECLARE(apr_status_t) apr_brigade_vprintf(apr_bucket_brigade *b, 00923 apr_brigade_flush flush, 00924 void *ctx, 00925 const char *fmt, va_list va); 00926 00927 /* ***** Bucket freelist functions ***** */ 00928 /** 00929 * Create a bucket allocator. 00930 * @param p This pool's underlying apr_allocator_t is used to allocate memory 00931 * for the bucket allocator. When the pool is destroyed, the bucket 00932 * allocator's cleanup routine will free all memory that has been 00933 * allocated from it. 00934 * @remark The reason the allocator gets its memory from the pool's 00935 * apr_allocator_t rather than from the pool itself is because 00936 * the bucket allocator will free large memory blocks back to the 00937 * allocator when it's done with them, thereby preventing memory 00938 * footprint growth that would occur if we allocated from the pool. 00939 * @warning The allocator must never be used by more than one thread at a time. 00940 */ 00941 APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create(apr_pool_t *p); 00942 00943 /** 00944 * Create a bucket allocator. 00945 * @param allocator This apr_allocator_t is used to allocate both the bucket 00946 * allocator and all memory handed out by the bucket allocator. The 00947 * caller is responsible for destroying the bucket allocator and the 00948 * apr_allocator_t -- no automatic cleanups will happen. 00949 * @warning The allocator must never be used by more than one thread at a time. 00950 */ 00951 APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create_ex(apr_allocator_t *allocator); 00952 00953 /** 00954 * Destroy a bucket allocator. 00955 * @param list The allocator to be destroyed 00956 */ 00957 APU_DECLARE_NONSTD(void) apr_bucket_alloc_destroy(apr_bucket_alloc_t *list); 00958 00959 /** 00960 * Allocate memory for use by the buckets. 00961 * @param size The amount to allocate. 00962 * @param list The allocator from which to allocate the memory. 00963 */ 00964 APU_DECLARE_NONSTD(void *) apr_bucket_alloc(apr_size_t size, apr_bucket_alloc_t *list); 00965 00966 /** 00967 * Free memory previously allocated with apr_bucket_alloc(). 00968 * @param block The block of memory to be freed. 00969 */ 00970 APU_DECLARE_NONSTD(void) apr_bucket_free(void *block); 00971 00972 00973 /* ***** Bucket Functions ***** */ 00974 /** 00975 * Free the resources used by a bucket. If multiple buckets refer to 00976 * the same resource it is freed when the last one goes away. 00977 * @see apr_bucket_delete() 00978 * @param e The bucket to destroy 00979 */ 00980 #define apr_bucket_destroy(e) do { \ 00981 (e)->type->destroy((e)->data); \ 00982 (e)->free(e); \ 00983 } while (0) 00984 00985 /** 00986 * Delete a bucket by removing it from its brigade (if any) and then 00987 * destroying it. 00988 * @remark This mainly acts as an aid in avoiding code verbosity. It is 00989 * the preferred exact equivalent to: 00990 * <pre> 00991 * APR_BUCKET_REMOVE(e); 00992 * apr_bucket_destroy(e); 00993 * </pre> 00994 * @param e The bucket to delete 00995 */ 00996 #define apr_bucket_delete(e) do { \ 00997 APR_BUCKET_REMOVE(e); \ 00998 apr_bucket_destroy(e); \ 00999 } while (0) 01000 01001 /** 01002 * read the data from the bucket 01003 * @param e The bucket to read from 01004 * @param str The location to store the data in 01005 * @param len The amount of data read 01006 * @param block Whether the read function blocks 01007 */ 01008 #define apr_bucket_read(e,str,len,block) (e)->type->read(e, str, len, block) 01009 01010 /** 01011 * Setaside data so that stack data is not destroyed on returning from 01012 * the function 01013 * @param e The bucket to setaside 01014 * @param p The pool to setaside into 01015 */ 01016 #define apr_bucket_setaside(e,p) (e)->type->setaside(e,p) 01017 01018 /** 01019 * Split one bucket in two. 01020 * @param e The bucket to split 01021 * @param point The offset to split the bucket at 01022 */ 01023 #define apr_bucket_split(e,point) (e)->type->split(e, point) 01024 01025 /** 01026 * Copy a bucket. 01027 * @param e The bucket to copy 01028 * @param c Returns a pointer to the new bucket 01029 */ 01030 #define apr_bucket_copy(e,c) (e)->type->copy(e, c) 01031 01032 /* Bucket type handling */ 01033 01034 /** 01035 * This function simply returns APR_SUCCESS to denote that the bucket does 01036 * not require anything to happen for its setaside() function. This is 01037 * appropriate for buckets that have "immortal" data -- the data will live 01038 * at least as long as the bucket. 01039 * @param data The bucket to setaside 01040 * @param pool The pool defining the desired lifetime of the bucket data 01041 * @return APR_SUCCESS 01042 */ 01043 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_noop(apr_bucket *data, 01044 apr_pool_t *pool); 01045 01046 /** 01047 * A place holder function that signifies that the setaside function was not 01048 * implemented for this bucket 01049 * @param data The bucket to setaside 01050 * @param pool The pool defining the desired lifetime of the bucket data 01051 * @return APR_ENOTIMPL 01052 */ 01053 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_notimpl(apr_bucket *data, 01054 apr_pool_t *pool); 01055 01056 /** 01057 * A place holder function that signifies that the split function was not 01058 * implemented for this bucket 01059 * @param data The bucket to split 01060 * @param point The location to split the bucket 01061 * @return APR_ENOTIMPL 01062 */ 01063 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_split_notimpl(apr_bucket *data, 01064 apr_size_t point); 01065 01066 /** 01067 * A place holder function that signifies that the copy function was not 01068 * implemented for this bucket 01069 * @param e The bucket to copy 01070 * @param c Returns a pointer to the new bucket 01071 * @return APR_ENOTIMPL 01072 */ 01073 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_copy_notimpl(apr_bucket *e, 01074 apr_bucket **c); 01075 01076 /** 01077 * A place holder function that signifies that this bucket does not need 01078 * to do anything special to be destroyed. That's only the case for buckets 01079 * that either have no data (metadata buckets) or buckets whose data pointer 01080 * points to something that's not a bucket-type-specific structure, as with 01081 * simple buckets where data points to a string and pipe buckets where data 01082 * points directly to the apr_file_t. 01083 * @param data The bucket data to destroy 01084 */ 01085 APU_DECLARE_NONSTD(void) apr_bucket_destroy_noop(void *data); 01086 01087 /** 01088 * There is no apr_bucket_destroy_notimpl, because destruction is required 01089 * to be implemented (it could be a noop, but only if that makes sense for 01090 * the bucket type) 01091 */ 01092 01093 /* There is no apr_bucket_read_notimpl, because it is a required function 01094 */ 01095 01096 01097 /* All of the bucket types implemented by the core */ 01098 /** 01099 * The flush bucket type. This signifies that all data should be flushed to 01100 * the next filter. The flush bucket should be sent with the other buckets. 01101 */ 01102 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_flush; 01103 /** 01104 * The EOS bucket type. This signifies that there will be no more data, ever. 01105 * All filters MUST send all data to the next filter when they receive a 01106 * bucket of this type 01107 */ 01108 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_eos; 01109 /** 01110 * The FILE bucket type. This bucket represents a file on disk 01111 */ 01112 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_file; 01113 /** 01114 * The HEAP bucket type. This bucket represents a data allocated from the 01115 * heap. 01116 */ 01117 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_heap; 01118 #if APR_HAS_MMAP 01119 /** 01120 * The MMAP bucket type. This bucket represents an MMAP'ed file 01121 */ 01122 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_mmap; 01123 #endif 01124 /** 01125 * The POOL bucket type. This bucket represents a data that was allocated 01126 * from a pool. IF this bucket is still available when the pool is cleared, 01127 * the data is copied on to the heap. 01128 */ 01129 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pool; 01130 /** 01131 * The PIPE bucket type. This bucket represents a pipe to another program. 01132 */ 01133 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pipe; 01134 /** 01135 * The IMMORTAL bucket type. This bucket represents a segment of data that 01136 * the creator is willing to take responsibility for. The core will do 01137 * nothing with the data in an immortal bucket 01138 */ 01139 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_immortal; 01140 /** 01141 * The TRANSIENT bucket type. This bucket represents a data allocated off 01142 * the stack. When the setaside function is called, this data is copied on 01143 * to the heap 01144 */ 01145 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_transient; 01146 /** 01147 * The SOCKET bucket type. This bucket represents a socket to another machine 01148 */ 01149 APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_socket; 01150 01151 01152 /* ***** Simple buckets ***** */ 01153 01154 /** 01155 * Split a simple bucket into two at the given point. Most non-reference 01156 * counting buckets that allow multiple references to the same block of 01157 * data (eg transient and immortal) will use this as their split function 01158 * without any additional type-specific handling. 01159 * @param b The bucket to be split 01160 * @param point The offset of the first byte in the new bucket 01161 * @return APR_EINVAL if the point is not within the bucket; 01162 * APR_ENOMEM if allocation failed; 01163 * or APR_SUCCESS 01164 */ 01165 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_split(apr_bucket *b, 01166 apr_size_t point); 01167 01168 /** 01169 * Copy a simple bucket. Most non-reference-counting buckets that allow 01170 * multiple references to the same block of data (eg transient and immortal) 01171 * will use this as their copy function without any additional type-specific 01172 * handling. 01173 * @param a The bucket to copy 01174 * @param b Returns a pointer to the new bucket 01175 * @return APR_ENOMEM if allocation failed; 01176 * or APR_SUCCESS 01177 */ 01178 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_copy(apr_bucket *a, 01179 apr_bucket **b); 01180 01181 01182 /* ***** Shared, reference-counted buckets ***** */ 01183 01184 /** 01185 * Initialize a bucket containing reference-counted data that may be 01186 * shared. The caller must allocate the bucket if necessary and 01187 * initialize its type-dependent fields, and allocate and initialize 01188 * its own private data structure. This function should only be called 01189 * by type-specific bucket creation functions. 01190 * @param b The bucket to initialize 01191 * @param data A pointer to the private data structure 01192 * with the reference count at the start 01193 * @param start The start of the data in the bucket 01194 * relative to the private base pointer 01195 * @param length The length of the data in the bucket 01196 * @return The new bucket, or NULL if allocation failed 01197 */ 01198 APU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data, 01199 apr_off_t start, 01200 apr_size_t length); 01201 01202 /** 01203 * Decrement the refcount of the data in the bucket. This function 01204 * should only be called by type-specific bucket destruction functions. 01205 * @param data The private data pointer from the bucket to be destroyed 01206 * @return TRUE or FALSE; TRUE if the reference count is now 01207 * zero, indicating that the shared resource itself can 01208 * be destroyed by the caller. 01209 */ 01210 APU_DECLARE(int) apr_bucket_shared_destroy(void *data); 01211 01212 /** 01213 * Split a bucket into two at the given point, and adjust the refcount 01214 * to the underlying data. Most reference-counting bucket types will 01215 * be able to use this function as their split function without any 01216 * additional type-specific handling. 01217 * @param b The bucket to be split 01218 * @param point The offset of the first byte in the new bucket 01219 * @return APR_EINVAL if the point is not within the bucket; 01220 * APR_ENOMEM if allocation failed; 01221 * or APR_SUCCESS 01222 */ 01223 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *b, 01224 apr_size_t point); 01225 01226 /** 01227 * Copy a refcounted bucket, incrementing the reference count. Most 01228 * reference-counting bucket types will be able to use this function 01229 * as their copy function without any additional type-specific handling. 01230 * @param a The bucket to copy 01231 * @param b Returns a pointer to the new bucket 01232 * @return APR_ENOMEM if allocation failed; 01233 or APR_SUCCESS 01234 */ 01235 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a, 01236 apr_bucket **b); 01237 01238 01239 /* ***** Functions to Create Buckets of varying types ***** */ 01240 /* 01241 * Each bucket type foo has two initialization functions: 01242 * apr_bucket_foo_make which sets up some already-allocated memory as a 01243 * bucket of type foo; and apr_bucket_foo_create which allocates memory 01244 * for the bucket, calls apr_bucket_make_foo, and initializes the 01245 * bucket's list pointers. The apr_bucket_foo_make functions are used 01246 * inside the bucket code to change the type of buckets in place; 01247 * other code should call apr_bucket_foo_create. All the initialization 01248 * functions change nothing if they fail. 01249 */ 01250 01251 /** 01252 * Create an End of Stream bucket. This indicates that there is no more data 01253 * coming from down the filter stack. All filters should flush at this point. 01254 * @param list The freelist from which this bucket should be allocated 01255 * @return The new bucket, or NULL if allocation failed 01256 */ 01257 APU_DECLARE(apr_bucket *) apr_bucket_eos_create(apr_bucket_alloc_t *list); 01258 01259 /** 01260 * Make the bucket passed in an EOS bucket. This indicates that there is no 01261 * more data coming from down the filter stack. All filters should flush at 01262 * this point. 01263 * @param b The bucket to make into an EOS bucket 01264 * @return The new bucket, or NULL if allocation failed 01265 */ 01266 APU_DECLARE(apr_bucket *) apr_bucket_eos_make(apr_bucket *b); 01267 01268 /** 01269 * Create a flush bucket. This indicates that filters should flush their 01270 * data. There is no guarantee that they will flush it, but this is the 01271 * best we can do. 01272 * @param list The freelist from which this bucket should be allocated 01273 * @return The new bucket, or NULL if allocation failed 01274 */ 01275 APU_DECLARE(apr_bucket *) apr_bucket_flush_create(apr_bucket_alloc_t *list); 01276 01277 /** 01278 * Make the bucket passed in a FLUSH bucket. This indicates that filters 01279 * should flush their data. There is no guarantee that they will flush it, 01280 * but this is the best we can do. 01281 * @param b The bucket to make into a FLUSH bucket 01282 * @return The new bucket, or NULL if allocation failed 01283 */ 01284 APU_DECLARE(apr_bucket *) apr_bucket_flush_make(apr_bucket *b); 01285 01286 /** 01287 * Create a bucket referring to long-lived data. 01288 * @param buf The data to insert into the bucket 01289 * @param nbyte The size of the data to insert. 01290 * @param list The freelist from which this bucket should be allocated 01291 * @return The new bucket, or NULL if allocation failed 01292 */ 01293 APU_DECLARE(apr_bucket *) apr_bucket_immortal_create(const char *buf, 01294 apr_size_t nbyte, 01295 apr_bucket_alloc_t *list); 01296 01297 /** 01298 * Make the bucket passed in a bucket refer to long-lived data 01299 * @param b The bucket to make into a IMMORTAL bucket 01300 * @param buf The data to insert into the bucket 01301 * @param nbyte The size of the data to insert. 01302 * @return The new bucket, or NULL if allocation failed 01303 */ 01304 APU_DECLARE(apr_bucket *) apr_bucket_immortal_make(apr_bucket *b, 01305 const char *buf, 01306 apr_size_t nbyte); 01307 01308 /** 01309 * Create a bucket referring to data on the stack. 01310 * @param buf The data to insert into the bucket 01311 * @param nbyte The size of the data to insert. 01312 * @param list The freelist from which this bucket should be allocated 01313 * @return The new bucket, or NULL if allocation failed 01314 */ 01315 APU_DECLARE(apr_bucket *) apr_bucket_transient_create(const char *buf, 01316 apr_size_t nbyte, 01317 apr_bucket_alloc_t *list); 01318 01319 /** 01320 * Make the bucket passed in a bucket refer to stack data 01321 * @param b The bucket to make into a TRANSIENT bucket 01322 * @param buf The data to insert into the bucket 01323 * @param nbyte The size of the data to insert. 01324 * @return The new bucket, or NULL if allocation failed 01325 */ 01326 APU_DECLARE(apr_bucket *) apr_bucket_transient_make(apr_bucket *b, 01327 const char *buf, 01328 apr_size_t nbyte); 01329 01330 /** 01331 * Create a bucket referring to memory on the heap. If the caller asks 01332 * for the data to be copied, this function always allocates 4K of 01333 * memory so that more data can be added to the bucket without 01334 * requiring another allocation. Therefore not all the data may be put 01335 * into the bucket. If copying is not requested then the bucket takes 01336 * over responsibility for free()ing the memory. 01337 * @param buf The buffer to insert into the bucket 01338 * @param nbyte The size of the buffer to insert. 01339 * @param free_func Function to use to free the data; NULL indicates that the 01340 * bucket should make a copy of the data 01341 * @param list The freelist from which this bucket should be allocated 01342 * @return The new bucket, or NULL if allocation failed 01343 */ 01344 APU_DECLARE(apr_bucket *) apr_bucket_heap_create(const char *buf, 01345 apr_size_t nbyte, 01346 void (*free_func)(void *data), 01347 apr_bucket_alloc_t *list); 01348 /** 01349 * Make the bucket passed in a bucket refer to heap data 01350 * @param b The bucket to make into a HEAP bucket 01351 * @param buf The buffer to insert into the bucket 01352 * @param nbyte The size of the buffer to insert. 01353 * @param free_func Function to use to free the data; NULL indicates that the 01354 * bucket should make a copy of the data 01355 * @return The new bucket, or NULL if allocation failed 01356 */ 01357 APU_DECLARE(apr_bucket *) apr_bucket_heap_make(apr_bucket *b, const char *buf, 01358 apr_size_t nbyte, 01359 void (*free_func)(void *data)); 01360 01361 /** 01362 * Create a bucket referring to memory allocated from a pool. 01363 * 01364 * @param buf The buffer to insert into the bucket 01365 * @param length The number of bytes referred to by this bucket 01366 * @param pool The pool the memory was allocated from 01367 * @param list The freelist from which this bucket should be allocated 01368 * @return The new bucket, or NULL if allocation failed 01369 */ 01370 APU_DECLARE(apr_bucket *) apr_bucket_pool_create(const char *buf, 01371 apr_size_t length, 01372 apr_pool_t *pool, 01373 apr_bucket_alloc_t *list); 01374 01375 /** 01376 * Make the bucket passed in a bucket refer to pool data 01377 * @param b The bucket to make into a pool bucket 01378 * @param buf The buffer to insert into the bucket 01379 * @param length The number of bytes referred to by this bucket 01380 * @param pool The pool the memory was allocated from 01381 * @return The new bucket, or NULL if allocation failed 01382 */ 01383 APU_DECLARE(apr_bucket *) apr_bucket_pool_make(apr_bucket *b, const char *buf, 01384 apr_size_t length, 01385 apr_pool_t *pool); 01386 01387 #if APR_HAS_MMAP 01388 /** 01389 * Create a bucket referring to mmap()ed memory. 01390 * @param mm The mmap to insert into the bucket 01391