if (h1sl->rq.meth == HTTP_METH_CONNECT) {
h1m->flags &= ~(H1_MF_CLEN|H1_MF_CHNK);
h1m->curr_len = h1m->body_len = 0;
+ h1m->state = H1_MSG_DONE;
+ htx->flags |= HTX_FL_EOM;
}
- else if (h1sl->rq.meth == HTTP_METH_HEAD)
- flags |= HTX_SL_F_BODYLESS_RESP;
+ else {
+ if (h1sl->rq.meth == HTTP_METH_HEAD)
+ flags |= HTX_SL_F_BODYLESS_RESP;
+ if (((h1m->flags & H1_MF_CLEN) && h1m->body_len == 0) ||
+ (h1m->flags & (H1_MF_XFER_LEN|H1_MF_CLEN|H1_MF_CHNK)) == H1_MF_XFER_LEN) {
+ h1m->state = H1_MSG_DONE;
+ htx->flags |= HTX_FL_EOM;
+ }
+ }
flags |= h1m_htx_sl_flags(h1m);
h1m->flags &= ~(H1_MF_CLEN|H1_MF_CHNK);
h1m->flags |= H1_MF_XFER_LEN;
h1m->curr_len = h1m->body_len = 0;
+ h1m->state = H1_MSG_DONE;
+ htx->flags |= HTX_FL_EOM;
}
else if ((h1m->flags & H1_MF_METH_HEAD) || (code >= 100 && code < 200) ||
(code == 204) || (code == 304)) {
h1m->curr_len = h1m->body_len = 0;
if (code >= 200)
flags |= HTX_SL_F_BODYLESS_RESP;
+ h1m->state = H1_MSG_DONE;
+ htx->flags |= HTX_FL_EOM;
}
- else if (h1m->flags & (H1_MF_CLEN|H1_MF_CHNK)) {
- /* Responses with a known body length. */
- h1m->flags |= H1_MF_XFER_LEN;
+ else {
+ if (h1m->flags & (H1_MF_CLEN|H1_MF_CHNK)) {
+ /* Responses with a known body length. */
+ h1m->flags |= H1_MF_XFER_LEN;
+ }
+
+ if (((h1m->flags & H1_MF_CLEN) && h1m->body_len == 0) ||
+ (h1m->flags & (H1_MF_XFER_LEN|H1_MF_CLEN|H1_MF_CHNK)) == H1_MF_XFER_LEN) {
+ h1m->state = H1_MSG_DONE;
+ htx->flags |= HTX_FL_EOM;
+ }
}
flags |= h1m_htx_sl_flags(h1m);
return ret;
}
- /* Switch messages without any payload to DONE state */
- if (((h1m->flags & H1_MF_CLEN) && h1m->body_len == 0) ||
- ((h1m->flags & (H1_MF_XFER_LEN|H1_MF_CLEN|H1_MF_CHNK)) == H1_MF_XFER_LEN)) {
- h1m->state = H1_MSG_DONE;
- dsthtx->flags |= HTX_FL_EOM;
- }
-
end:
return total;
error: