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;