diff options
author | Igor Sysoev <igor@sysoev.ru> | 2017-01-17 20:00:00 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2017-01-17 20:00:00 +0300 |
commit | 16cbf3c076a0aca6d47adaf3f719493674cf2363 (patch) | |
tree | e6530480020f62a2bdbf249988ec3e2a751d3927 /src/nxt_fastcgi_source.h | |
download | unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.gz unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.bz2 |
Initial version.
Diffstat (limited to 'src/nxt_fastcgi_source.h')
-rw-r--r-- | src/nxt_fastcgi_source.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/nxt_fastcgi_source.h b/src/nxt_fastcgi_source.h new file mode 100644 index 00000000..e02cc5f4 --- /dev/null +++ b/src/nxt_fastcgi_source.h @@ -0,0 +1,92 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_FASTCGI_SOURCE_H_INCLUDED_ +#define _NXT_FASTCGI_SOURCE_H_INCLUDED_ + + +#define NXT_FASTCGI_BEGIN_REQUEST 1 +#define NXT_FASTCGI_ABORT_REQUEST 2 +#define NXT_FASTCGI_END_REQUEST 3 +#define NXT_FASTCGI_PARAMS 4 +#define NXT_FASTCGI_STDIN 5 +#define NXT_FASTCGI_STDOUT 6 +#define NXT_FASTCGI_STDERR 7 +#define NXT_FASTCGI_DATA 8 + + +typedef struct nxt_fastcgi_parse_s nxt_fastcgi_parse_t; + +struct nxt_fastcgi_parse_s { + u_char *pos; + + uint16_t length; /* 16 bits */ + uint8_t padding; + uint8_t type; + + uint8_t state; + uint8_t fastcgi_error; /* 1 bit */ + uint8_t error; /* 1 bit */ + uint8_t done; /* 1 bit */ + + /* FastCGI stdout and stderr buffer chains. */ + nxt_buf_t *out[2]; + + nxt_buf_t *(*last_buf)(nxt_fastcgi_parse_t *fp); + void *data; + nxt_mem_pool_t *mem_pool; +}; + + +typedef struct { + nxt_fastcgi_parse_t parse; + nxt_source_hook_t next; +} nxt_fastcgi_source_record_t; + + +typedef struct { + nxt_str_t name; + nxt_str_t value; + uintptr_t data[3]; +} nxt_fastcgi_source_request_t; + + +typedef struct nxt_fastcgi_source_s nxt_fastcgi_source_t; +typedef nxt_int_t (*nxt_fastcgi_source_request_create_t)( + nxt_fastcgi_source_t *fs); + + +struct nxt_fastcgi_source_s { + nxt_source_hook_t query; + nxt_source_hook_t *next; + + nxt_upstream_source_t *upstream; + + nxt_fastcgi_source_request_create_t request_create; + + nxt_upstream_header_in_t header_in; + + nxt_buf_t *rest; + + uint32_t state; /* 2 bits */ + + nxt_fastcgi_source_record_t record; + + union { + nxt_fastcgi_source_request_t request; + nxt_http_split_header_parse_t header; + } u; +}; + + +NXT_EXPORT void nxt_fastcgi_source_handler(nxt_upstream_source_t *us, + nxt_fastcgi_source_request_create_t request_create); +NXT_EXPORT nxt_int_t nxt_fastcgi_source_hash_create(nxt_mem_pool_t *mp, + nxt_lvlhsh_t *lh); +void nxt_fastcgi_record_parse(nxt_fastcgi_parse_t *fp, nxt_buf_t *in); + + +#endif /* _NXT_FASTCGI_SOURCE_H_INCLUDED_ */ |