php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
fastcgi.h
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Authors: Dmitry Stogov <dmitry@php.net> |
14 +----------------------------------------------------------------------+
15*/
16
17/* FastCGI protocol */
18
19#define FCGI_VERSION_1 1
20
21#define FCGI_MAX_LENGTH 0xffff
22
23#define FCGI_KEEP_CONN 1
24
25/* this is near the perfect hash function for most useful FastCGI variables
26 * which combines efficiency and minimal hash collisions
27 */
28
29#define FCGI_HASH_FUNC(var, var_len) \
30 (UNEXPECTED(var_len < 3) ? (unsigned int)var_len : \
31 (((unsigned int)var[3]) << 2) + \
32 (((unsigned int)var[var_len-2]) << 4) + \
33 (((unsigned int)var[var_len-1]) << 2) + \
34 var_len)
35
36#define FCGI_GETENV(request, name) \
37 fcgi_quick_getenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1))
38
39#define FCGI_PUTENV(request, name, value) \
40 fcgi_quick_putenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1), value)
41
47
48enum {
54};
55
56typedef enum _fcgi_request_type {
57 FCGI_BEGIN_REQUEST = 1, /* [in] */
58 FCGI_ABORT_REQUEST = 2, /* [in] (not supported) */
59 FCGI_END_REQUEST = 3, /* [out] */
60 FCGI_PARAMS = 4, /* [in] environment variables */
61 FCGI_STDIN = 5, /* [in] post data */
62 FCGI_STDOUT = 6, /* [out] response */
63 FCGI_STDERR = 7, /* [out] errors */
64 FCGI_DATA = 8, /* [in] filter data (not supported) */
65 FCGI_GET_VALUES = 9, /* [in] */
66 FCGI_GET_VALUES_RESULT = 10 /* [out] */
68
75
76/* FastCGI client API */
77
78typedef void (*fcgi_apply_func)(const char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg);
79
80#define FCGI_HASH_TABLE_SIZE 128
81#define FCGI_HASH_TABLE_MASK (FCGI_HASH_TABLE_SIZE - 1)
82#define FCGI_HASH_SEG_SIZE 4096
83
85
86int fcgi_init(void);
87void fcgi_shutdown(void);
88int fcgi_is_fastcgi(void);
90void fcgi_close(fcgi_request *req, int force, int destroy);
91int fcgi_in_shutdown(void);
92void fcgi_terminate(void);
93int fcgi_listen(const char *path, int backlog);
94fcgi_request* fcgi_init_request(int listen_socket, void(*on_accept)(void), void(*on_read)(void), void(*on_close)(void));
96void fcgi_set_allowed_clients(char *ip);
98int fcgi_finish_request(fcgi_request *req, int force_close);
99const char *fcgi_get_last_client_ip(void);
100void fcgi_set_in_shutdown(int new_value);
101void fcgi_request_set_keep(fcgi_request *req, int new_value);
102
103#ifndef HAVE_ATTRIBUTE_WEAK
104typedef void (*fcgi_logger)(int type, const char *fmt, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
106#endif
107
108int fcgi_has_env(fcgi_request *req);
109char* fcgi_getenv(fcgi_request *req, const char* var, int var_len);
110char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val);
111char* fcgi_quick_getenv(fcgi_request *req, const char* var, int var_len, unsigned int hash_value);
112char* fcgi_quick_putenv(fcgi_request *req, char* var, int var_len, unsigned int hash_value, char* val);
113void fcgi_loadenv(fcgi_request *req, fcgi_apply_func load_func, zval *array);
114
115int fcgi_read(fcgi_request *req, char *str, int len);
116
117int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len);
118int fcgi_flush(fcgi_request *req, int end);
119int fcgi_end(fcgi_request *req);
120
121#ifdef PHP_WIN32
122void fcgi_impersonate(void);
123#endif
124
125void fcgi_set_mgmt_var(const char * name, size_t name_len, const char * value, size_t value_len);
size_t len
Definition apprentice.c:174
printf(string $format, mixed ... $values)
void void fcgi_set_logger(fcgi_logger lg)
Definition fastcgi.h:105
int fcgi_is_fastcgi(void)
Definition fastcgi.c:541
void fcgi_request_set_keep(fcgi_request *req, int new_value)
Definition fastcgi.c:461
void(* fcgi_logger)(int type, const char *fmt,...) ZEND_ATTRIBUTE_FORMAT(printf
Definition fastcgi.h:104
void fcgi_set_mgmt_var(const char *name, size_t name_len, const char *value, size_t value_len)
Definition fastcgi.c:1727
int fcgi_listen(const char *path, int backlog)
Definition fastcgi.c:642
int fcgi_init(void)
Definition fastcgi.c:480
const char * fcgi_get_last_client_ip(void)
Definition fastcgi.c:1743
void fcgi_loadenv(fcgi_request *req, fcgi_apply_func load_func, zval *array)
Definition fastcgi.c:1710
void fcgi_free_mgmt_var_cb(zval *zv)
Definition fastcgi.c:1738
int fcgi_accept_request(fcgi_request *req)
Definition fastcgi.c:1351
void fcgi_destroy_request(fcgi_request *req)
Definition fastcgi.c:905
int fcgi_has_env(fcgi_request *req)
Definition fastcgi.c:1668
int fcgi_read(fcgi_request *req, char *str, int len)
Definition fastcgi.c:1204
int fcgi_flush(fcgi_request *req, int end)
Definition fastcgi.c:1510
enum _fcgi_role fcgi_role
fcgi_request * fcgi_init_request(int listen_socket, void(*on_accept)(void), void(*on_read)(void), void(*on_close)(void))
Definition fastcgi.c:870
void fcgi_terminate(void)
Definition fastcgi.c:456
int fcgi_end(fcgi_request *req)
Definition fastcgi.c:1648
void fcgi_shutdown(void)
Definition fastcgi.c:550
void fcgi_set_in_shutdown(int new_value)
Definition fastcgi.c:446
int fcgi_is_closed(fcgi_request *req)
Definition fastcgi.c:1308
int fcgi_in_shutdown(void)
Definition fastcgi.c:451
void(* fcgi_apply_func)(const char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg)
Definition fastcgi.h:78
int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len)
Definition fastcgi.c:1540
@ FCGI_ALERT
Definition fastcgi.h:53
@ FCGI_ERROR
Definition fastcgi.h:52
@ FCGI_WARNING
Definition fastcgi.h:51
@ FCGI_DEBUG
Definition fastcgi.h:49
@ FCGI_NOTICE
Definition fastcgi.h:50
_fcgi_request_type
Definition fastcgi.h:56
@ FCGI_DATA
Definition fastcgi.h:64
@ FCGI_GET_VALUES_RESULT
Definition fastcgi.h:66
@ FCGI_ABORT_REQUEST
Definition fastcgi.h:58
@ FCGI_GET_VALUES
Definition fastcgi.h:65
@ FCGI_BEGIN_REQUEST
Definition fastcgi.h:57
@ FCGI_END_REQUEST
Definition fastcgi.h:59
@ FCGI_STDERR
Definition fastcgi.h:63
@ FCGI_PARAMS
Definition fastcgi.h:60
@ FCGI_STDIN
Definition fastcgi.h:61
@ FCGI_STDOUT
Definition fastcgi.h:62
enum _fcgi_protocol_status dcgi_protocol_status
char * fcgi_quick_putenv(fcgi_request *req, char *var, int var_len, unsigned int hash_value, char *val)
Definition fastcgi.c:1700
enum _fcgi_request_type fcgi_request_type
void fcgi_set_allowed_clients(char *ip)
Definition fastcgi.c:821
char * fcgi_quick_getenv(fcgi_request *req, const char *var, int var_len, unsigned int hash_value)
Definition fastcgi.c:1682
_fcgi_protocol_status
Definition fastcgi.h:69
@ FCGI_CANT_MPX_CONN
Definition fastcgi.h:71
@ FCGI_UNKNOWN_ROLE
Definition fastcgi.h:73
@ FCGI_OVERLOADED
Definition fastcgi.h:72
@ FCGI_REQUEST_COMPLETE
Definition fastcgi.h:70
struct _fcgi_request fcgi_request
Definition fastcgi.h:84
char * fcgi_getenv(fcgi_request *req, const char *var, int var_len)
Definition fastcgi.c:1673
int fcgi_finish_request(fcgi_request *req, int force_close)
Definition fastcgi.c:1657
char * fcgi_putenv(fcgi_request *req, char *var, int var_len, char *val)
Definition fastcgi.c:1689
void fcgi_close(fcgi_request *req, int force, int destroy)
Definition fastcgi.c:1257
_fcgi_role
Definition fastcgi.h:42
@ FCGI_RESPONDER
Definition fastcgi.h:43
@ FCGI_AUTHORIZER
Definition fastcgi.h:44
@ FCGI_FILTER
Definition fastcgi.h:45
zend_ffi_type * type
Definition ffi.c:3812
zval * zv
Definition ffi.c:3975
zval * arg
Definition ffi.c:3975
zval * val
Definition ffi.c:4262
unsigned const char * end
Definition php_ffi.h:51
int listen_socket
Definition fastcgi.c:207
struct _zval_struct zval
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
#define ZEND_ATTRIBUTE_FORMAT(type, idx, first)
zend_string * name
value