mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-13 23:14:46 +00:00
[MINOR] http: support wrapping messages in error captures
Error captures did only support contiguous messages. This is annoying for capturing chunking errors, so let's ensure the function is able to copy wrapped messages.
This commit is contained in:
parent
798e128a4d
commit
81f2fb97fe
@ -7222,12 +7222,25 @@ void http_capture_bad_message(struct error_snapshot *es, struct session *s,
|
||||
struct buffer *buf, struct http_msg *msg,
|
||||
int state, struct proxy *other_end)
|
||||
{
|
||||
es->len = buf->r - (buf->data + msg->som);
|
||||
memcpy(es->buf, buf->data + msg->som, MIN(es->len, sizeof(es->buf)));
|
||||
if (buf->r <= (buf->data + msg->som)) { /* message wraps */
|
||||
int len1 = buf->size - msg->som;
|
||||
es->len = buf->r - (buf->data + msg->som) + buf->size;
|
||||
memcpy(es->buf, buf->data + msg->som, MIN(len1, sizeof(es->buf)));
|
||||
if (es->len > len1 && len1 < sizeof(es->buf))
|
||||
memcpy(es->buf, buf->data, MIN(es->len, sizeof(es->buf)) - len1);
|
||||
}
|
||||
else {
|
||||
es->len = buf->r - (buf->data + msg->som);
|
||||
memcpy(es->buf, buf->data + msg->som, MIN(es->len, sizeof(es->buf)));
|
||||
}
|
||||
|
||||
if (msg->err_pos >= 0)
|
||||
es->pos = msg->err_pos - msg->som;
|
||||
else
|
||||
else if (buf->lr >= (buf->data + msg->som))
|
||||
es->pos = buf->lr - (buf->data + msg->som);
|
||||
else
|
||||
es->pos = buf->lr - (buf->data + msg->som) + buf->size;
|
||||
|
||||
es->when = date; // user-visible date
|
||||
es->sid = s->uniq_id;
|
||||
es->srv = s->srv;
|
||||
|
Loading…
Reference in New Issue
Block a user