mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
MINOR: h1: make h1_measure_trailers() use an offset and a count
This will be needed by the H2 encoder to restart after wrapping.
This commit is contained in:
parent
84d6b7af87
commit
f40e68227b
@ -43,7 +43,7 @@ int http_forward_trailers(struct http_msg *msg);
|
|||||||
int h1_headers_to_hdr_list(char *start, const char *stop,
|
int h1_headers_to_hdr_list(char *start, const char *stop,
|
||||||
struct http_hdr *hdr, unsigned int hdr_num,
|
struct http_hdr *hdr, unsigned int hdr_num,
|
||||||
struct h1m *h1m);
|
struct h1m *h1m);
|
||||||
int h1_measure_trailers(const struct buffer *buf, unsigned int max);
|
int h1_measure_trailers(const struct buffer *buf, unsigned int ofs, unsigned int max);
|
||||||
|
|
||||||
#define H1_FLG_CTL 0x01
|
#define H1_FLG_CTL 0x01
|
||||||
#define H1_FLG_SEP 0x02
|
#define H1_FLG_SEP 0x02
|
||||||
|
10
src/h1.c
10
src/h1.c
@ -1209,19 +1209,19 @@ int h1_headers_to_hdr_list(char *start, const char *stop,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* This function performs a very minimal parsing of the trailers block present
|
/* This function performs a very minimal parsing of the trailers block present
|
||||||
* in the output part of <buf> for up to <max> bytes, and returns the number of
|
* at offset <ofs> in <buf> for up to <max> bytes, and returns the number of
|
||||||
* bytes to delete to skip the trailers. It may return 0 if it's missing some
|
* bytes to delete to skip the trailers. It may return 0 if it's missing some
|
||||||
* input data, or < 0 in case of parse error (in which case the caller may have
|
* input data, or < 0 in case of parse error (in which case the caller may have
|
||||||
* to decide how to proceed, possibly eating everything).
|
* to decide how to proceed, possibly eating everything).
|
||||||
*/
|
*/
|
||||||
int h1_measure_trailers(const struct buffer *buf, unsigned int max)
|
int h1_measure_trailers(const struct buffer *buf, unsigned int ofs, unsigned int max)
|
||||||
{
|
{
|
||||||
int count = 0;
|
const char *stop = b_peek(buf, ofs + max);
|
||||||
|
int count = ofs;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
const char *p1 = NULL, *p2 = NULL;
|
const char *p1 = NULL, *p2 = NULL;
|
||||||
const char *start = b_peek(buf, count);
|
const char *start = b_peek(buf, count);
|
||||||
const char *stop = b_peek(buf, max);
|
|
||||||
const char *ptr = start;
|
const char *ptr = start;
|
||||||
|
|
||||||
/* scan current line and stop at LF or CRLF */
|
/* scan current line and stop at LF or CRLF */
|
||||||
@ -1256,7 +1256,7 @@ int h1_measure_trailers(const struct buffer *buf, unsigned int max)
|
|||||||
break;
|
break;
|
||||||
/* OK, next line then */
|
/* OK, next line then */
|
||||||
}
|
}
|
||||||
return count;
|
return count - ofs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function skips trailers in the buffer associated with HTTP message
|
/* This function skips trailers in the buffer associated with HTTP message
|
||||||
|
@ -3400,7 +3400,7 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags)
|
|||||||
}
|
}
|
||||||
else if (h2s->res.state == HTTP_MSG_TRAILERS) {
|
else if (h2s->res.state == HTTP_MSG_TRAILERS) {
|
||||||
/* consume the trailers if any (we don't forward them for now) */
|
/* consume the trailers if any (we don't forward them for now) */
|
||||||
ret = h1_measure_trailers(buf, buf->o);
|
ret = h1_measure_trailers(buf, 0, buf->o);
|
||||||
|
|
||||||
if (unlikely((int)ret <= 0)) {
|
if (unlikely((int)ret <= 0)) {
|
||||||
if ((int)ret < 0)
|
if ((int)ret < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user