From: Willy Tarreau Date: Thu, 17 Apr 2014 18:24:24 +0000 (+0200) Subject: MINOR: http: add a small helper to compute how far to rewind to find URI X-Git-Tag: v1.5-dev23~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da6eed621fd69fd860d879e1609da1cc07ea23e6;p=thirdparty%2Fhaproxy.git MINOR: http: add a small helper to compute how far to rewind to find URI http_uri_rewind() returns the number of bytes to rewind before buf->p to find the URI. It relies on http_hdr_rewind() to find the beginning and is just here to simplify operations. The purpose is to centralize further ->sov changes aiming at avoiding to rely on buf->o. --- diff --git a/include/proto/proto_http.h b/include/proto/proto_http.h index 6566c0a565..aa2c901698 100644 --- a/include/proto/proto_http.h +++ b/include/proto/proto_http.h @@ -140,6 +140,15 @@ static inline int http_hdr_rewind(const struct http_msg *msg) return msg->chn->buf->o; } +/* Return the amount of bytes that need to be rewound before buf->p to access + * the current message's URI. The purpose is to be able to easily fetch + * the message's beginning before headers are forwarded, as well as after. + */ +static inline int http_uri_rewind(const struct http_msg *msg) +{ + return http_hdr_rewind(msg) - msg->sl.rq.u; +} + /* Return the maximum amount of bytes that may be read after the beginning of * the message body, according to the advertised length. The function is safe * for use between HTTP_MSG_BODY and HTTP_MSG_DATA regardless of whether the diff --git a/src/backend.c b/src/backend.c index 5a011b1513..212e779b2c 100644 --- a/src/backend.c +++ b/src/backend.c @@ -615,7 +615,7 @@ int assign_server(struct session *s) if (s->txn.req.msg_state < HTTP_MSG_BODY) break; srv = get_server_uh(s->be, - b_ptr(s->req->buf, (int)(s->txn.req.sl.rq.u - http_hdr_rewind(&s->txn.req))), + b_ptr(s->req->buf, -http_uri_rewind(&s->txn.req)), s->txn.req.sl.rq.u_l); break; @@ -625,7 +625,7 @@ int assign_server(struct session *s) break; srv = get_server_ph(s->be, - b_ptr(s->req->buf, (int)(s->txn.req.sl.rq.u - http_hdr_rewind(&s->txn.req))), + b_ptr(s->req->buf, -http_uri_rewind(&s->txn.req)), s->txn.req.sl.rq.u_l); if (!srv && s->txn.meth == HTTP_METH_POST)