[master] 89ab873 Make http1_dissect() return a simple good/bad status.
Poul-Henning Kamp
phk at FreeBSD.org
Tue Mar 24 13:02:48 CET 2015
commit 89ab87370b41d4125e1cb1cf250df2709d856cb0
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Mar 24 09:51:56 2015 +0000
Make http1_dissect() return a simple good/bad status.
diff --git a/bin/varnishd/http1/cache_http1_fsm.c b/bin/varnishd/http1/cache_http1_fsm.c
index 2a3c3fb..ac76ca2 100644
--- a/bin/varnishd/http1/cache_http1_fsm.c
+++ b/bin/varnishd/http1/cache_http1_fsm.c
@@ -201,7 +201,7 @@ http1_cleanup(struct sess *sp, struct worker *wrk, struct req *req)
/*----------------------------------------------------------------------
*/
-static enum req_fsm_nxt
+static int
http1_dissect(struct worker *wrk, struct req *req)
{
const char *r_100 = "HTTP/1.1 100 Continue\r\n\r\n";
@@ -242,8 +242,8 @@ http1_dissect(struct worker *wrk, struct req *req)
r = write(req->sp->fd, r_400, strlen(r_400));
if (r > 0)
req->acct.resp_hdrbytes += r;
- SES_Close(req->sp, SC_RX_JUNK);
- return (REQ_FSM_DONE);
+ req->doclose = SC_RX_JUNK;
+ return (-1);
}
assert (req->req_body_status == REQ_BODY_INIT);
@@ -267,15 +267,15 @@ http1_dissect(struct worker *wrk, struct req *req)
r = write(req->sp->fd, r_417, strlen(r_417));
if (r > 0)
req->acct.resp_hdrbytes += r;
- SES_Close(req->sp, SC_RX_JUNK);
- return (REQ_FSM_DONE);
+ req->doclose = SC_RX_JUNK;
+ return (-1);
}
r = write(req->sp->fd, r_100, strlen(r_100));
if (r > 0)
req->acct.resp_hdrbytes += r;
if (r != strlen(r_100)) {
- SES_Close(req->sp, SC_REM_CLOSE);
- return (REQ_FSM_DONE);
+ req->doclose = SC_REM_CLOSE;
+ return (-1);
}
http_Unset(req->http, H_Expect);
}
@@ -291,15 +291,14 @@ http1_dissect(struct worker *wrk, struct req *req)
r = write(req->sp->fd, r_400, strlen(r_400));
if (r > 0)
req->acct.resp_hdrbytes += r;
- SES_Close(req->sp, req->doclose);
- return (REQ_FSM_DONE);
+ return (-1);
}
assert(req->req_body_status != REQ_BODY_INIT);
HTTP_Copy(req->http0, req->http); // For ESI & restart
- return (REQ_FSM_MORE);
+ return (0);
}
/*----------------------------------------------------------------------
@@ -372,8 +371,14 @@ HTTP1_Session(struct worker *wrk, struct req *req)
req->req_step == R_STP_LOOKUP ||
req->req_step == R_STP_RECV);
- if (req->req_step == R_STP_RECV)
- nxt = http1_dissect(wrk, req);
+ if (req->req_step == R_STP_RECV) {
+ if (http1_dissect(wrk, req)) {
+ SES_Close(req->sp, req->doclose);
+ nxt = REQ_FSM_DONE;
+ } else {
+ nxt = REQ_FSM_MORE;
+ }
+ }
if (nxt == REQ_FSM_MORE)
nxt = CNT_Request(wrk, req);
if (nxt == REQ_FSM_DISEMBARK) {
More information about the varnish-commit
mailing list