/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __mod_h2__h2_headers__ #define __mod_h2__h2_headers__ #include "h2.h" #if !AP_HAS_RESPONSE_BUCKETS struct h2_bucket_beam; typedef struct h2_headers h2_headers; struct h2_headers { int status; apr_table_t *headers; apr_table_t *notes; apr_off_t raw_bytes; /* RAW network bytes that generated this request - if known. */ }; extern const apr_bucket_type_t h2_bucket_type_headers; #define H2_BUCKET_IS_HEADERS(e) (e->type == &h2_bucket_type_headers) apr_bucket * h2_bucket_headers_make(apr_bucket *b, h2_headers *r); apr_bucket * h2_bucket_headers_create(apr_bucket_alloc_t *list, h2_headers *r); h2_headers *h2_bucket_headers_get(apr_bucket *b); /** * Create the headers from the given status and headers * @param status the headers status * @param header the headers of the headers * @param notes the notes carried by the headers * @param raw_bytes the raw network bytes (if known) used to transmit these * @param pool the memory pool to use */ h2_headers *h2_headers_create(int status, const apr_table_t *header, const apr_table_t *notes, apr_off_t raw_bytes, apr_pool_t *pool); /** * Create the headers from the given request_rec. * @param r the request record which was processed * @param status the headers status * @param header the headers of the headers * @param pool the memory pool to use */ h2_headers *h2_headers_rcreate(request_rec *r, int status, const apr_table_t *header, apr_pool_t *pool); /** * Copy the headers into another pool. This will not copy any * header strings. */ h2_headers *h2_headers_copy(apr_pool_t *pool, h2_headers *h); /** * Clone the headers into another pool. This will also clone any * header strings. */ h2_headers *h2_headers_clone(apr_pool_t *pool, h2_headers *h); /** * Create the headers for the given error. * @param type the error code * @param req the original h2_request * @param pool the memory pool to use */ h2_headers *h2_headers_die(apr_status_t type, const struct h2_request *req, apr_pool_t *pool); int h2_headers_are_final_response(h2_headers *headers); /** * Give the number of bytes of all contained header strings. */ apr_size_t h2_headers_length(h2_headers *headers); /** * For H2HEADER buckets, return the length of all contained header strings. * For all other buckets, return 0. */ apr_size_t h2_bucket_headers_headers_length(apr_bucket *b); apr_bucket *h2_bucket_headers_clone(apr_bucket *b, apr_pool_t *pool, apr_bucket_alloc_t *list); #endif /* !AP_HAS_RESPONSE_BUCKETS */ #endif /* defined(__mod_h2__h2_headers__) */