xref: /unit/src/nxt_fastcgi_source.h (revision 65:10688b89aa16)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_FASTCGI_SOURCE_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_FASTCGI_SOURCE_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
110Sigor@sysoev.ru #define NXT_FASTCGI_BEGIN_REQUEST        1
120Sigor@sysoev.ru #define NXT_FASTCGI_ABORT_REQUEST        2
130Sigor@sysoev.ru #define NXT_FASTCGI_END_REQUEST          3
140Sigor@sysoev.ru #define NXT_FASTCGI_PARAMS               4
150Sigor@sysoev.ru #define NXT_FASTCGI_STDIN                5
160Sigor@sysoev.ru #define NXT_FASTCGI_STDOUT               6
170Sigor@sysoev.ru #define NXT_FASTCGI_STDERR               7
180Sigor@sysoev.ru #define NXT_FASTCGI_DATA                 8
190Sigor@sysoev.ru 
200Sigor@sysoev.ru 
210Sigor@sysoev.ru typedef struct nxt_fastcgi_parse_s       nxt_fastcgi_parse_t;
220Sigor@sysoev.ru 
230Sigor@sysoev.ru struct nxt_fastcgi_parse_s {
240Sigor@sysoev.ru     u_char                               *pos;
250Sigor@sysoev.ru 
260Sigor@sysoev.ru     uint16_t                             length;         /* 16 bits */
270Sigor@sysoev.ru     uint8_t                              padding;
280Sigor@sysoev.ru     uint8_t                              type;
290Sigor@sysoev.ru 
300Sigor@sysoev.ru     uint8_t                              state;
310Sigor@sysoev.ru     uint8_t                              fastcgi_error;  /* 1 bit */
320Sigor@sysoev.ru     uint8_t                              error;          /* 1 bit */
330Sigor@sysoev.ru     uint8_t                              done;           /* 1 bit */
340Sigor@sysoev.ru 
350Sigor@sysoev.ru     /* FastCGI stdout and stderr buffer chains. */
360Sigor@sysoev.ru     nxt_buf_t                            *out[2];
370Sigor@sysoev.ru 
380Sigor@sysoev.ru     nxt_buf_t                            *(*last_buf)(nxt_fastcgi_parse_t *fp);
390Sigor@sysoev.ru     void                                 *data;
40*65Sigor@sysoev.ru     nxt_mp_t                             *mem_pool;
410Sigor@sysoev.ru };
420Sigor@sysoev.ru 
430Sigor@sysoev.ru 
440Sigor@sysoev.ru typedef struct {
450Sigor@sysoev.ru     nxt_fastcgi_parse_t                  parse;
460Sigor@sysoev.ru     nxt_source_hook_t                    next;
470Sigor@sysoev.ru } nxt_fastcgi_source_record_t;
480Sigor@sysoev.ru 
490Sigor@sysoev.ru 
500Sigor@sysoev.ru typedef struct {
510Sigor@sysoev.ru     nxt_str_t                            name;
520Sigor@sysoev.ru     nxt_str_t                            value;
530Sigor@sysoev.ru     uintptr_t                            data[3];
540Sigor@sysoev.ru } nxt_fastcgi_source_request_t;
550Sigor@sysoev.ru 
560Sigor@sysoev.ru 
570Sigor@sysoev.ru typedef struct nxt_fastcgi_source_s  nxt_fastcgi_source_t;
580Sigor@sysoev.ru typedef nxt_int_t (*nxt_fastcgi_source_request_create_t)(
590Sigor@sysoev.ru     nxt_fastcgi_source_t *fs);
600Sigor@sysoev.ru 
610Sigor@sysoev.ru 
620Sigor@sysoev.ru struct nxt_fastcgi_source_s {
630Sigor@sysoev.ru     nxt_source_hook_t                    query;
640Sigor@sysoev.ru     nxt_source_hook_t                    *next;
650Sigor@sysoev.ru 
660Sigor@sysoev.ru     nxt_upstream_source_t                *upstream;
670Sigor@sysoev.ru 
680Sigor@sysoev.ru     nxt_fastcgi_source_request_create_t  request_create;
690Sigor@sysoev.ru 
700Sigor@sysoev.ru     nxt_upstream_header_in_t             header_in;
710Sigor@sysoev.ru 
720Sigor@sysoev.ru     nxt_buf_t                            *rest;
730Sigor@sysoev.ru 
740Sigor@sysoev.ru     uint32_t                             state;  /* 2 bits */
750Sigor@sysoev.ru 
760Sigor@sysoev.ru     nxt_fastcgi_source_record_t          record;
770Sigor@sysoev.ru 
780Sigor@sysoev.ru     union {
790Sigor@sysoev.ru         nxt_fastcgi_source_request_t     request;
800Sigor@sysoev.ru     } u;
810Sigor@sysoev.ru };
820Sigor@sysoev.ru 
830Sigor@sysoev.ru 
841Sigor@sysoev.ru NXT_EXPORT void nxt_fastcgi_source_handler(nxt_task_t *task,
851Sigor@sysoev.ru     nxt_upstream_source_t *us,
860Sigor@sysoev.ru     nxt_fastcgi_source_request_create_t request_create);
87*65Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_fastcgi_source_hash_create(nxt_mp_t *mp,
880Sigor@sysoev.ru     nxt_lvlhsh_t *lh);
891Sigor@sysoev.ru void nxt_fastcgi_record_parse(nxt_task_t *task, nxt_fastcgi_parse_t *fp,
901Sigor@sysoev.ru     nxt_buf_t *in);
910Sigor@sysoev.ru 
920Sigor@sysoev.ru 
930Sigor@sysoev.ru #endif /* _NXT_FASTCGI_SOURCE_H_INCLUDED_ */
94