mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-05-06 17:58:01 +00:00
MINOR: http-ana: Add a function for forward internal responses
Operations performed when internal responses (redirect/deny/auth/errors) are returned are always the same. The http_forward_proxy_resp() function is added to group all of them under a unique function.
This commit is contained in:
parent
72c7d8d040
commit
ef70e25035
@ -51,6 +51,7 @@ void http_server_error(struct stream *s, struct stream_interface *si, int err, i
|
||||
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);
|
||||
struct buffer *http_error_message(struct stream *s);
|
||||
int http_forward_proxy_resp(struct stream *s, int final);
|
||||
|
||||
struct http_txn *http_alloc_txn(struct stream *s);
|
||||
void http_init_txn(struct stream *s);
|
||||
|
@ -4547,6 +4547,40 @@ static void http_end_response(struct stream *s)
|
||||
DBG_TRACE_LEAVE(STRM_EV_HTTP_ANA, s, txn);
|
||||
}
|
||||
|
||||
/* Forward a response generated by HAProxy (error/redirect/return). This
|
||||
* function forwards all pending incoming data. If <final> is set to 0, nothing
|
||||
* more is performed. It is used for 1xx informational messages. Otherwise, the
|
||||
* transaction is terminated and the request is emptied. On success 1 is
|
||||
* returned. If an error occurred, 0 is returned.
|
||||
*/
|
||||
int http_forward_proxy_resp(struct stream *s, int final)
|
||||
{
|
||||
struct channel *req = &s->req;
|
||||
struct channel *res = &s->res;
|
||||
struct htx *htx = htxbuf(&res->buf);
|
||||
size_t data;
|
||||
|
||||
if (final) {
|
||||
htx->flags |= HTX_FL_PROXY_RESP;
|
||||
|
||||
channel_auto_read(req);
|
||||
channel_abort(req);
|
||||
channel_auto_close(req);
|
||||
channel_htx_erase(req, htxbuf(&req->buf));
|
||||
|
||||
res->wex = tick_add_ifset(now_ms, res->wto);
|
||||
channel_auto_read(res);
|
||||
channel_auto_close(res);
|
||||
channel_shutr_now(res);
|
||||
}
|
||||
|
||||
data = htx->data - co_data(res);
|
||||
c_adv(res, data);
|
||||
htx->first = -1;
|
||||
res->total += data;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void http_server_error(struct stream *s, struct stream_interface *si, int err,
|
||||
int finst, const struct buffer *msg)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user