mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-29 08:02:08 +00:00
MINOR: mux-h2/htx: Get the start-line from the head when HEADERS frame is built
in the H2 multiplexer, when a HEADERS frame is built before sending it, we have the warranty the start-line is the head of the HTX message. It is safer to rely on this fact than on the sl_pos value. For now, it's safe to use sl_pos in muxes because HTTP 1xx messages are considered as full messages in HTX and only one HTTP message can be stored at a time in HTX. But we are trying to handle 1xx messages as a part of the reponse message. In this way, an HTTP reponse will be the sum of all 1xx informational messages followed by the final response. So it will be possible to have several start-line in the same HTX message. And the sl_pos will point to the first unprocessed start-line from the analyzers point of view.
This commit is contained in:
parent
a3ad6b1b8f
commit
b77a1d26a4
12
src/mux_h2.c
12
src/mux_h2.c
@ -4438,8 +4438,10 @@ static size_t h2s_htx_frt_make_resp_headers(struct h2s *h2s, struct htx *htx)
|
||||
}
|
||||
|
||||
/* get the start line, we do have one */
|
||||
sl = htx_get_stline(htx);
|
||||
ALREADY_CHECKED(sl);
|
||||
blk = htx_get_head_blk(htx);
|
||||
BUG_ON(htx_get_blk_type(blk) != HTX_BLK_RES_SL);
|
||||
ALREADY_CHECKED(blk);
|
||||
sl = htx_get_blk_ptr(htx, blk);
|
||||
h2s->status = sl->info.res.status;
|
||||
if (h2s->status < 100 || h2s->status > 999)
|
||||
goto fail;
|
||||
@ -4645,8 +4647,10 @@ static size_t h2s_htx_bck_make_req_headers(struct h2s *h2s, struct htx *htx)
|
||||
}
|
||||
|
||||
/* get the start line, we do have one */
|
||||
sl = htx_get_stline(htx);
|
||||
ALREADY_CHECKED(sl);
|
||||
blk = htx_get_head_blk(htx);
|
||||
BUG_ON(htx_get_blk_type(blk) != HTX_BLK_REQ_SL);
|
||||
ALREADY_CHECKED(blk);
|
||||
sl = htx_get_blk_ptr(htx, blk);
|
||||
meth = htx_sl_req_meth(sl);
|
||||
path = htx_sl_req_uri(sl);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user