55 |
55 |
56 typedef struct CGIHandler { |
56 typedef struct CGIHandler { |
57 CGIProcess process; |
57 CGIProcess process; |
58 CGIResponseParser *parser; |
58 CGIResponseParser *parser; |
59 HttpResponseWriter *response; |
59 HttpResponseWriter *response; |
|
60 |
|
61 /* |
|
62 * request path (rq->vars path) |
|
63 */ |
60 char *path; |
64 char *path; |
|
65 |
|
66 /* |
|
67 * event object prepared for pollout |
|
68 * only activated if write returns EWOULDBLOCK |
|
69 */ |
61 Event *writeev; |
70 Event *writeev; |
62 Event *stderrev; |
71 |
|
72 /* |
|
73 * temp buffer used for parsing stderr lines |
|
74 */ |
63 char *stderr_tmp; |
75 char *stderr_tmp; |
|
76 /* |
|
77 * current length of stderr_tmp |
|
78 */ |
64 int stderr_tmplen; |
79 int stderr_tmplen; |
|
80 |
|
81 /* |
|
82 * allocation size of stderr_tmp |
|
83 */ |
65 int stderr_tmpalloc; |
84 int stderr_tmpalloc; |
|
85 |
|
86 /* |
|
87 * output buffer |
|
88 */ |
66 char *writebuf; |
89 char *writebuf; |
|
90 |
|
91 /* |
|
92 * writebuf allocation size |
|
93 */ |
67 size_t writebuf_alloc; |
94 size_t writebuf_alloc; |
|
95 |
|
96 /* |
|
97 * currently used size of writebuf |
|
98 */ |
68 size_t writebuf_size; |
99 size_t writebuf_size; |
|
100 |
|
101 /* |
|
102 * current writebuf pos (writebuf_size - write_buf_pos = remaining) |
|
103 */ |
69 size_t writebuf_pos; |
104 size_t writebuf_pos; |
70 WSBool stderr_finished; |
105 |
71 WSBool read_output_finished; |
106 /* |
72 WSBool send_response_finished; |
107 * poll_out event active |
|
108 */ |
73 WSBool poll_out; |
109 WSBool poll_out; |
|
110 |
|
111 /* |
|
112 * number of currently open events (stdout, stderr, [stdout]) |
|
113 */ |
|
114 int events; |
|
115 |
|
116 /* |
|
117 * error indicator |
|
118 */ |
74 int result; |
119 int result; |
75 } CGIHandler; |
120 } CGIHandler; |
76 |
121 |
77 int send_cgi(pblock *pb, Session *sn, Request *rq); |
122 int send_cgi(pblock *pb, Session *sn, Request *rq); |
78 |
123 |