version 1.1.1.1, 2012/02/21 23:48:06
|
version 1.1.1.2, 2012/05/29 12:34:35
|
Line 26
|
Line 26
|
|
|
#define FCGI_KEEP_CONN 1 |
#define FCGI_KEEP_CONN 1 |
|
|
|
/* this is near the perfect hash function for most useful FastCGI variables |
|
* which combines efficiency and minimal hash collisions |
|
*/ |
|
|
|
#define FCGI_HASH_FUNC(var, var_len) \ |
|
(UNEXPECTED(var_len < 3) ? var_len : \ |
|
(((unsigned int)var[3]) << 2) + \ |
|
(((unsigned int)var[var_len-2]) << 4) + \ |
|
(((unsigned int)var[var_len-1]) << 2) + \ |
|
var_len) |
|
|
|
#define FCGI_GETENV(request, name) \ |
|
fcgi_quick_getenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1)) |
|
|
|
#define FCGI_PUTENV(request, name, value) \ |
|
fcgi_quick_putenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1), value) |
|
|
typedef enum _fcgi_role { |
typedef enum _fcgi_role { |
FCGI_RESPONDER = 1, |
FCGI_RESPONDER = 1, |
FCGI_AUTHORIZER = 2, |
FCGI_AUTHORIZER = 2, |
Line 91 typedef struct _fcgi_end_request_rec {
|
Line 108 typedef struct _fcgi_end_request_rec {
|
|
|
/* FastCGI client API */ |
/* FastCGI client API */ |
|
|
typedef struct _fcgi_request { | typedef void (*fcgi_apply_func)(char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg TSRMLS_DC); |
int listen_socket; | |
#ifdef _WIN32 | |
int tcp; | |
#endif | |
int fd; | |
int id; | |
int keep; | |
int closed; | |
|
|
int in_len; | typedef struct _fcgi_request fcgi_request; |
int in_pad; | |
|
|
fcgi_header *out_hdr; |
|
unsigned char *out_pos; |
|
unsigned char out_buf[1024*8]; |
|
unsigned char reserved[sizeof(fcgi_end_request_rec)]; |
|
|
|
HashTable *env; |
|
} fcgi_request; |
|
|
|
int fcgi_init(void); |
int fcgi_init(void); |
void fcgi_shutdown(void); |
void fcgi_shutdown(void); |
int fcgi_is_fastcgi(void); |
int fcgi_is_fastcgi(void); |
int fcgi_in_shutdown(void); |
int fcgi_in_shutdown(void); |
|
void fcgi_terminate(void); |
int fcgi_listen(const char *path, int backlog); |
int fcgi_listen(const char *path, int backlog); |
void fcgi_init_request(fcgi_request *req, int listen_socket); | fcgi_request* fcgi_init_request(int listen_socket); |
| void fcgi_destroy_request(fcgi_request *req); |
int fcgi_accept_request(fcgi_request *req); |
int fcgi_accept_request(fcgi_request *req); |
int fcgi_finish_request(fcgi_request *req, int force_close); |
int fcgi_finish_request(fcgi_request *req, int force_close); |
|
|
char* fcgi_getenv(fcgi_request *req, const char* var, int var_len); |
char* fcgi_getenv(fcgi_request *req, const char* var, int var_len); |
char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val); |
char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val); |
|
char* fcgi_quick_getenv(fcgi_request *req, const char* var, int var_len, unsigned int hash_value); |
|
char* fcgi_quick_putenv(fcgi_request *req, char* var, int var_len, unsigned int hash_value, char* val); |
|
void fcgi_loadenv(fcgi_request *req, fcgi_apply_func load_func, zval *array TSRMLS_DC); |
|
|
int fcgi_read(fcgi_request *req, char *str, int len); |
int fcgi_read(fcgi_request *req, char *str, int len); |
|
|