MINOR: http-ana: Rely on http_reply_and_close() to handle server error
The http_server_error() function now relies on http_reply_and_close(). Both do almost the same actions. In addtion, http_server_error() sets the error flag and the final state flag on the stream.
This commit is contained in:
parent
60b33a5a62
commit
72c7d8d040
|
@ -48,7 +48,7 @@ void http_check_request_for_cacheability(struct stream *s, struct channel *req);
|
||||||
void http_check_response_for_cacheability(struct stream *s, struct channel *res);
|
void http_check_response_for_cacheability(struct stream *s, struct channel *res);
|
||||||
void http_perform_server_redirect(struct stream *s, struct stream_interface *si);
|
void http_perform_server_redirect(struct stream *s, struct stream_interface *si);
|
||||||
void http_server_error(struct stream *s, struct stream_interface *si, int err, int finst, const struct buffer *msg);
|
void http_server_error(struct stream *s, struct stream_interface *si, int err, int finst, const struct buffer *msg);
|
||||||
void http_reply_and_close(struct stream *s, short status, struct buffer *msg);
|
void http_reply_and_close(struct stream *s, short status, const struct buffer *msg);
|
||||||
void http_return_srv_error(struct stream *s, struct stream_interface *si);
|
void http_return_srv_error(struct stream *s, struct stream_interface *si);
|
||||||
struct buffer *http_error_message(struct stream *s);
|
struct buffer *http_error_message(struct stream *s);
|
||||||
|
|
||||||
|
|
|
@ -4550,45 +4550,25 @@ static void http_end_response(struct stream *s)
|
||||||
void http_server_error(struct stream *s, struct stream_interface *si, int err,
|
void http_server_error(struct stream *s, struct stream_interface *si, int err,
|
||||||
int finst, const struct buffer *msg)
|
int finst, const struct buffer *msg)
|
||||||
{
|
{
|
||||||
channel_auto_read(si_oc(si));
|
http_reply_and_close(s, s->txn->status, msg);
|
||||||
channel_abort(si_oc(si));
|
|
||||||
channel_auto_close(si_oc(si));
|
|
||||||
channel_htx_erase(si_oc(si), htxbuf(&(si_oc(si))->buf));
|
|
||||||
channel_htx_truncate(si_ic(si), htxbuf(&(si_ic(si))->buf));
|
|
||||||
channel_auto_close(si_ic(si));
|
|
||||||
channel_auto_read(si_ic(si));
|
|
||||||
|
|
||||||
/* <msg> is an HTX structure. So we copy it in the response's
|
|
||||||
* channel */
|
|
||||||
if (msg && !b_is_null(msg)) {
|
|
||||||
struct channel *chn = si_ic(si);
|
|
||||||
struct htx *htx;
|
|
||||||
size_t data;
|
|
||||||
|
|
||||||
FLT_STRM_CB(s, flt_http_reply(s, s->txn->status, msg));
|
|
||||||
htx = htx_from_buf(&chn->buf);
|
|
||||||
if (channel_htx_copy_msg(chn, htx, msg)) {
|
|
||||||
htx->flags |= HTX_FL_PROXY_RESP;
|
|
||||||
data = htx->data - co_data(chn);
|
|
||||||
c_adv(chn, data);
|
|
||||||
htx->first = -1;
|
|
||||||
chn->total += data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!(s->flags & SF_ERR_MASK))
|
if (!(s->flags & SF_ERR_MASK))
|
||||||
s->flags |= err;
|
s->flags |= err;
|
||||||
if (!(s->flags & SF_FINST_MASK))
|
if (!(s->flags & SF_FINST_MASK))
|
||||||
s->flags |= finst;
|
s->flags |= finst;
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_reply_and_close(struct stream *s, short status, struct buffer *msg)
|
void http_reply_and_close(struct stream *s, short status, const struct buffer *msg)
|
||||||
{
|
{
|
||||||
channel_auto_read(&s->req);
|
channel_auto_read(&s->req);
|
||||||
channel_abort(&s->req);
|
channel_abort(&s->req);
|
||||||
channel_auto_close(&s->req);
|
channel_auto_close(&s->req);
|
||||||
channel_htx_erase(&s->req, htxbuf(&s->req.buf));
|
channel_htx_erase(&s->req, htxbuf(&s->req.buf));
|
||||||
channel_htx_truncate(&s->res, htxbuf(&s->res.buf));
|
channel_htx_truncate(&s->res, htxbuf(&s->res.buf));
|
||||||
|
channel_auto_read(&s->res);
|
||||||
|
channel_auto_close(&s->res);
|
||||||
|
channel_shutr_now(&s->res);
|
||||||
|
|
||||||
|
s->res.wex = tick_add_ifset(now_ms, s->res.wto);
|
||||||
s->txn->flags &= ~TX_WAIT_NEXT_RQ;
|
s->txn->flags &= ~TX_WAIT_NEXT_RQ;
|
||||||
|
|
||||||
/* <msg> is an HTX structure. So we copy it in the response's
|
/* <msg> is an HTX structure. So we copy it in the response's
|
||||||
|
@ -4608,11 +4588,6 @@ void http_reply_and_close(struct stream *s, short status, struct buffer *msg)
|
||||||
chn->total += data;
|
chn->total += data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s->res.wex = tick_add_ifset(now_ms, s->res.wto);
|
|
||||||
channel_auto_read(&s->res);
|
|
||||||
channel_auto_close(&s->res);
|
|
||||||
channel_shutr_now(&s->res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct buffer *http_error_message(struct stream *s)
|
struct buffer *http_error_message(struct stream *s)
|
||||||
|
|
Loading…
Reference in New Issue