111 ssize_t wr = 0; |
111 ssize_t wr = 0; |
112 int result = REQ_PROCEED; |
112 int result = REQ_PROCEED; |
113 while((r = read(cgip.out[0], buf, 4096)) > 0) { |
113 while((r = read(cgip.out[0], buf, 4096)) > 0) { |
114 if(cgiheader) { |
114 if(cgiheader) { |
115 size_t pos; |
115 size_t pos; |
116 int ret = cgi_parse_response(parser, buf, r, &pos); |
116 ret = cgi_parse_response(parser, buf, r, &pos); |
117 if(ret == -1) { |
117 if(ret == -1) { |
118 protocol_status(sn, rq, 500, NULL); |
118 protocol_status(sn, rq, 500, NULL); |
119 result = REQ_ABORTED; |
119 result = REQ_ABORTED; |
120 break; |
120 break; |
121 } else if(ret == 0) { |
121 } else if(ret == 0) { |
257 return -1; |
257 return -1; |
258 } |
258 } |
259 |
259 |
260 if(!sstrcmp(name, S("status"))) { |
260 if(!sstrcmp(name, S("status"))) { |
261 sstr_t codestr = value; |
261 sstr_t codestr = value; |
262 int i; |
262 int j; |
263 for(i=0;i<codestr.length;i++) { |
263 for(j=0;j<codestr.length;j++) { |
264 if(!isdigit(codestr.ptr[i])) { |
264 if(!isdigit(codestr.ptr[j])) { |
265 break; |
265 break; |
266 } |
266 } |
267 if(i > 2) { |
267 if(j > 2) { |
268 break; |
268 break; |
269 } |
269 } |
270 } |
270 } |
271 codestr.ptr[i] = '\0'; |
271 codestr.ptr[j] = '\0'; |
272 |
272 |
273 int64_t s = 0; |
273 int64_t s = 0; |
274 util_strtoint(codestr.ptr, &s); |
274 util_strtoint(codestr.ptr, &s); |
275 parser->status = (int)s; |
275 parser->status = (int)s; |
276 |
276 |
277 sstr_t msg = sstrtrim(sstrsubs(value, i + 1)); |
277 sstr_t msg = sstrtrim(sstrsubs(value, j + 1)); |
278 |
278 |
279 if(msg.length > 0) { |
279 if(msg.length > 0) { |
280 parser->msg = sstrdup_pool(parser->sn->pool, msg).ptr; |
280 parser->msg = sstrdup_pool(parser->sn->pool, msg).ptr; |
281 } |
281 } |
282 } else { |
282 } else { |