1a38107941725211e7c3f051f7a8f5e12199f03acmaeder/* Licensed to the Apache Software Foundation (ASF) under one or more
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * contributor license agreements. See the NOTICE file distributed with
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner * this work for additional information regarding copyright ownership.
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * The ASF licenses this file to You under the Apache License, Version 2.0
431571057e88a650a974adec93ea4bb5173b6213Felix Gabriel Mance * (the "License"); you may not use this file except in compliance with
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * the License. You may obtain a copy of the License at
431571057e88a650a974adec93ea4bb5173b6213Felix Gabriel Mance * http://www.apache.org/licenses/LICENSE-2.0
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * Unless required by applicable law or agreed to in writing, software
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * distributed under the License is distributed on an "AS IS" BASIS,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * See the License for the specific language governing permissions and
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * limitations under the License.
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu/* we know core's module_index is 0 */
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu#define APLOG_MODULE_INDEX AP_CORE_MODULE_INDEX
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuAP_DECLARE(void) ap_fcgi_header_to_array(ap_fcgi_header *h,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu unsigned char a[])
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu a[AP_FCGI_HDR_VERSION_OFFSET] = h->version;
424860079d47bf490fa98d5d7498096a0447c569mcodescu a[AP_FCGI_HDR_REQUEST_ID_B1_OFFSET] = h->requestIdB1;
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu a[AP_FCGI_HDR_REQUEST_ID_B0_OFFSET] = h->requestIdB0;
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu a[AP_FCGI_HDR_CONTENT_LEN_B1_OFFSET] = h->contentLengthB1;
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder a[AP_FCGI_HDR_CONTENT_LEN_B0_OFFSET] = h->contentLengthB0;
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder a[AP_FCGI_HDR_PADDING_LEN_OFFSET] = h->paddingLength;
32bbac77828be0233953f8fe476edb0a9585408dChristian Maeder a[AP_FCGI_HDR_RESERVED_OFFSET] = h->reserved;
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuAP_DECLARE(void) ap_fcgi_header_from_array(ap_fcgi_header *h,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu unsigned char a[])
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu h->version = a[AP_FCGI_HDR_VERSION_OFFSET];
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu h->type = a[AP_FCGI_HDR_TYPE_OFFSET];
27fdf879983dd28e211b41f3be6c0e930b7c816bFelix Gabriel Mance h->requestIdB1 = a[AP_FCGI_HDR_REQUEST_ID_B1_OFFSET];
431571057e88a650a974adec93ea4bb5173b6213Felix Gabriel Mance h->requestIdB0 = a[AP_FCGI_HDR_REQUEST_ID_B0_OFFSET];
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder h->contentLengthB1 = a[AP_FCGI_HDR_CONTENT_LEN_B1_OFFSET];
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu h->contentLengthB0 = a[AP_FCGI_HDR_CONTENT_LEN_B0_OFFSET];
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu h->paddingLength = a[AP_FCGI_HDR_PADDING_LEN_OFFSET];
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu h->reserved = a[AP_FCGI_HDR_RESERVED_OFFSET];
b84c87f199dc287d235d7dad6ea344f6912ef531Christian MaederAP_DECLARE(void) ap_fcgi_header_fields_from_array(unsigned char *version,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu unsigned char *type,
be00381168b3f10192afabbba136fb06d3a9f358Christian Maeder unsigned char *padding_len,
be00381168b3f10192afabbba136fb06d3a9f358Christian Maeder unsigned char a[])
27fdf879983dd28e211b41f3be6c0e930b7c816bFelix Gabriel Mance *version = a[AP_FCGI_HDR_VERSION_OFFSET];
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu *request_id = (a[AP_FCGI_HDR_REQUEST_ID_B1_OFFSET] << 8)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu *content_len = (a[AP_FCGI_HDR_CONTENT_LEN_B1_OFFSET] << 8)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu + a[AP_FCGI_HDR_CONTENT_LEN_B0_OFFSET];
27fdf879983dd28e211b41f3be6c0e930b7c816bFelix Gabriel Mance *padding_len = a[AP_FCGI_HDR_PADDING_LEN_OFFSET];
d0f58d27c2536eba454d8f77de8617bc6a2c99cdFelix Gabriel ManceAP_DECLARE(void) ap_fcgi_begin_request_body_to_array(ap_fcgi_begin_request_body *h,
d0f58d27c2536eba454d8f77de8617bc6a2c99cdFelix Gabriel Mance unsigned char a[])
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu a[AP_FCGI_BRB_ROLEB1_OFFSET] = h->roleB1;
27fdf879983dd28e211b41f3be6c0e930b7c816bFelix Gabriel Mance a[AP_FCGI_BRB_ROLEB0_OFFSET] = h->roleB0;
60f30f0eeeacdfc1e0dfe39664373ddf5a0675adFelix Gabriel Mance a[AP_FCGI_BRB_RESERVED0_OFFSET] = h->reserved[0];
60f30f0eeeacdfc1e0dfe39664373ddf5a0675adFelix Gabriel Mance a[AP_FCGI_BRB_RESERVED1_OFFSET] = h->reserved[1];
0dd6e7830de0887c9a12356447975a826b3b3db2Christian Maeder a[AP_FCGI_BRB_RESERVED2_OFFSET] = h->reserved[2];
d6d81ead61a5f9fb7d047e623f7898e730c258camcodescuAP_DECLARE(void) ap_fcgi_fill_in_header(ap_fcgi_header *header,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu header->version = AP_FCGI_VERSION_1;
7852de3551fc797566ee71165bafe05b6d81728cnotanartist header->requestIdB1 = ((request_id >> 8) & 0xff);
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski header->requestIdB0 = ((request_id) & 0xff);
424860079d47bf490fa98d5d7498096a0447c569mcodescu header->contentLengthB1 = ((content_len >> 8) & 0xff);
0dd6e7830de0887c9a12356447975a826b3b3db2Christian Maeder header->contentLengthB0 = ((content_len) & 0xff);
d0f58d27c2536eba454d8f77de8617bc6a2c99cdFelix Gabriel ManceAP_DECLARE(void) ap_fcgi_fill_in_request_body(ap_fcgi_begin_request_body *brb,
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederAP_DECLARE(apr_size_t) ap_fcgi_encoded_env_len(apr_table_t *env,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu if (maxlen > AP_FCGI_MAX_CONTENT_LEN) {
d3cb3401882f6956de016f8eecbec1cd3b868acbFelix Gabriel Mance elts = (const apr_table_entry_t *) envarr->elts;
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu /* envlen - speculative, may overflow the limit
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu * actualenvlen - len required without overflowing
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu for (i = *starting_elem; i < envarr->nelts; ) {
cf0439f74f1d55a9840d38a88f9b0f4fc00d5547Christian MaederAP_DECLARE(apr_status_t) ap_fcgi_encode_env(request_rec *r,
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu elts = (const apr_table_entry_t *) envarr->elts;
b84c87f199dc287d235d7dad6ea344f6912ef531Christian Maeder for (i = *starting_elem; i < envarr->nelts; ) {
(*starting_elem)++;
(*starting_elem)++;
return rv;