[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:
Willy Tarreau 2010-12-12 13:09:08 +01:00
parent 798e128a4d
commit 81f2fb97fe

View File

@ -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;