Apache Software Foundation > HTTP Server Project > Request Library Subproject
Apache HTTP Server Request Library
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_UTIL_H 00019 #define APREQ_UTIL_H 00020 00021 #include "apr_file_io.h" 00022 #include "apr_buckets.h" 00023 #include "apreq.h" 00024 00025 #ifdef __cplusplus 00026 extern "C" { 00027 #endif 00028 00053 APREQ_DECLARE(char *) apreq_join(apr_pool_t *p, 00054 const char *sep, 00055 const apr_array_header_t *arr, 00056 apreq_join_t mode); 00057 00070 APREQ_DECLARE(apr_ssize_t) apreq_index(const char* hay, apr_size_t hlen, 00071 const char* ndl, apr_size_t nlen, 00072 const apreq_match_t type); 00073 00086 APREQ_DECLARE(apr_size_t) apreq_quote(char *dest, const char *src, 00087 const apr_size_t slen); 00088 00102 APREQ_DECLARE(apr_size_t) apreq_quote_once(char *dest, const char *src, 00103 const apr_size_t slen); 00104 00115 APREQ_DECLARE(apr_size_t) apreq_encode(char *dest, const char *src, 00116 const apr_size_t slen); 00117 00129 APREQ_DECLARE(apr_size_t) apreq_cp1252_to_utf8(char *dest, 00130 const char *src, apr_size_t slen); 00131 00143 APREQ_DECLARE(apreq_charset_t) apreq_charset_divine(const char *src, 00144 apr_size_t slen); 00145 00166 APREQ_DECLARE(apr_status_t) apreq_decode(char *dest, apr_size_t *dlen, 00167 const char *src, apr_size_t slen); 00168 00189 APREQ_DECLARE(apr_status_t) apreq_decodev(char *dest, apr_size_t *dlen, 00190 struct iovec *v, int nelts); 00191 00204 static APR_INLINE 00205 char *apreq_escape(apr_pool_t *p, const char *src, const apr_size_t slen) 00206 { 00207 char *rv; 00208 00209 if (src == NULL) 00210 return NULL; 00211 00212 rv = (char *)apr_palloc(p, 3 * slen + 1); 00213 apreq_encode(rv, src, slen); 00214 return rv; 00215 } 00216 00224 static APR_INLINE apr_ssize_t apreq_unescape(char *str) 00225 { 00226 apr_size_t len; 00227 apr_status_t rv = apreq_decode(str, &len, str, strlen(str)); 00228 if (rv == APR_SUCCESS) 00229 return (apr_ssize_t)len; 00230 else 00231 return -1; 00232 } 00233 00245 APREQ_DECLARE(apr_int64_t) apreq_atoi64f(const char *s); 00246 00258 APREQ_DECLARE(apr_int64_t) apreq_atoi64t(const char *s); 00259 00277 APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f, 00278 apr_off_t *wlen, 00279 apr_bucket_brigade *bb); 00296 APREQ_DECLARE(apr_status_t) apreq_file_mktemp(apr_file_t **fp, 00297 apr_pool_t *pool, 00298 const char *path); 00299 00309 static APR_INLINE 00310 apr_status_t apreq_brigade_setaside(apr_bucket_brigade *bb, apr_pool_t *p) 00311 { 00312 apr_bucket *e; 00313 for (e = APR_BRIGADE_FIRST(bb); e != APR_BRIGADE_SENTINEL(bb); 00314 e = APR_BUCKET_NEXT(e)) 00315 { 00316 apr_status_t rv = apr_bucket_setaside(e, p); 00317 if (rv != APR_SUCCESS) 00318 return rv; 00319 } 00320 return APR_SUCCESS; 00321 } 00322 00323 00336 static APR_INLINE 00337 apr_status_t apreq_brigade_copy(apr_bucket_brigade *d, apr_bucket_brigade *s) { 00338 apr_bucket *e; 00339 for (e = APR_BRIGADE_FIRST(s); e != APR_BRIGADE_SENTINEL(s); 00340 e = APR_BUCKET_NEXT(e)) 00341 { 00342 apr_bucket *c; 00343 apr_status_t rv = apr_bucket_copy(e, &c); 00344 if (rv != APR_SUCCESS) 00345 return rv; 00346 00347 APR_BRIGADE_INSERT_TAIL(d, c); 00348 } 00349 return APR_SUCCESS; 00350 } 00351 00363 static APR_INLINE 00364 void apreq_brigade_move(apr_bucket_brigade *d, apr_bucket_brigade *s, 00365 apr_bucket *e) 00366 { 00367 apr_bucket *f; 00368 00369 if (e != APR_BRIGADE_SENTINEL(s)) { 00370 f = APR_RING_FIRST(&s->list); 00371 if (f == e) /* zero buckets to be moved */ 00372 return; 00373 00374 /* obtain the last bucket to be moved */ 00375 e = APR_RING_PREV(e, link); 00376 00377 APR_RING_UNSPLICE(f, e, link); 00378 APR_RING_SPLICE_HEAD(&d->list, f, e, apr_bucket, link); 00379 } 00380 else { 00381 APR_BRIGADE_CONCAT(d, s); 00382 } 00383 } 00384 00385 00399 APREQ_DECLARE(apr_status_t) apreq_header_attribute(const char *hdr, 00400 const char *name, 00401 const apr_size_t nlen, 00402 const char **val, 00403 apr_size_t *vlen); 00404 00405 00423 APREQ_DECLARE(apr_status_t) apreq_brigade_concat(apr_pool_t *pool, 00424 const char *temp_dir, 00425 apr_size_t brigade_limit, 00426 apr_bucket_brigade *out, 00427 apr_bucket_brigade *in); 00428 00437 APREQ_DECLARE(apr_file_t *)apreq_brigade_spoolfile(apr_bucket_brigade *bb); 00438 00439 #ifdef __cplusplus 00440 } 00441 #endif 00442 00443 #endif /* APREQ_UTIL_H */
Copyright © 2003-2006 The Apache Software Foundation.
See LICENSE.
page generated by doxygen
version 1.5.6 on 25 Nov 2010