MINOR: htx: Add BODYLESS flags on the HTX start-line and the HTTP message

the flags HTX_SL_F_BODYLESS and HTTP_MSGF_BODYLESS have been added. These flags
are set when the corresponding HTTP message has no body at all.
This commit is contained in:
Christopher Faulet 2018-11-27 16:51:09 +01:00 committed by Willy Tarreau
parent 0359911935
commit b2db4fa016
4 changed files with 9 additions and 0 deletions

View File

@ -81,6 +81,7 @@
#define HTX_SL_F_CLEN 0x00000008 /* The content-length header was found in message */
#define HTX_SL_F_CHNK 0x00000010 /* The message payload is chunked */
#define HTX_SL_F_VER_11 0x00000020 /* The message indicates version 1.1 or above */
#define HTX_SL_F_BODYLESS 0x00000040 /* The message has no body (content-length = 0) */
/* HTX flags */
#define HTX_FL_NONE 0x00000000

View File

@ -148,6 +148,8 @@
#define HTTP_MSGF_WAIT_CONN 0x00000010 /* Wait for connect() to be confirmed before processing body */
#define HTTP_MSGF_COMPRESSING 0x00000020 /* data compression is in progress */
#define HTTP_MSGF_BODYLESS 0x00000040 /* The message has no body (content-length = 0) */
/* Redirect flags */
enum {

View File

@ -848,6 +848,8 @@ static size_t h1_process_headers(struct h1s *h1s, struct h1m *h1m, struct htx *h
flags |= HTX_SL_F_CHNK;
else if (h1m->flags & H1_MF_CLEN)
flags |= HTX_SL_F_CLEN;
if (h1m->state == H1_MSG_DONE)
flags |= HTX_SL_F_BODYLESS;
}
if (!(h1m->flags & H1_MF_RESP)) {

View File

@ -307,6 +307,8 @@ int htx_wait_for_request(struct stream *s, struct channel *req, int an_bit)
msg->flags |= HTTP_MSGF_VER_11;
msg->flags |= HTTP_MSGF_XFER_LEN;
msg->flags |= ((sl->flags & HTX_SL_F_CHNK) ? HTTP_MSGF_TE_CHNK : HTTP_MSGF_CNT_LEN);
if (sl->flags & HTX_SL_F_BODYLESS)
msg->flags |= HTTP_MSGF_BODYLESS;
/* we can make use of server redirect on GET and HEAD */
if (txn->meth == HTTP_METH_GET || txn->meth == HTTP_METH_HEAD)
@ -1610,6 +1612,8 @@ int htx_wait_for_response(struct stream *s, struct channel *rep, int an_bit)
if (sl->flags & HTX_SL_F_XFER_LEN) {
msg->flags |= HTTP_MSGF_XFER_LEN;
msg->flags |= ((sl->flags & HTX_SL_F_CHNK) ? HTTP_MSGF_TE_CHNK : HTTP_MSGF_CNT_LEN);
if (sl->flags & HTX_SL_F_BODYLESS)
msg->flags |= HTTP_MSGF_BODYLESS;
}
n = txn->status / 100;