54 } CGIResponseParser; |
54 } CGIResponseParser; |
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 char *path; |
60 char *path; |
60 Event *writeev; |
61 Event *writeev; |
61 Event *stderrev; |
62 Event *stderrev; |
62 char *stderr_tmp; |
63 char *stderr_tmp; |
63 int stderr_tmplen; |
64 int stderr_tmplen; |
|
65 char *writebuf; |
|
66 size_t writebuf_alloc; |
|
67 size_t writebuf_size; |
|
68 size_t writebuf_pos; |
64 WSBool stderr_finished; |
69 WSBool stderr_finished; |
|
70 WSBool read_output_finished; |
|
71 WSBool send_response_finished; |
|
72 WSBool poll_out; |
65 int result; |
73 int result; |
66 } CGIHandler; |
74 } CGIHandler; |
67 |
75 |
68 int send_cgi(pblock *pb, Session *sn, Request *rq); |
76 int send_cgi(pblock *pb, Session *sn, Request *rq); |
69 |
77 |
74 int cgi_close(CGIProcess *p); |
82 int cgi_close(CGIProcess *p); |
75 |
83 |
76 int cgi_stdout_readevent(EventHandler *ev, Event *event); |
84 int cgi_stdout_readevent(EventHandler *ev, Event *event); |
77 int cgi_stderr_readevent(EventHandler *ev, Event *event); |
85 int cgi_stderr_readevent(EventHandler *ev, Event *event); |
78 int cgi_event_finish(EventHandler *ev, Event *event); |
86 int cgi_event_finish(EventHandler *ev, Event *event); |
|
87 int cgi_writeevent(EventHandler *ev, Event *event); |
|
88 |
|
89 int cgi_read_output(CGIHandler *handler, EventHandler *ev); |
79 |
90 |
80 CGIResponseParser* cgi_parser_new(Session *sn, Request *rq); |
91 CGIResponseParser* cgi_parser_new(Session *sn, Request *rq); |
81 void cgi_parser_free(CGIResponseParser *parser); |
92 void cgi_parser_free(CGIResponseParser *parser); |
82 int cgi_parse_response(CGIResponseParser *parser, char *buf, size_t len, size_t *bpos); |
93 int cgi_parse_response(CGIResponseParser *parser, char *buf, size_t len, size_t *bpos); |
83 |
94 |