if (!(s->flags & SF_FINST_MASK))
s->flags |= SF_FINST_R;
- req->analysers &= AN_REQ_FLT_END;
- req->analyse_exp = TICK_ETERNITY;
DBG_TRACE_DEVEL("leaving on error",
STRM_EV_STRM_ANA|STRM_EV_HTTP_ANA|STRM_EV_HTTP_ERR, s, txn);
return 0;
if (!(s->flags & SF_FINST_MASK))
s->flags |= SF_FINST_R;
- req->analysers &= AN_REQ_FLT_END;
- req->analyse_exp = TICK_ETERNITY;
DBG_TRACE_DEVEL("leaving on error",
STRM_EV_STRM_ANA|STRM_EV_HTTP_ANA|STRM_EV_HTTP_ERR, s, txn);
return 0;
http_reply_and_close(s, txn->status, (!(req->flags & CF_READ_ERROR) ? http_error_message(s) : NULL));
- end:
- req->analysers &= AN_REQ_FLT_END;
- req->analyse_exp = TICK_ETERNITY;
-
if (!(s->flags & SF_ERR_MASK))
s->flags |= SF_ERR_PRXCOND;
if (!(s->flags & SF_FINST_MASK))
txn->status = status;
http_reply_and_close(s, txn->status, http_error_message(s));
}
- req->analysers &= AN_REQ_FLT_END;
- s->res.analysers &= AN_RES_FLT_END; /* we're in data phase, we want to abort both directions */
if (!(s->flags & SF_ERR_MASK))
s->flags |= SF_ERR_PRXCOND;
if (!(s->flags & SF_FINST_MASK))
stream_inc_http_fail_ctr(s);
}
- rep->analysers &= AN_RES_FLT_END;
s->si[1].flags |= SI_FL_NOLINGER;
http_reply_and_close(s, txn->status, http_error_message(s));
health_adjust(__objt_server(s->target), HANA_STATUS_HTTP_READ_TIMEOUT);
}
- rep->analysers &= AN_RES_FLT_END;
txn->status = 504;
stream_inc_http_fail_ctr(s);
s->si[1].flags |= SI_FL_NOLINGER;
if (objt_server(s->target))
_HA_ATOMIC_INC(&__objt_server(s->target)->counters.cli_aborts);
- rep->analysers &= AN_RES_FLT_END;
txn->status = 400;
http_reply_and_close(s, txn->status, http_error_message(s));
health_adjust(__objt_server(s->target), HANA_STATUS_HTTP_BROKEN_PIPE);
}
- rep->analysers &= AN_RES_FLT_END;
txn->status = 502;
stream_inc_http_fail_ctr(s);
s->si[1].flags |= SI_FL_NOLINGER;
s->flags |= SF_FINST_H;
s->si[1].flags |= SI_FL_NOLINGER;
- rep->analysers &= AN_RES_FLT_END;
- s->req.analysers &= AN_REQ_FLT_END;
- rep->analyse_exp = TICK_ETERNITY;
DBG_TRACE_DEVEL("leaving on error",
STRM_EV_STRM_ANA|STRM_EV_HTTP_ANA|STRM_EV_HTTP_ERR, s, txn);
return 0;
* any other information so that the client retries.
*/
txn->status = 0;
- rep->analysers &= AN_RES_FLT_END;
- s->req.analysers &= AN_REQ_FLT_END;
s->logs.logwait = 0;
s->logs.level = 0;
s->res.flags &= ~CF_EXPECT_MORE; /* speed up sending a previous response */
return_error:
/* don't send any error message as we're in the body */
http_reply_and_close(s, txn->status, NULL);
- res->analysers &= AN_RES_FLT_END;
- s->req.analysers &= AN_REQ_FLT_END; /* we're in data phase, we want to abort both directions */
if (!(s->flags & SF_FINST_MASK))
s->flags |= SF_FINST_D;
DBG_TRACE_DEVEL("leaving on error",
if (rule->flags & REDIRECT_FLAG_FROM_REQ) {
/* let's log the request time */
s->logs.tv_request = now;
- req->analysers &= AN_REQ_FLT_END;
if (s->sess->fe == s->be) /* report it if the request was intercepted by the frontend */
_HA_ATOMIC_INC(&s->sess->fe->fe_counters.intercepted_req);
end:
s->res.wex = tick_add_ifset(now_ms, s->res.wto);
+ /* At this staged, HTTP analysis is finished */
+ s->req.analysers &= AN_REQ_FLT_END;
+ s->req.analyse_exp = TICK_ETERNITY;
+
+ s->res.analysers &= AN_RES_FLT_END;
+ s->res.analyse_exp = TICK_ETERNITY;
+
channel_auto_read(&s->req);
channel_abort(&s->req);
channel_auto_close(&s->req);