/* 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 .
*/
/**
* @ file util_fcgi . h
* @ brief FastCGI protocol definitions and support routines
*
* @ defgroup APACHE_CORE_FASTCGI FastCGI Tools
* @ ingroup APACHE_CORE
* @ {
*/
#ifndef APACHE_UTIL_FCGI_H
#define APACHE_UTIL_FCGI_H
#ifdef __cplusplus
extern "C" {
#endif
#include "httpd.h"
/**
* @ brief A structure that represents the fixed header fields
* at the beginning of a " FastCGI record " ( i . e . , the data prior
* to content data and padding ) .
*/
typedef struct {
/** See values for version, below */
unsigned char version;
/** See values for type, below */
unsigned char type;
/** request id, in two parts */
unsigned char requestIdB1;
unsigned char requestIdB0;
/** content length, in two parts */
unsigned char contentLengthB1;
unsigned char contentLengthB0;
/** padding length */
unsigned char paddingLength;
/** 8-bit reserved field */
unsigned char reserved;
} ap_fcgi_header;
/*
* Number of bytes in the header portion of a FastCGI record
* ( i . e . , ap_fcgi_header structure ) . Future versions of the
* protocol may increase the size .
*/
#define AP_FCGI_HEADER_LEN 8
/*
* Maximum number of bytes in the content portion of a FastCGI record .
*/
#define AP_FCGI_MAX_CONTENT_LEN 65535
/**
* Possible values for the version field of ap_fcgi_header
*/
#define AP_FCGI_VERSION_1 1
/**
* Possible values for the type field of ap_fcgi_header
*/
#define AP_FCGI_BEGIN_REQUEST 1
#define AP_FCGI_ABORT_REQUEST 2
#define AP_FCGI_END_REQUEST 3
#define AP_FCGI_PARAMS 4
#define AP_FCGI_STDIN 5
#define AP_FCGI_STDOUT 6
#define AP_FCGI_STDERR 7
#define AP_FCGI_DATA 8
#define AP_FCGI_GET_VALUES 9
#define AP_FCGI_GET_VALUES_RESULT 10
#define AP_FCGI_UNKNOWN_TYPE 11
#define AP_FCGI_MAXTYPE (AP_FCGI_UNKNOWN_TYPE)
/**
* Offsets of the various fields of ap_fcgi_header
*/
#define AP_FCGI_HDR_VERSION_OFFSET 0
#define AP_FCGI_HDR_TYPE_OFFSET 1
#define AP_FCGI_HDR_REQUEST_ID_B1_OFFSET 2
#define AP_FCGI_HDR_REQUEST_ID_B0_OFFSET 3
#define AP_FCGI_HDR_CONTENT_LEN_B1_OFFSET 4
#define AP_FCGI_HDR_CONTENT_LEN_B0_OFFSET 5
#define AP_FCGI_HDR_PADDING_LEN_OFFSET 6
#define AP_FCGI_HDR_RESERVED_OFFSET 7
/**
* @ brief This represents the content data of the FastCGI record when
* the type is AP_FCGI_BEGIN_REQUEST .
*/
typedef struct {
/**
* role , in two parts
* See values for role , below
*/
unsigned char roleB1;
unsigned char roleB0;
/**
* flags
* See values for flags bits , below
*/
unsigned char flags;
/** reserved */
unsigned char reserved[5 ];
} ap_fcgi_begin_request_body;
/*
* Values for role component of ap_fcgi_begin_request_body
*/
#define AP_FCGI_RESPONDER 1
#define AP_FCGI_AUTHORIZER 2
#define AP_FCGI_FILTER 3
/*
* Values for flags bits of ap_fcgi_begin_request_body
*/
#define AP_FCGI_KEEP_CONN 1 /* otherwise the application closes */
/**
* Offsets of the various fields of ap_fcgi_begin_request_body
*/
#define AP_FCGI_BRB_ROLEB1_OFFSET 0
#define AP_FCGI_BRB_ROLEB0_OFFSET 1
#define AP_FCGI_BRB_FLAGS_OFFSET 2
#define AP_FCGI_BRB_RESERVED0_OFFSET 3
#define AP_FCGI_BRB_RESERVED1_OFFSET 4
#define AP_FCGI_BRB_RESERVED2_OFFSET 5
#define AP_FCGI_BRB_RESERVED3_OFFSET 6
#define AP_FCGI_BRB_RESERVED4_OFFSET 7
/**
* Pack ap_fcgi_header
* @ param h The header to read from
* @ param a The array to write to , of size AP_FCGI_HEADER_LEN
*/
AP_DECLARE(void ) ap_fcgi_header_to_array(ap_fcgi_header *h,
unsigned char a[]);
/**
* Unpack header of FastCGI record into ap_fcgi_header
* @ param h The header to write to
* @ param a The array to read from , of size AP_FCGI_HEADER_LEN
*/
AP_DECLARE(void ) ap_fcgi_header_from_array(ap_fcgi_header *h,
unsigned char a[]);
/**
* Unpack header of FastCGI record into individual fields
* @ param version The version , on output
* @ param type The type , on output
* @ param request_id The request id , on output
* @ param content_len The content length , on output
* @ param padding_len The amount of padding following the content , on output
* @ param a The array to read from , of size AP_FCGI_HEADER_LEN
*/
AP_DECLARE(void ) ap_fcgi_header_fields_from_array(unsigned char *version,
unsigned char *type,
apr_uint16_t *request_id,
apr_uint16_t *content_len,
unsigned char *padding_len,
unsigned char a[]);
/**
* Pack ap_fcgi_begin_request_body
* @ param h The begin - request body to read from
* @ param a The array to write to , of size AP_FCGI_HEADER_LEN
*/
AP_DECLARE(void ) ap_fcgi_begin_request_body_to_array(ap_fcgi_begin_request_body *h,
unsigned char a[]);
/**
* Fill in a FastCGI request header with the required field values .
* @ param header The header to fill in
* @ param type The type of record
* @ param request_id The request id
* @ param content_len The amount of content which follows the header
* @ param padding_len The amount of padding which follows the content
*
* The header array must be at least AP_FCGI_HEADER_LEN bytes long .
*/
AP_DECLARE(void ) ap_fcgi_fill_in_header(ap_fcgi_header *header,
unsigned char type,
apr_uint16_t request_id,
apr_uint16_t content_len,
unsigned char padding_len);
/**
* Fill in a FastCGI begin request body with the required field values .
* @ param brb The begin - request - body to fill in
* @ param role AP_FCGI_RESPONDER or other roles
* @ param flags 0 or a combination of flags like AP_FCGI_KEEP_CONN
*/
AP_DECLARE(void ) ap_fcgi_fill_in_request_body(ap_fcgi_begin_request_body *brb,
int role,
unsigned char flags);
/**
* Compute the buffer size needed to encode the next portion of
* the provided environment table .
* @ param env The environment table
* @ param maxlen The maximum buffer size allowable , capped at
* AP_FCGI_MAX_CONTENT_LEN .
* @ param starting_elem On input , the next element of the table array
* to process in this FastCGI record . On output , the next element to
* process on the * next * FastCGI record .
* @ return Size of buffer needed to encode the next part , or 0
* if no more can be encoded . When 0 is returned : If starting_elem
* has reached the end of the table array , all has been encoded ;
* otherwise , the next envvar can ' t be encoded within the specified
* limit .
* @ note If an envvar can ' t be encoded within the specified limit ,
* the caller can log a warning and increment starting_elem and try
* again or increase the limit or fail , as appropriate for the module .
*/
AP_DECLARE(apr_size_t) ap_fcgi_encoded_env_len(apr_table_t *env,
apr_size_t maxlen,
int *starting_elem);
/**
* Encode the next portion of the provided environment table using
* a buffer previously allocated .
* @ param r The request , for logging
* @ param env The environment table
* @ param buffer A buffer to contain the encoded environment table
* @ param buflen The length of the buffer , previously computed by
* ap_fcgi_encoded_env_len ( ) .
* @ param starting_elem On input , the next element of the table array
* to process in this FastCGI record . On output , the next element to
* process on the * next * FastCGI record .
* @ return APR_SUCCESS if a section could be encoded or APR_ENOSPC
* otherwise .
* @ note The output starting_elem from ap_fcgi_encoded_env_len
* shouldn ' t be used as input to ap_fcgi_encode_env when building the
* same FastCGI record .
*/
AP_DECLARE(apr_status_t) ap_fcgi_encode_env(request_rec *r,
apr_table_t *env,
void *buffer,
apr_size_t buflen,
int *starting_elem);
/**
* String forms for the value of the FCGI_ROLE envvar
*/
#define AP_FCGI_RESPONDER_STR "RESPONDER"
#define AP_FCGI_AUTHORIZER_STR "AUTHORIZER"
#define AP_FCGI_FILTER_STR "FILTER"
/**
* FastCGI implementations that implement the AUTHORIZER role
* for Apache httpd and allow the application to participate in
* any of the Apache httpd AAA phases typically set the variable
* FCGI_APACHE_ROLE to one of these strings to indicate the
* specific AAA phase .
*/
#define AP_FCGI_APACHE_ROLE_AUTHENTICATOR_STR "AUTHENTICATOR"
#define AP_FCGI_APACHE_ROLE_AUTHORIZER_STR "AUTHORIZER"
#define AP_FCGI_APACHE_ROLE_ACCESS_CHECKER_STR "ACCESS_CHECKER"
#ifdef __cplusplus
}
#endif
#endif /* !APACHE_UTIL_FCGI_H */
/** @} */
Messung V0.5 in Prozent C=89 H=100 G=94
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland