chunk_printf(&msg,
" frontend %s (#%d): invalid request\n"
" src %s, session #%d, backend %s (#%d), server %s (#%d)\n"
+ " HTTP internal state %d, buffer flags 0x%08x\n"
" request length %d bytes, error at position %d:\n \n",
s->data_ctx.errors.px->id, s->data_ctx.errors.px->uuid,
pn, es->sid, (es->oe->cap & PR_CAP_BE) ? es->oe->id : "<NONE>",
(es->oe->cap & PR_CAP_BE) ? es->oe->uuid : -1,
es->srv ? es->srv->id : "<NONE>",
es->srv ? es->srv->puid : -1,
+ es->state, es->flags,
es->len, es->pos);
break;
case 1:
chunk_printf(&msg,
" backend %s (#%d) : invalid response\n"
" src %s, session #%d, frontend %s (#%d), server %s (#%d)\n"
+ " HTTP internal state %d, buffer flags 0x%08x\n"
" response length %d bytes, error at position %d:\n \n",
s->data_ctx.errors.px->id, s->data_ctx.errors.px->uuid,
pn, es->sid, es->oe->id, es->oe->uuid,
es->srv ? es->srv->id : "<NONE>",
es->srv ? es->srv->puid : -1,
+ es->state, es->flags,
es->len, es->pos);
break;
}
/* we cannot return any message on error */
if (msg->err_pos >= 0) {
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
session_inc_http_err_ctr(s);
}
/* read timeout : give up with an error message. */
if (msg->err_pos >= 0) {
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
session_inc_http_err_ctr(s);
}
txn->status = 408;
goto failed_keep_alive;
if (msg->err_pos >= 0)
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
txn->status = 400;
stream_int_retnclose(req->prod, error_message(s, HTTP_ERR_400));
msg->msg_state = HTTP_MSG_ERROR;
* to block on that, so we have to capture it now.
*/
if (unlikely(msg->err_pos >= 0))
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
/*
* 1: identify the method
/* we detected a parsing error. We want to archive this request
* in the dedicated proxy area for later troubleshooting.
*/
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
}
txn->req.msg_state = HTTP_MSG_ERROR;
/* we detected a parsing error. We want to archive this request
* in the dedicated proxy area for later troubleshooting.
*/
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
}
txn->req.msg_state = HTTP_MSG_ERROR;
/* we detected a parsing error. We want to archive this request
* in the dedicated proxy area for later troubleshooting.
*/
- http_capture_bad_message(&s->fe->invalid_req, s, req, msg, s->fe);
+ http_capture_bad_message(&s->fe->invalid_req, s, req, msg, msg->msg_state, s->fe);
}
txn->req.msg_state = HTTP_MSG_ERROR;
*/
hdr_response_bad:
if (msg->msg_state == HTTP_MSG_ERROR || msg->err_pos >= 0)
- http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, s->fe);
+ http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, msg->msg_state, s->fe);
s->be->counters.failed_resp++;
if (s->srv) {
/* read error */
else if (rep->flags & BF_READ_ERROR) {
if (msg->err_pos >= 0)
- http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, s->fe);
+ http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, msg->msg_state, s->fe);
s->be->counters.failed_resp++;
if (s->srv) {
/* read timeout : return a 504 to the client. */
else if (rep->flags & BF_READ_TIMEOUT) {
if (msg->err_pos >= 0)
- http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, s->fe);
+ http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, msg->msg_state, s->fe);
s->be->counters.failed_resp++;
if (s->srv) {
/* close from server */
else if (rep->flags & BF_SHUTR) {
if (msg->err_pos >= 0)
- http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, s->fe);
+ http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, msg->msg_state, s->fe);
s->be->counters.failed_resp++;
if (s->srv) {
/* write error to client (we don't send any message then) */
else if (rep->flags & BF_WRITE_ERROR) {
if (msg->err_pos >= 0)
- http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, s->fe);
+ http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, msg->msg_state, s->fe);
s->be->counters.failed_resp++;
rep->analysers = 0;
*/
if (unlikely(msg->err_pos >= 0))
- http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, s->fe);
+ http_capture_bad_message(&s->be->invalid_rep, s, rep, msg, msg->msg_state, s->fe);
/*
* 1: get the status code
*/
void http_capture_bad_message(struct error_snapshot *es, struct session *s,
struct buffer *buf, struct http_msg *msg,
- struct proxy *other_end)
+ 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)));
es->srv = s->srv;
es->oe = other_end;
es->src = s->cli_addr;
+ es->state = state;
+ es->flags = buf->flags;
}
/* return the IP address pointed to by occurrence <occ> of header <hname> in