diff --git a/src/51d.c b/src/51d.c
index 852c574..96bbb66 100644
--- a/src/51d.c
+++ b/src/51d.c
@@ -11,7 +11,7 @@
 #include <proto/http_fetch.h>
 #include <proto/http_htx.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 #include <import/xxhash.h>
 #include <import/lru.h>
diff --git a/src/backend.c b/src/backend.c
index f07a198..169481c 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -48,7 +48,7 @@
 #include <proto/obj_type.h>
 #include <proto/payload.h>
 #include <proto/protocol.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proto_tcp.h>
 #include <proto/proxy.h>
 #include <proto/queue.h>
diff --git a/src/cache.c b/src/cache.c
index 032c980..ccbbe52 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -25,7 +25,7 @@
 #include <proto/http_htx.h>
 #include <proto/filters.h>
 #include <proto/http_rules.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/log.h>
 #include <proto/stream.h>
 #include <proto/stream_interface.h>
@@ -596,7 +596,7 @@
 	if (http_find_header(htx, ist("Vary"), &ctx, 0))
 		goto out;
 
-	htx_check_response_for_cacheability(s, &s->res);
+	http_check_response_for_cacheability(s, &s->res);
 
 	if (!(txn->flags & TX_CACHEABLE) || !(txn->flags & TX_CACHE_COOK))
 		goto out;
@@ -1089,7 +1089,7 @@
 	    (txn->meth != HTTP_METH_GET && txn->meth != HTTP_METH_HEAD))
 		txn->flags |= TX_CACHE_IGNORE;
 
-	htx_check_request_for_cacheability(s, &s->req);
+	http_check_request_for_cacheability(s, &s->req);
 
 	if ((s->txn->flags & (TX_CACHE_IGNORE|TX_CACHEABLE)) == TX_CACHE_IGNORE)
 		return ACT_RET_CONT;
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 11cb0c1..cb3279a 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -72,7 +72,7 @@
 #include <proto/listener.h>
 #include <proto/log.h>
 #include <proto/protocol.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/peers.h>
 #include <proto/sample.h>
diff --git a/src/da.c b/src/da.c
index 2b4ac28..0984c30 100644
--- a/src/da.c
+++ b/src/da.c
@@ -9,7 +9,7 @@
 #include <proto/http_fetch.h>
 #include <proto/http_htx.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 #include <dac.h>
 
diff --git a/src/dns.c b/src/dns.c
index 503eb67..d59e96e 100644
--- a/src/dns.c
+++ b/src/dns.c
@@ -39,7 +39,7 @@
 #include <proto/checks.h>
 #include <proto/dns.h>
 #include <proto/fd.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/http_rules.h>
 #include <proto/log.h>
 #include <proto/sample.h>
diff --git a/src/filters.c b/src/filters.c
index c68319b..0119205 100644
--- a/src/filters.c
+++ b/src/filters.c
@@ -23,13 +23,13 @@
 #include <common/hathreads.h>
 
 #include <types/filters.h>
-#include <types/proto_http.h>
+#include <types/http_ana.h>
 
 #include <proto/compression.h>
 #include <proto/filters.h>
 #include <proto/flt_http_comp.h>
 #include <proto/http_htx.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/stream.h>
 #include <proto/stream_interface.h>
 
@@ -1014,10 +1014,10 @@
 	if (IS_HTX_STRM(s)) {
 		/* Do not do that when we are waiting for the next request */
 		if (s->txn->status)
-			htx_reply_and_close(s, s->txn->status, NULL);
+			http_reply_and_close(s, s->txn->status, NULL);
 		else {
 			s->txn->status = 400;
-			htx_reply_and_close(s, 400, htx_error_message(s));
+			http_reply_and_close(s, 400, http_error_message(s));
 		}
 	}
 
diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c
index 446e3c3..91138d6 100644
--- a/src/flt_http_comp.c
+++ b/src/flt_http_comp.c
@@ -25,7 +25,7 @@
 #include <proto/compression.h>
 #include <proto/filters.h>
 #include <proto/http_htx.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 #include <proto/stream.h>
 
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index 4e48aa95..b8323f6 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -34,7 +34,7 @@
 #include <proto/frontend.h>
 #include <proto/http_rules.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/sample.h>
 #include <proto/session.h>
diff --git a/src/flt_trace.c b/src/flt_trace.c
index 4d53bfc..1ef7231 100644
--- a/src/flt_trace.c
+++ b/src/flt_trace.c
@@ -28,7 +28,7 @@
 #include <proto/filters.h>
 #include <proto/http_htx.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/stream.h>
 
 const char *trace_flt_id = "trace filter";
diff --git a/src/frontend.c b/src/frontend.c
index f560c16..47a9b1d 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -39,7 +39,7 @@
 #include <proto/frontend.h>
 #include <proto/log.h>
 #include <proto/proto_tcp.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/sample.h>
 #include <proto/stream.h>
diff --git a/src/haproxy.c b/src/haproxy.c
index e1b56e0..4e24ca3 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -115,7 +115,7 @@
 #include <proto/mworker.h>
 #include <proto/pattern.h>
 #include <proto/protocol.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/queue.h>
 #include <proto/server.h>
diff --git a/src/hlua.c b/src/hlua.c
index 78c6235..aca3cc9 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -52,7 +52,7 @@
 #include <proto/queue.h>
 #include <proto/pattern.h>
 #include <proto/payload.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 #include <proto/server.h>
 #include <proto/session.h>
@@ -4831,7 +4831,7 @@
 		WILL_LJMP(luaL_argerror(L, 3, "invalid regex"));
 
 	htx = htxbuf(&msg->chn->buf);
-	htx_transform_header_str(htxn->s, msg->chn, htx, ist2(name, name_len), value, re, action);
+	http_transform_header_str(htxn->s, msg->chn, htx, ist2(name, name_len), value, re, action);
 	regex_free(re);
 	return 0;
 }
@@ -4977,7 +4977,7 @@
 	size_t name_len;
 	const char *name = MAY_LJMP(luaL_checklstring(L, 2, &name_len));
 
-	lua_pushboolean(L, htx_req_replace_stline(0, name, name_len, htxn->p, htxn->s) != -1);
+	lua_pushboolean(L, http_req_replace_stline(0, name, name_len, htxn->p, htxn->s) != -1);
 	return 1;
 }
 
@@ -4988,7 +4988,7 @@
 	size_t name_len;
 	const char *name = MAY_LJMP(luaL_checklstring(L, 2, &name_len));
 
-	lua_pushboolean(L, htx_req_replace_stline(1, name, name_len, htxn->p, htxn->s) != -1);
+	lua_pushboolean(L, http_req_replace_stline(1, name, name_len, htxn->p, htxn->s) != -1);
 	return 1;
 }
 
@@ -5012,7 +5012,7 @@
 	trash.data += name_len;
 
 	lua_pushboolean(L,
-			htx_req_replace_stline(2, trash.area, trash.data, htxn->p, htxn->s) != -1);
+			http_req_replace_stline(2, trash.area, trash.data, htxn->p, htxn->s) != -1);
 	return 1;
 }
 
@@ -5023,7 +5023,7 @@
 	size_t name_len;
 	const char *name = MAY_LJMP(luaL_checklstring(L, 2, &name_len));
 
-	lua_pushboolean(L, htx_req_replace_stline(3, name, name_len, htxn->p, htxn->s) != -1);
+	lua_pushboolean(L, http_req_replace_stline(3, name, name_len, htxn->p, htxn->s) != -1);
 	return 1;
 }
 
@@ -5034,7 +5034,7 @@
 	unsigned int code = MAY_LJMP(luaL_checkinteger(L, 2));
 	const char *reason = MAY_LJMP(luaL_optlstring(L, 3, NULL, NULL));
 
-	htx_res_set_status(code, reason, htxn->s);
+	http_res_set_status(code, reason, htxn->s);
 	return 0;
 }
 
@@ -5409,7 +5409,7 @@
 	oc = &htxn->s->res;
 
 	if (IS_HTX_STRM(htxn->s))
-		htx_reply_and_close(htxn->s, 0, NULL);
+		http_reply_and_close(htxn->s, 0, NULL);
 	else {
 		channel_auto_read(ic);
 		channel_abort(ic);
diff --git a/src/http_act.c b/src/http_act.c
index 495ba55..d6015d3 100644
--- a/src/http_act.c
+++ b/src/http_act.c
@@ -34,7 +34,7 @@
 #include <proto/http_rules.h>
 #include <proto/http_htx.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/stream_interface.h>
 
 
@@ -62,8 +62,8 @@
 				       replace->size - replace->data,
 				       &rule->arg.http.logfmt);
 
-	htx_req_replace_stline(rule->arg.http.action, replace->area,
-			       replace->data, px, s);
+	http_req_replace_stline(rule->arg.http.action, replace->area,
+				replace->data, px, s);
 
 	ret = ACT_RET_CONT;
 
@@ -162,7 +162,7 @@
 		goto leave;
 
 	/* 3 is the set-uri action */
-	htx_req_replace_stline(3, output->area, len, px, s);
+	http_req_replace_stline(3, output->area, len, px, s);
 
 	ret = ACT_RET_CONT;
 
@@ -215,7 +215,7 @@
 static enum act_return action_http_set_status(struct act_rule *rule, struct proxy *px,
                                               struct session *sess, struct stream *s, int flags)
 {
-	htx_res_set_status(rule->arg.status.code, rule->arg.status.reason, s);
+	http_res_set_status(rule->arg.status.code, rule->arg.status.reason, s);
 	return ACT_RET_CONT;
 }
 
diff --git a/src/proto_htx.c b/src/http_ana.c
similarity index 93%
rename from src/proto_htx.c
rename to src/http_ana.c
index a63efff..fc03751 100644
--- a/src/proto_htx.c
+++ b/src/http_ana.c
@@ -27,7 +27,7 @@
 #include <proto/http_htx.h>
 #include <proto/log.h>
 #include <proto/pattern.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/server.h>
 #include <proto/stream.h>
@@ -41,31 +41,31 @@
 struct pool_head *pool_head_capture = NULL;
 
 
-static void htx_end_request(struct stream *s);
-static void htx_end_response(struct stream *s);
+static void http_end_request(struct stream *s);
+static void http_end_response(struct stream *s);
 
-static void htx_capture_headers(struct htx *htx, char **cap, struct cap_hdr *cap_hdr);
-static int htx_del_hdr_value(char *start, char *end, char **from, char *next);
-static size_t htx_fmt_req_line(const struct htx_sl *sl, char *str, size_t len);
-static size_t htx_fmt_res_line(const struct htx_sl *sl, char *str, size_t len);
-static void htx_debug_stline(const char *dir, struct stream *s, const struct htx_sl *sl);
-static void htx_debug_hdr(const char *dir, struct stream *s, const struct ist n, const struct ist v);
+static void http_capture_headers(struct htx *htx, char **cap, struct cap_hdr *cap_hdr);
+static int http_del_hdr_value(char *start, char *end, char **from, char *next);
+static size_t http_fmt_req_line(const struct htx_sl *sl, char *str, size_t len);
+static size_t http_fmt_res_line(const struct htx_sl *sl, char *str, size_t len);
+static void http_debug_stline(const char *dir, struct stream *s, const struct htx_sl *sl);
+static void http_debug_hdr(const char *dir, struct stream *s, const struct ist n, const struct ist v);
 
-static enum rule_result htx_req_get_intercept_rule(struct proxy *px, struct list *rules, struct stream *s, int *deny_status);
-static enum rule_result htx_res_get_intercept_rule(struct proxy *px, struct list *rules, struct stream *s);
+static enum rule_result http_req_get_intercept_rule(struct proxy *px, struct list *rules, struct stream *s, int *deny_status);
+static enum rule_result http_res_get_intercept_rule(struct proxy *px, struct list *rules, struct stream *s);
 
-static int htx_apply_filters_to_request(struct stream *s, struct channel *req, struct proxy *px);
-static int htx_apply_filters_to_response(struct stream *s, struct channel *res, struct proxy *px);
+static int http_apply_filters_to_request(struct stream *s, struct channel *req, struct proxy *px);
+static int http_apply_filters_to_response(struct stream *s, struct channel *res, struct proxy *px);
 
-static void htx_manage_client_side_cookies(struct stream *s, struct channel *req);
-static void htx_manage_server_side_cookies(struct stream *s, struct channel *res);
+static void http_manage_client_side_cookies(struct stream *s, struct channel *req);
+static void http_manage_server_side_cookies(struct stream *s, struct channel *res);
 
-static int htx_stats_check_uri(struct stream *s, struct http_txn *txn, struct proxy *backend);
-static int htx_handle_stats(struct stream *s, struct channel *req);
+static int http_stats_check_uri(struct stream *s, struct http_txn *txn, struct proxy *backend);
+static int http_handle_stats(struct stream *s, struct channel *req);
 
-static int htx_handle_expect_hdr(struct stream *s, struct htx *htx, struct http_msg *msg);
-static int htx_reply_100_continue(struct stream *s);
-static int htx_reply_40x_unauthorized(struct stream *s, const char *auth_realm);
+static int http_handle_expect_hdr(struct stream *s, struct htx *htx, struct http_msg *msg);
+static int http_reply_100_continue(struct stream *s);
+static int http_reply_40x_unauthorized(struct stream *s, const char *auth_realm);
 
 /* This stream analyser waits for a complete HTTP request. It returns 1 if the
  * processing can continue on next analysers, or zero if it either needs more
@@ -74,7 +74,7 @@
  * when it has nothing left to do, and may remove any analyser when it wants to
  * abort.
  */
-int htx_wait_for_request(struct stream *s, struct channel *req, int an_bit)
+int http_wait_for_request(struct stream *s, struct channel *req, int an_bit)
 {
 
 	/*
@@ -110,7 +110,7 @@
 	}
 
 	/* we're speaking HTTP here, so let's speak HTTP to the client */
-	s->srv_error = htx_return_srv_error;
+	s->srv_error = http_return_srv_error;
 
 	/* If there is data available for analysis, log the end of the idle time. */
 	if (c_data(req) && s->logs.t_idle == -1) {
@@ -161,7 +161,7 @@
 			txn->status = 400;
 			msg->err_state = msg->msg_state;
 			msg->msg_state = HTTP_MSG_ERROR;
-			htx_reply_and_close(s, txn->status, NULL);
+			http_reply_and_close(s, txn->status, NULL);
 			req->analysers &= AN_REQ_FLT_END;
 
 			if (!(s->flags & SF_FINST_MASK))
@@ -190,7 +190,7 @@
 			txn->status = 408;
 			msg->err_state = msg->msg_state;
 			msg->msg_state = HTTP_MSG_ERROR;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 			req->analysers &= AN_REQ_FLT_END;
 
 			if (!(s->flags & SF_FINST_MASK))
@@ -219,7 +219,7 @@
 			txn->status = 400;
 			msg->err_state = msg->msg_state;
 			msg->msg_state = HTTP_MSG_ERROR;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 			req->analysers &= AN_REQ_FLT_END;
 
 			if (!(s->flags & SF_FINST_MASK))
@@ -271,7 +271,7 @@
 		s->logs.logwait = 0;
 		s->logs.level = 0;
 		s->res.flags &= ~CF_EXPECT_MORE; /* speed up sending a previous response */
-		htx_reply_and_close(s, txn->status, NULL);
+		http_reply_and_close(s, txn->status, NULL);
 		return 0;
 	}
 
@@ -291,7 +291,7 @@
 		     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
 		int32_t pos;
 
-		htx_debug_stline("clireq", s, sl);
+		http_debug_stline("clireq", s, sl);
 
 		for (pos = htx_get_first(htx); pos != -1; pos = htx_get_next(htx, pos)) {
 			struct htx_blk *blk = htx_get_blk(htx, pos);
@@ -302,9 +302,9 @@
 			if (type != HTX_BLK_HDR)
 				continue;
 
-			htx_debug_hdr("clihdr", s,
-				  htx_get_blk_name(htx, blk),
-				  htx_get_blk_value(htx, blk));
+			http_debug_hdr("clihdr", s,
+				       htx_get_blk_name(htx, blk),
+				       htx_get_blk_value(htx, blk));
 		}
 	}
 
@@ -353,7 +353,7 @@
 			if (ret) {
 				/* we fail this request, let's return 503 service unavail */
 				txn->status = 503;
-				htx_reply_and_close(s, txn->status, htx_error_message(s));
+				http_reply_and_close(s, txn->status, http_error_message(s));
 				if (!(s->flags & SF_ERR_MASK))
 					s->flags |= SF_ERR_LOCAL; /* we don't want a real error here */
 				goto return_prx_cond;
@@ -362,7 +362,7 @@
 
 		/* nothing to fail, let's reply normally */
 		txn->status = 200;
-		htx_reply_and_close(s, txn->status, htx_error_message(s));
+		http_reply_and_close(s, txn->status, http_error_message(s));
 		if (!(s->flags & SF_ERR_MASK))
 			s->flags |= SF_ERR_LOCAL; /* we don't want a real error here */
 		goto return_prx_cond;
@@ -378,7 +378,7 @@
 		if ((txn->uri = pool_alloc(pool_head_requri)) != NULL) {
 			size_t len;
 
-			len = htx_fmt_req_line(sl, txn->uri, global.tune.requri_len - 1);
+			len = http_fmt_req_line(sl, txn->uri, global.tune.requri_len - 1);
 			txn->uri[len] = 0;
 
 			if (!(s->logs.logwait &= ~(LW_REQ|LW_INIT)))
@@ -403,7 +403,7 @@
 
 	/* 5: we may need to capture headers */
 	if (unlikely((s->logs.logwait & LW_REQHDR) && s->req_cap))
-		htx_capture_headers(htx, s->req_cap, sess->fe->req_cap);
+		http_capture_headers(htx, s->req_cap, sess->fe->req_cap);
 
 	/* we may have to wait for the request's body */
 	if (s->be->options & PR_O_WREQ_BODY)
@@ -439,7 +439,7 @@
 	txn->status = 400;
 	txn->req.err_state = txn->req.msg_state;
 	txn->req.msg_state = HTTP_MSG_ERROR;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 	_HA_ATOMIC_ADD(&sess->fe->fe_counters.failed_req, 1);
 	if (sess->listener->counters)
 		_HA_ATOMIC_ADD(&sess->listener->counters->failed_req, 1);
@@ -463,7 +463,7 @@
  * either needs more data or wants to immediately abort the request (eg: deny,
  * error, ...).
  */
-int htx_process_req_common(struct stream *s, struct channel *req, int an_bit, struct proxy *px)
+int http_process_req_common(struct stream *s, struct channel *req, int an_bit, struct proxy *px)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -498,7 +498,7 @@
 
 	/* evaluate http-request rules */
 	if (!LIST_ISEMPTY(&px->http_req_rules)) {
-		verdict = htx_req_get_intercept_rule(px, &px->http_req_rules, s, &deny_status);
+		verdict = http_req_get_intercept_rule(px, &px->http_req_rules, s, &deny_status);
 
 		switch (verdict) {
 		case HTTP_RULE_RES_YIELD: /* some data miss, call the function later. */
@@ -541,12 +541,12 @@
 	 * by a possible reqrep, while they are processed *after* so that a
 	 * reqdeny can still block them. This clearly needs to change in 1.6!
 	 */
-	if (!s->target && htx_stats_check_uri(s, txn, px)) {
+	if (!s->target && http_stats_check_uri(s, txn, px)) {
 		s->target = &http_stats_applet.obj_type;
 		if (unlikely(!si_register_handler(&s->si[1], objt_applet(s->target)))) {
 			txn->status = 500;
 			s->logs.tv_request = now;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 
 			if (!(s->flags & SF_ERR_MASK))
 				s->flags |= SF_ERR_RESOURCE;
@@ -554,8 +554,8 @@
 		}
 
 		/* parse the whole stats request and extract the relevant information */
-		htx_handle_stats(s, req);
-		verdict = htx_req_get_intercept_rule(px, &px->uri_auth->http_req_rules, s, &deny_status);
+		http_handle_stats(s, req);
+		verdict = http_req_get_intercept_rule(px, &px->uri_auth->http_req_rules, s, &deny_status);
 		/* not all actions implemented: deny, allow, auth */
 
 		if (verdict == HTTP_RULE_RES_DENY) /* stats http-request deny */
@@ -567,7 +567,7 @@
 
 	/* evaluate the req* rules except reqadd */
 	if (px->req_exp != NULL) {
-		if (htx_apply_filters_to_request(s, req, px) < 0)
+		if (http_apply_filters_to_request(s, req, px) < 0)
 			goto return_bad_req;
 
 		if (txn->flags & TX_CLDENY)
@@ -601,7 +601,7 @@
 		if (sess->fe == s->be) /* report it if the request was intercepted by the frontend */
 			_HA_ATOMIC_ADD(&sess->fe->fe_counters.intercepted_req, 1);
 
-		if (htx_handle_expect_hdr(s, htx, msg) == -1)
+		if (http_handle_expect_hdr(s, htx, msg) == -1)
 			goto return_bad_req;
 
 		if (!(s->flags & SF_ERR_MASK))      // this is not really an error but it is
@@ -631,7 +631,7 @@
 			if (!ret)
 				continue;
 		}
-		if (!htx_apply_redirect_rule(rule, s, txn))
+		if (!http_apply_redirect_rule(rule, s, txn))
 			goto return_bad_req;
 		goto done;
 	}
@@ -657,7 +657,7 @@
 	/* Allow cookie logging
 	 */
 	if (s->be->cookie_name || sess->fe->capture_name)
-		htx_manage_client_side_cookies(s, req);
+		http_manage_client_side_cookies(s, req);
 
 	/* When a connection is tarpitted, we use the tarpit timeout,
 	 * which may be the same as the connect timeout if unspecified.
@@ -691,12 +691,12 @@
 	/* Allow cookie logging
 	 */
 	if (s->be->cookie_name || sess->fe->capture_name)
-		htx_manage_client_side_cookies(s, req);
+		http_manage_client_side_cookies(s, req);
 
 	txn->flags |= TX_CLDENY;
 	txn->status = http_err_codes[deny_status];
 	s->logs.tv_request = now;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 	stream_inc_http_err_ctr(s);
 	_HA_ATOMIC_ADD(&sess->fe->fe_counters.denied_req, 1);
 	if (sess->fe != s->be)
@@ -709,7 +709,7 @@
 	txn->req.err_state = txn->req.msg_state;
 	txn->req.msg_state = HTTP_MSG_ERROR;
 	txn->status = 400;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 
 	_HA_ATOMIC_ADD(&sess->fe->fe_counters.failed_req, 1);
 	if (sess->listener->counters)
@@ -735,7 +735,7 @@
  * needs more data, encounters an error, or wants to immediately abort the
  * request. It relies on buffers flags, and updates s->req.analysers.
  */
-int htx_process_request(struct stream *s, struct channel *req, int an_bit)
+int http_process_request(struct stream *s, struct channel *req, int an_bit)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -782,7 +782,7 @@
 			txn->req.msg_state = HTTP_MSG_ERROR;
 			txn->status = 500;
 			req->analysers &= AN_REQ_FLT_END;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 
 			if (!(s->flags & SF_ERR_MASK))
 				s->flags |= SF_ERR_RESOURCE;
@@ -816,7 +816,7 @@
 	 * This should only be performed in the backend.
 	 */
 	if (s->be->cookie_name || sess->fe->capture_name)
-		htx_manage_client_side_cookies(s, req);
+		http_manage_client_side_cookies(s, req);
 
 	/* add unique-id if "header-unique-id" is specified */
 
@@ -972,7 +972,7 @@
 	txn->req.msg_state = HTTP_MSG_ERROR;
 	txn->status = 400;
 	req->analysers &= AN_REQ_FLT_END;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 
 	_HA_ATOMIC_ADD(&sess->fe->fe_counters.failed_req, 1);
 	if (sess->listener->counters)
@@ -989,7 +989,7 @@
  * returns zero, at the beginning because it prevents any other processing
  * from occurring, and at the end because it terminates the request.
  */
-int htx_process_tarpit(struct stream *s, struct channel *req, int an_bit)
+int http_process_tarpit(struct stream *s, struct channel *req, int an_bit)
 {
 	struct http_txn *txn = s->txn;
 
@@ -1012,7 +1012,7 @@
 	s->logs.t_queue = tv_ms_elapsed(&s->logs.tv_accept, &now);
 
 	if (!(req->flags & CF_READ_ERROR))
-		htx_reply_and_close(s, txn->status, htx_error_message(s));
+		http_reply_and_close(s, txn->status, http_error_message(s));
 
 	req->analysers &= AN_REQ_FLT_END;
 	req->analyse_exp = TICK_ETERNITY;
@@ -1033,7 +1033,7 @@
  * HTTP_MSG_CHK_SIZE, HTTP_MSG_DATA or HTTP_MSG_TRAILERS. It returns zero if it
  * needs to read more data, or 1 once it has completed its analysis.
  */
-int htx_wait_for_request_body(struct stream *s, struct channel *req, int an_bit)
+int http_wait_for_request_body(struct stream *s, struct channel *req, int an_bit)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -1065,7 +1065,7 @@
 	 */
 
 	if (msg->msg_state < HTTP_MSG_DATA) {
-		if (htx_handle_expect_hdr(s, htx, msg) == -1)
+		if (http_handle_expect_hdr(s, htx, msg) == -1)
 			goto return_bad_req;
 	}
 
@@ -1081,7 +1081,7 @@
  missing_data:
 	if ((req->flags & CF_READ_TIMEOUT) || tick_is_expired(req->analyse_exp, now_ms)) {
 		txn->status = 408;
-		htx_reply_and_close(s, txn->status, htx_error_message(s));
+		http_reply_and_close(s, txn->status, http_error_message(s));
 
 		if (!(s->flags & SF_ERR_MASK))
 			s->flags |= SF_ERR_CLITO;
@@ -1115,7 +1115,7 @@
 	txn->req.err_state = txn->req.msg_state;
 	txn->req.msg_state = HTTP_MSG_ERROR;
 	txn->status = 400;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 
 	if (!(s->flags & SF_ERR_MASK))
 		s->flags |= SF_ERR_PRXCOND;
@@ -1140,7 +1140,7 @@
  * When in MSG_DATA or MSG_TRAILERS, it will automatically forward chunk_len
  * bytes of pending data + the headers if not already done.
  */
-int htx_request_forward_body(struct stream *s, struct channel *req, int an_bit)
+int http_request_forward_body(struct stream *s, struct channel *req, int an_bit)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -1173,8 +1173,8 @@
 			return 0;
 		msg->err_state = msg->msg_state;
 		msg->msg_state = HTTP_MSG_ERROR;
-		htx_end_request(s);
-		htx_end_response(s);
+		http_end_request(s);
+		http_end_response(s);
 		return 1;
 	}
 
@@ -1256,9 +1256,9 @@
 		}
 	}
 
-	htx_end_request(s);
+	http_end_request(s);
 	if (!(req->analysers & an_bit)) {
-		htx_end_response(s);
+		http_end_response(s);
 		if (unlikely(msg->msg_state == HTTP_MSG_ERROR)) {
 			if (req->flags & CF_SHUTW) {
 				/* request errors are most likely due to the
@@ -1359,10 +1359,10 @@
 	txn->req.msg_state = HTTP_MSG_ERROR;
 	if (txn->status > 0) {
 		/* Note: we don't send any error if some data were already sent */
-		htx_reply_and_close(s, txn->status, NULL);
+		http_reply_and_close(s, txn->status, NULL);
 	} else {
 		txn->status = status;
-		htx_reply_and_close(s, txn->status, htx_error_message(s));
+		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 */
@@ -1421,7 +1421,7 @@
  * when it has nothing left to do, and may remove any analyser when it wants to
  * abort.
  */
-int htx_wait_for_response(struct stream *s, struct channel *rep, int an_bit)
+int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit)
 {
 	/*
 	 * We will analyze a complete HTTP response to check the its syntax.
@@ -1511,7 +1511,7 @@
 			}
 
 			s->si[1].flags |= SI_FL_NOLINGER;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 
 			if (!(s->flags & SF_ERR_MASK))
 				s->flags |= SF_ERR_SRVCL;
@@ -1536,7 +1536,7 @@
 			rep->analysers &= AN_RES_FLT_END;
 			txn->status = 504;
 			s->si[1].flags |= SI_FL_NOLINGER;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 
 			if (!(s->flags & SF_ERR_MASK))
 				s->flags |= SF_ERR_SRVTO;
@@ -1554,7 +1554,7 @@
 
 			rep->analysers &= AN_RES_FLT_END;
 			txn->status = 400;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 
 			if (!(s->flags & SF_ERR_MASK))
 				s->flags |= SF_ERR_CLICL;
@@ -1585,7 +1585,7 @@
 			rep->analysers &= AN_RES_FLT_END;
 			txn->status = 502;
 			s->si[1].flags |= SI_FL_NOLINGER;
-			htx_reply_and_close(s, txn->status, htx_error_message(s));
+			http_reply_and_close(s, txn->status, http_error_message(s));
 
 			if (!(s->flags & SF_ERR_MASK))
 				s->flags |= SF_ERR_SRVCL;
@@ -1630,7 +1630,7 @@
 		     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
 		int32_t pos;
 
-		htx_debug_stline("srvrep", s, sl);
+		http_debug_stline("srvrep", s, sl);
 
 		for (pos = htx_get_first(htx); pos != -1; pos = htx_get_next(htx, pos)) {
 			struct htx_blk *blk = htx_get_blk(htx, pos);
@@ -1641,9 +1641,9 @@
 			if (type != HTX_BLK_HDR)
 				continue;
 
-			htx_debug_hdr("srvhdr", s,
-				  htx_get_blk_name(htx, blk),
-				  htx_get_blk_value(htx, blk));
+			http_debug_hdr("srvhdr", s,
+				       htx_get_blk_name(htx, blk),
+				       htx_get_blk_value(htx, blk));
 		}
 	}
 
@@ -1738,7 +1738,7 @@
 	 */
 	s->logs.logwait &= ~LW_RESP;
 	if (unlikely((s->logs.logwait & LW_RSPHDR) && s->res_cap))
-		htx_capture_headers(htx, s->res_cap, sess->fe->rsp_cap);
+		http_capture_headers(htx, s->res_cap, sess->fe->rsp_cap);
 
 	/* Skip parsing if no content length is possible. */
 	if (unlikely((txn->meth == HTTP_METH_CONNECT && txn->status == 200) ||
@@ -1802,7 +1802,7 @@
 		return 0;
 	txn->status = 502;
 	s->si[1].flags |= SI_FL_NOLINGER;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 	rep->analysers &= AN_RES_FLT_END;
 
 	if (!(s->flags & SF_ERR_MASK))
@@ -1822,7 +1822,7 @@
 	s->logs.logwait = 0;
 	s->logs.level = 0;
 	s->res.flags &= ~CF_EXPECT_MORE; /* speed up sending a previous response */
-	htx_reply_and_close(s, txn->status, NULL);
+	http_reply_and_close(s, txn->status, NULL);
 	return 0;
 }
 
@@ -1831,7 +1831,7 @@
  * and updates s->res.analysers. It might make sense to explode it into several
  * other functions. It works like process_request (see indications above).
  */
-int htx_process_res_common(struct stream *s, struct channel *rep, int an_bit, struct proxy *px)
+int http_process_res_common(struct stream *s, struct channel *rep, int an_bit, struct proxy *px)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -1891,7 +1891,7 @@
 
 		/* evaluate http-response rules */
 		if (ret == HTTP_RULE_RES_CONT) {
-			ret = htx_res_get_intercept_rule(cur_proxy, &cur_proxy->http_res_rules, s);
+			ret = http_res_get_intercept_rule(cur_proxy, &cur_proxy->http_res_rules, s);
 
 			if (ret == HTTP_RULE_RES_BADREQ)
 				goto return_srv_prx_502;
@@ -1911,7 +1911,7 @@
 
 		/* try headers filters */
 		if (rule_set->rsp_exp != NULL) {
-			if (htx_apply_filters_to_response(s, rep, rule_set) < 0)
+			if (http_apply_filters_to_response(s, rep, rule_set) < 0)
 				goto return_bad_resp;
 		}
 
@@ -1969,13 +1969,13 @@
 	 * Now check for a server cookie.
 	 */
 	if (s->be->cookie_name || sess->fe->capture_name || (s->be->options & PR_O_CHK_CACHE))
-		htx_manage_server_side_cookies(s, rep);
+		http_manage_server_side_cookies(s, rep);
 
 	/*
 	 * Check for cache-control or pragma headers if required.
 	 */
 	if ((s->be->options & PR_O_CHK_CACHE) || (s->be->ck_opts & PR_CK_NOC))
-		htx_check_response_for_cacheability(s, rep);
+		http_check_response_for_cacheability(s, rep);
 
 	/*
 	 * Add server cookie in the response if needed
@@ -2115,7 +2115,7 @@
 	txn->status = 502;
 	s->logs.t_data = -1; /* was not a valid response */
 	s->si[1].flags |= SI_FL_NOLINGER;
-	htx_reply_and_close(s, txn->status, htx_error_message(s));
+	http_reply_and_close(s, txn->status, http_error_message(s));
 	if (!(s->flags & SF_ERR_MASK))
 		s->flags |= SF_ERR_PRXCOND;
 	if (!(s->flags & SF_FINST_MASK))
@@ -2152,7 +2152,7 @@
  * is performed at once on final states for all bytes parsed, or when leaving
  * on missing data.
  */
-int htx_response_forward_body(struct stream *s, struct channel *res, int an_bit)
+int http_response_forward_body(struct stream *s, struct channel *res, int an_bit)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -2178,8 +2178,8 @@
 		 */
 		msg->err_state = msg->msg_state;
 		msg->msg_state = HTTP_MSG_ERROR;
-		htx_end_response(s);
-		htx_end_request(s);
+		http_end_response(s);
+		http_end_request(s);
 		return 1;
 	}
 
@@ -2255,9 +2255,9 @@
 		}
 	}
 
-	htx_end_response(s);
+	http_end_response(s);
 	if (!(res->analysers & an_bit)) {
-		htx_end_request(s);
+		http_end_request(s);
 		if (unlikely(msg->msg_state == HTTP_MSG_ERROR)) {
 			if (res->flags & CF_SHUTW) {
 				/* response errors are most likely due to the
@@ -2344,7 +2344,7 @@
 	txn->rsp.err_state = txn->rsp.msg_state;
 	txn->rsp.msg_state = HTTP_MSG_ERROR;
 	/* don't send any error message as we're in the body */
-	htx_reply_and_close(s, txn->status, NULL);
+	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))
@@ -2356,7 +2356,7 @@
  * returns zero on success, or zero in case of a, irrecoverable error such
  * as too large a request to build a valid response.
  */
-int htx_apply_redirect_rule(struct redirect_rule *rule, struct stream *s, struct http_txn *txn)
+int http_apply_redirect_rule(struct redirect_rule *rule, struct stream *s, struct http_txn *txn)
 {
 	struct channel *req = &s->req;
 	struct channel *res = &s->res;
@@ -2592,8 +2592,8 @@
 	return 0;
 }
 
-int htx_transform_header_str(struct stream* s, struct channel *chn, struct htx *htx,
-			     struct ist name, const char *str, struct my_regex *re, int action)
+int http_transform_header_str(struct stream* s, struct channel *chn, struct htx *htx,
+			      struct ist name, const char *str, struct my_regex *re, int action)
 {
 	struct http_hdr_ctx ctx;
 	struct buffer *output = get_trash_chunk();
@@ -2613,8 +2613,8 @@
 	return 0;
 }
 
-static int htx_transform_header(struct stream* s, struct channel *chn, struct htx *htx,
-				const struct ist name, struct list *fmt, struct my_regex *re, int action)
+static int http_transform_header(struct stream* s, struct channel *chn, struct htx *htx,
+				 const struct ist name, struct list *fmt, struct my_regex *re, int action)
 {
 	struct buffer *replace;
 	int ret = -1;
@@ -2627,7 +2627,7 @@
 	if (replace->data >= replace->size - 1)
 		goto leave;
 
-	ret = htx_transform_header_str(s, chn, htx, name, replace->area, re, action);
+	ret = http_transform_header_str(s, chn, htx, name, replace->area, re, action);
 
   leave:
 	free_trash_chunk(replace);
@@ -2638,7 +2638,7 @@
 /* Terminate a 103-Erly-hints response and send it to the client. It returns 0
  * on success and -1 on error. The response channel is updated accordingly.
  */
-static int htx_reply_103_early_hints(struct channel *res)
+static int http_reply_103_early_hints(struct channel *res)
 {
 	struct htx *htx = htx_from_buf(&res->buf);
 	size_t data;
@@ -2663,9 +2663,9 @@
  * If <early_hints> is 0, it is starts a new response by adding the start
  * line. If an error occurred -1 is returned. On success 0 is returned. The
  * channel is not updated here. It must be done calling the function
- * htx_reply_103_early_hints().
+ * http_reply_103_early_hints().
  */
-static int htx_add_early_hint_header(struct stream *s, int early_hints, const struct ist name, struct list *fmt)
+static int http_add_early_hint_header(struct stream *s, int early_hints, const struct ist name, struct list *fmt)
 {
 	struct channel *res = &s->res;
 	struct htx *htx = htx_from_buf(&res->buf);
@@ -2712,8 +2712,8 @@
  * In query string case, the mark question '?' must be set at the start of the
  * string by the caller, event if the replacement query string is empty.
  */
-int htx_req_replace_stline(int action, const char *replace, int len,
-			   struct proxy *px, struct stream *s)
+int http_req_replace_stline(int action, const char *replace, int len,
+			    struct proxy *px, struct stream *s)
 {
 	struct htx *htx = htxbuf(&s->req.buf);
 
@@ -2747,7 +2747,7 @@
 /* This function replace the HTTP status code and the associated message. The
  * variable <status> contains the new status code. This function never fails.
  */
-void htx_res_set_status(unsigned int status, const char *reason, struct stream *s)
+void http_res_set_status(unsigned int status, const char *reason, struct stream *s)
 {
 	struct htx *htx = htxbuf(&s->res.buf);
 	char *res;
@@ -2773,8 +2773,8 @@
  * and a deny/tarpit rule is matched, it will be filled with this rule's deny
  * status.
  */
-static enum rule_result htx_req_get_intercept_rule(struct proxy *px, struct list *rules,
-						   struct stream *s, int *deny_status)
+static enum rule_result http_req_get_intercept_rule(struct proxy *px, struct list *rules,
+						    struct stream *s, int *deny_status)
 {
 	struct session *sess = strm_sess(s);
 	struct http_txn *txn = s->txn;
@@ -2820,7 +2820,7 @@
   resume_execution:
 		if (early_hints && rule->action != ACT_HTTP_EARLY_HINT) {
 			early_hints = 0;
-			if (htx_reply_103_early_hints(&s->res) == -1) {
+			if (http_reply_103_early_hints(&s->res) == -1) {
 				rule_ret = HTTP_RULE_RES_BADREQ;
 				goto end;
 			}
@@ -2858,14 +2858,14 @@
 				 * increase the counter but brute force attempts will.
 				 */
 				rule_ret = HTTP_RULE_RES_ABRT;
-				if (htx_reply_40x_unauthorized(s, auth_realm) == -1)
+				if (http_reply_40x_unauthorized(s, auth_realm) == -1)
 					rule_ret = HTTP_RULE_RES_BADREQ;
 				stream_inc_http_err_ctr(s);
 				goto end;
 
 			case ACT_HTTP_REDIR:
 				rule_ret = HTTP_RULE_RES_DONE;
-				if (!htx_apply_redirect_rule(rule->arg.redir, s, txn))
+				if (!http_apply_redirect_rule(rule->arg.redir, s, txn))
 					rule_ret = HTTP_RULE_RES_BADREQ;
 				goto end;
 
@@ -2887,10 +2887,10 @@
 
 			case ACT_HTTP_REPLACE_HDR:
 			case ACT_HTTP_REPLACE_VAL:
-				if (htx_transform_header(s, &s->req, htx,
-							 ist2(rule->arg.hdr_add.name, rule->arg.hdr_add.name_len),
-							 &rule->arg.hdr_add.fmt,
-							 rule->arg.hdr_add.re, rule->action)) {
+				if (http_transform_header(s, &s->req, htx,
+							  ist2(rule->arg.hdr_add.name, rule->arg.hdr_add.name_len),
+							  &rule->arg.hdr_add.fmt,
+							  rule->arg.hdr_add.re, rule->action)) {
 					rule_ret = HTTP_RULE_RES_BADREQ;
 					goto end;
 				}
@@ -3059,9 +3059,9 @@
 			case ACT_HTTP_EARLY_HINT:
 				if (!(txn->req.flags & HTTP_MSGF_VER_11))
 					break;
-				early_hints = htx_add_early_hint_header(s, early_hints,
-									ist2(rule->arg.early_hint.name, rule->arg.early_hint.name_len),
-									&rule->arg.early_hint.fmt);
+				early_hints = http_add_early_hint_header(s, early_hints,
+									 ist2(rule->arg.early_hint.name, rule->arg.early_hint.name_len),
+									 &rule->arg.early_hint.fmt);
 				if (early_hints == -1) {
 					rule_ret = HTTP_RULE_RES_BADREQ;
 					goto end;
@@ -3143,7 +3143,7 @@
 
   end:
 	if (early_hints) {
-		if (htx_reply_103_early_hints(&s->res) == -1)
+		if (http_reply_103_early_hints(&s->res) == -1)
 			rule_ret = HTTP_RULE_RES_BADREQ;
 	}
 
@@ -3161,8 +3161,8 @@
  * deny rule. If *YIELD is returned, the caller must call again the function
  * with the same context.
  */
-static enum rule_result htx_res_get_intercept_rule(struct proxy *px, struct list *rules,
-						   struct stream *s)
+static enum rule_result http_res_get_intercept_rule(struct proxy *px, struct list *rules,
+						    struct stream *s)
 {
 	struct session *sess = strm_sess(s);
 	struct http_txn *txn = s->txn;
@@ -3232,10 +3232,10 @@
 
 			case ACT_HTTP_REPLACE_HDR:
 			case ACT_HTTP_REPLACE_VAL:
-				if (htx_transform_header(s, &s->res, htx,
-							 ist2(rule->arg.hdr_add.name, rule->arg.hdr_add.name_len),
-							 &rule->arg.hdr_add.fmt,
-							 rule->arg.hdr_add.re, rule->action)) {
+				if (http_transform_header(s, &s->res, htx,
+							  ist2(rule->arg.hdr_add.name, rule->arg.hdr_add.name_len),
+							  &rule->arg.hdr_add.fmt,
+							  rule->arg.hdr_add.re, rule->action)) {
 					rule_ret = HTTP_RULE_RES_BADREQ;
 					goto end;
 				}
@@ -3398,7 +3398,7 @@
 
 			case ACT_HTTP_REDIR:
 				rule_ret = HTTP_RULE_RES_DONE;
-				if (!htx_apply_redirect_rule(rule->arg.redir, s, txn))
+				if (!http_apply_redirect_rule(rule->arg.redir, s, txn))
 					rule_ret = HTTP_RULE_RES_BADREQ;
 				goto end;
 
@@ -3500,7 +3500,7 @@
  * Since it can manage the switch to another backend, it updates the per-proxy
  * DENY stats.
  */
-static int htx_apply_filter_to_req_headers(struct stream *s, struct channel *req, struct hdr_exp *exp)
+static int http_apply_filter_to_req_headers(struct stream *s, struct channel *req, struct hdr_exp *exp)
 {
 	struct http_txn *txn = s->txn;
 	struct htx *htx;
@@ -3596,7 +3596,7 @@
  * Since it can manage the switch to another backend, it updates the per-proxy
  * DENY stats.
  */
-static int htx_apply_filter_to_req_line(struct stream *s, struct channel *req, struct hdr_exp *exp)
+static int http_apply_filter_to_req_line(struct stream *s, struct channel *req, struct hdr_exp *exp)
 {
 	struct http_txn *txn = s->txn;
 	struct htx *htx;
@@ -3617,7 +3617,7 @@
 
 	done = 0;
 
-	reqline->data = htx_fmt_req_line(http_get_stline(htx), reqline->area, reqline->size);
+	reqline->data = http_fmt_req_line(http_get_stline(htx), reqline->area, reqline->size);
 
 	/* Now we have the request line between cur_ptr and cur_end */
 	if (regex_exec_match2(exp->preg, reqline->area, reqline->data, MAX_MATCH, pmatch, 0)) {
@@ -3663,7 +3663,7 @@
  * unparsable request. Since it can manage the switch to another backend, it
  * updates the per-proxy DENY stats.
  */
-static int htx_apply_filters_to_request(struct stream *s, struct channel *req, struct proxy *px)
+static int http_apply_filters_to_request(struct stream *s, struct channel *req, struct proxy *px)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -3700,7 +3700,7 @@
 		}
 
 		/* Apply the filter to the request line. */
-		ret = htx_apply_filter_to_req_line(s, req, exp);
+		ret = http_apply_filter_to_req_line(s, req, exp);
 		if (unlikely(ret < 0))
 			return -1;
 
@@ -3708,7 +3708,7 @@
 			/* The filter did not match the request, it can be
 			 * iterated through all headers.
 			 */
-			if (unlikely(htx_apply_filter_to_req_headers(s, req, exp) < 0))
+			if (unlikely(http_apply_filter_to_req_headers(s, req, exp) < 0))
 				return -1;
 		}
 	}
@@ -3718,7 +3718,7 @@
 /* Iterate the same filter through all response headers contained in <res>.
  * Returns 1 if this filter can be stopped upon return, otherwise 0.
  */
-static int htx_apply_filter_to_resp_headers(struct stream *s, struct channel *res, struct hdr_exp *exp)
+static int http_apply_filter_to_resp_headers(struct stream *s, struct channel *res, struct hdr_exp *exp)
 {
 	struct http_txn *txn = s->txn;
 	struct htx *htx;
@@ -3809,7 +3809,7 @@
  * Returns 0 if nothing has been done, 1 if the filter has been applied,
  * or -1 if a replacement resulted in an invalid status line.
  */
-static int htx_apply_filter_to_sts_line(struct stream *s, struct channel *res, struct hdr_exp *exp)
+static int http_apply_filter_to_sts_line(struct stream *s, struct channel *res, struct hdr_exp *exp)
 {
 	struct http_txn *txn = s->txn;
 	struct htx *htx;
@@ -3828,7 +3828,7 @@
 		return 0;
 
 	done = 0;
-	resline->data = htx_fmt_res_line(http_get_stline(htx), resline->area, resline->size);
+	resline->data = http_fmt_res_line(http_get_stline(htx), resline->area, resline->size);
 
 	/* Now we have the status line between cur_ptr and cur_end */
 	if (regex_exec_match2(exp->preg, resline->area, resline->data, MAX_MATCH, pmatch, 0)) {
@@ -3869,7 +3869,7 @@
  * Returns 0 if everything is alright, or -1 in case a replacement lead to an
  * unparsable response.
  */
-static int htx_apply_filters_to_response(struct stream *s, struct channel *res, struct proxy *px)
+static int http_apply_filters_to_response(struct stream *s, struct channel *res, struct proxy *px)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -3907,7 +3907,7 @@
 		}
 
 		/* Apply the filter to the status line. */
-		ret = htx_apply_filter_to_sts_line(s, res, exp);
+		ret = http_apply_filter_to_sts_line(s, res, exp);
 		if (unlikely(ret < 0))
 			return -1;
 
@@ -3915,7 +3915,7 @@
 			/* The filter did not match the response, it can be
 			 * iterated through all headers.
 			 */
-			if (unlikely(htx_apply_filter_to_resp_headers(s, res, exp) < 0))
+			if (unlikely(http_apply_filter_to_resp_headers(s, res, exp) < 0))
 				return -1;
 		}
 	}
@@ -3928,7 +3928,7 @@
  * of the multiple very crappy and ambiguous syntaxes we have to support. it
  * highly recommended not to touch this part without a good reason !
  */
-static void htx_manage_client_side_cookies(struct stream *s, struct channel *req)
+static void http_manage_client_side_cookies(struct stream *s, struct channel *req)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -4053,7 +4053,7 @@
 				 */
 				preserve_hdr = 1;
 				if (del_from != NULL) {
-					int delta = htx_del_hdr_value(hdr_beg, hdr_end, &del_from, prev);
+					int delta = http_del_hdr_value(hdr_beg, hdr_end, &del_from, prev);
 					val_end  += delta;
 					next     += delta;
 					hdr_end  += delta;
@@ -4283,7 +4283,7 @@
 				preserve_hdr = 1;
 
 				if (del_from != NULL) {
-					int delta = htx_del_hdr_value(hdr_beg, hdr_end, &del_from, prev);
+					int delta = http_del_hdr_value(hdr_beg, hdr_end, &del_from, prev);
 					if (att_beg >= del_from)
 						att_beg += delta;
 					if (att_end >= del_from)
@@ -4326,7 +4326,7 @@
  * desirable to call it only when needed. This function is also used when we
  * just need to know if there is a cookie (eg: for check-cache).
  */
-static void htx_manage_server_side_cookies(struct stream *s, struct channel *res)
+static void http_manage_server_side_cookies(struct stream *s, struct channel *res)
 {
 	struct session *sess = s->sess;
 	struct http_txn *txn = s->txn;
@@ -4547,7 +4547,7 @@
 						 */
 					} else {
 						/* just remove the value */
-						int delta = htx_del_hdr_value(hdr_beg, hdr_end, &prev, next);
+						int delta = http_del_hdr_value(hdr_beg, hdr_end, &prev, next);
 						next      = prev;
 						hdr_end  += delta;
 					}
@@ -4606,7 +4606,7 @@
  * the request may be served from the cache and/or if it is cacheable. Updates
  * s->txn->flags.
  */
-void htx_check_request_for_cacheability(struct stream *s, struct channel *req)
+void http_check_request_for_cacheability(struct stream *s, struct channel *req)
 {
 	struct http_txn *txn = s->txn;
 	struct htx *htx;
@@ -4692,7 +4692,7 @@
 /*
  * Check if response is cacheable or not. Updates s->txn->flags.
  */
-void htx_check_response_for_cacheability(struct stream *s, struct channel *res)
+void http_check_response_for_cacheability(struct stream *s, struct channel *res)
 {
 	struct http_txn *txn = s->txn;
 	struct htx *htx;
@@ -4774,7 +4774,7 @@
  * scheduled for being forwarded. This is the reason why the number of forwarded
  * bytes have to be adjusted.
  */
-int htx_send_name_header(struct stream *s, struct proxy *be, const char *srv_name)
+int http_send_name_header(struct stream *s, struct proxy *be, const char *srv_name)
 {
 	struct htx *htx;
 	struct http_hdr_ctx ctx;
@@ -4808,7 +4808,7 @@
  *
  * Returns 1 if stats should be provided, otherwise 0.
  */
-static int htx_stats_check_uri(struct stream *s, struct http_txn *txn, struct proxy *backend)
+static int http_stats_check_uri(struct stream *s, struct http_txn *txn, struct proxy *backend)
 {
 	struct uri_auth *uri_auth = backend->uri_auth;
 	struct htx *htx;
@@ -4843,7 +4843,7 @@
  * s->target which is supposed to already point to the stats applet. The caller
  * is expected to have already assigned an appctx to the stream.
  */
-static int htx_handle_stats(struct stream *s, struct channel *req)
+static int http_handle_stats(struct stream *s, struct channel *req)
 {
 	struct stats_admin_rule *stats_admin_rule;
 	struct stream_interface *si = &s->si[1];
@@ -4992,7 +4992,7 @@
 	return 1;
 }
 
-void htx_perform_server_redirect(struct stream *s, struct stream_interface *si)
+void http_perform_server_redirect(struct stream *s, struct stream_interface *si)
 {
 	struct channel *req = &s->req;
 	struct channel *res = &s->res;
@@ -5087,7 +5087,7 @@
 /* This function terminates the request because it was completly analyzed or
  * because an error was triggered during the body forwarding.
  */
-static void htx_end_request(struct stream *s)
+static void http_end_request(struct stream *s)
 {
 	struct channel *chn = &s->req;
 	struct http_txn *txn = s->txn;
@@ -5221,7 +5221,7 @@
 /* This function terminates the response because it was completly analyzed or
  * because an error was triggered during the body forwarding.
  */
-static void htx_end_response(struct stream *s)
+static void http_end_response(struct stream *s)
 {
 	struct channel *chn = &s->res;
 	struct http_txn *txn = s->txn;
@@ -5326,8 +5326,8 @@
 	channel_auto_read(chn);
 }
 
-void htx_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)
 {
 	channel_auto_read(si_oc(si));
 	channel_abort(si_oc(si));
@@ -5355,7 +5355,7 @@
 		s->flags |= finst;
 }
 
-void htx_reply_and_close(struct stream *s, short status, struct buffer *msg)
+void http_reply_and_close(struct stream *s, short status, struct buffer *msg)
 {
 	channel_auto_read(&s->req);
 	channel_abort(&s->req);
@@ -5386,7 +5386,7 @@
 	channel_shutr_now(&s->res);
 }
 
-struct buffer *htx_error_message(struct stream *s)
+struct buffer *http_error_message(struct stream *s)
 {
 	const int msgnum = http_get_status_idx(s->txn->status);
 
@@ -5409,7 +5409,7 @@
  * Note that connection errors appearing on the second request of a keep-alive
  * connection are not reported since this allows the client to retry.
  */
-void htx_return_srv_error(struct stream *s, struct stream_interface *si)
+void http_return_srv_error(struct stream *s, struct stream_interface *si)
 {
 	int err_type = si->err_type;
 
@@ -5417,34 +5417,34 @@
 	s->txn->status = 503;
 
 	if (err_type & SI_ET_QUEUE_ABRT)
-		htx_server_error(s, si, SF_ERR_CLICL, SF_FINST_Q,
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_CLICL, SF_FINST_Q,
+				  http_error_message(s));
 	else if (err_type & SI_ET_CONN_ABRT)
-		htx_server_error(s, si, SF_ERR_CLICL, SF_FINST_C,
-				 (s->txn->flags & TX_NOT_FIRST) ? NULL :
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_CLICL, SF_FINST_C,
+				  (s->txn->flags & TX_NOT_FIRST) ? NULL :
+				  http_error_message(s));
 	else if (err_type & SI_ET_QUEUE_TO)
-		htx_server_error(s, si, SF_ERR_SRVTO, SF_FINST_Q,
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_SRVTO, SF_FINST_Q,
+				  http_error_message(s));
 	else if (err_type & SI_ET_QUEUE_ERR)
-		htx_server_error(s, si, SF_ERR_SRVCL, SF_FINST_Q,
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_SRVCL, SF_FINST_Q,
+				  http_error_message(s));
 	else if (err_type & SI_ET_CONN_TO)
-		htx_server_error(s, si, SF_ERR_SRVTO, SF_FINST_C,
-				 (s->txn->flags & TX_NOT_FIRST) ? NULL :
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_SRVTO, SF_FINST_C,
+				  (s->txn->flags & TX_NOT_FIRST) ? NULL :
+				  http_error_message(s));
 	else if (err_type & SI_ET_CONN_ERR)
-		htx_server_error(s, si, SF_ERR_SRVCL, SF_FINST_C,
-				 (s->flags & SF_SRV_REUSED) ? NULL :
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_SRVCL, SF_FINST_C,
+				  (s->flags & SF_SRV_REUSED) ? NULL :
+				  http_error_message(s));
 	else if (err_type & SI_ET_CONN_RES)
-		htx_server_error(s, si, SF_ERR_RESOURCE, SF_FINST_C,
-				 (s->txn->flags & TX_NOT_FIRST) ? NULL :
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_RESOURCE, SF_FINST_C,
+				  (s->txn->flags & TX_NOT_FIRST) ? NULL :
+				  http_error_message(s));
 	else { /* SI_ET_CONN_OTHER and others */
 		s->txn->status = 500;
-		htx_server_error(s, si, SF_ERR_INTERNAL, SF_FINST_C,
-				 htx_error_message(s));
+		http_server_error(s, si, SF_ERR_INTERNAL, SF_FINST_C,
+				  http_error_message(s));
 	}
 }
 
@@ -5452,7 +5452,7 @@
 /* Handle Expect: 100-continue for HTTP/1.1 messages if necessary. It returns 0
  * on success and -1 on error.
  */
-static int htx_handle_expect_hdr(struct stream *s, struct htx *htx, struct http_msg *msg)
+static int http_handle_expect_hdr(struct stream *s, struct htx *htx, struct http_msg *msg)
 {
 	/* If we have HTTP/1.1 message with a body and Expect: 100-continue,
 	 * then we must send an HTTP/1.1 100 Continue intermediate response.
@@ -5466,7 +5466,7 @@
 		/* Expect is allowed in 1.1, look for it */
 		if (http_find_header(htx, hdr, &ctx, 0) &&
 		    unlikely(isteqi(ctx.value, ist2("100-continue", 12)))) {
-			if (htx_reply_100_continue(s) == -1)
+			if (http_reply_100_continue(s) == -1)
 				return -1;
 			http_remove_header(htx, &ctx);
 		}
@@ -5477,7 +5477,7 @@
 /* Send a 100-Continue response to the client. It returns 0 on success and -1
  * on error. The response channel is updated accordingly.
  */
-static int htx_reply_100_continue(struct stream *s)
+static int http_reply_100_continue(struct stream *s)
 {
 	struct channel *res = &s->res;
 	struct htx *htx = htx_from_buf(&res->buf);
@@ -5512,7 +5512,7 @@
  * ont whether we use a proxy or not. It returns 0 on success and -1 on
  * error. The response channel is updated accordingly.
  */
-static int htx_reply_40x_unauthorized(struct stream *s, const char *auth_realm)
+static int http_reply_40x_unauthorized(struct stream *s, const char *auth_realm)
 {
 	struct channel *res = &s->res;
 	struct htx *htx = htx_from_buf(&res->buf);
@@ -5596,7 +5596,7 @@
  * Capture headers from message <htx> according to header list <cap_hdr>, and
  * fill the <cap> pointers appropriately.
  */
-static void htx_capture_headers(struct htx *htx, char **cap, struct cap_hdr *cap_hdr)
+static void http_capture_headers(struct htx *htx, char **cap, struct cap_hdr *cap_hdr)
 {
 	struct cap_hdr *h;
 	int32_t pos;
@@ -5653,7 +5653,7 @@
  *   - <next> points to a valid delimiter or <end> ;
  *   - there are non-space chars before <from>.
  */
-static int htx_del_hdr_value(char *start, char *end, char **from, char *next)
+static int http_del_hdr_value(char *start, char *end, char **from, char *next)
 {
 	char *prev = *from;
 
@@ -5691,7 +5691,7 @@
 /* Formats the start line of the request (without CRLF) and puts it in <str> and
  * return the written length. The line can be truncated if it exceeds <len>.
  */
-static size_t htx_fmt_req_line(const struct htx_sl *sl, char *str, size_t len)
+static size_t http_fmt_req_line(const struct htx_sl *sl, char *str, size_t len)
 {
 	struct ist dst = ist2(str, 0);
 
@@ -5715,7 +5715,7 @@
 /* Formats the start line of the response (without CRLF) and puts it in <str> and
  * return the written length. The line can be truncated if it exceeds <len>.
  */
-static size_t htx_fmt_res_line(const struct htx_sl *sl, char *str, size_t len)
+static size_t http_fmt_res_line(const struct htx_sl *sl, char *str, size_t len)
 {
 	struct ist dst = ist2(str, 0);
 
@@ -5740,7 +5740,7 @@
 /*
  * Print a debug line with a start line.
  */
-static void htx_debug_stline(const char *dir, struct stream *s, const struct htx_sl *sl)
+static void http_debug_stline(const char *dir, struct stream *s, const struct htx_sl *sl)
 {
         struct session *sess = strm_sess(s);
         int max;
@@ -5771,7 +5771,7 @@
 /*
  * Print a debug line with a header.
  */
-static void htx_debug_hdr(const char *dir, struct stream *s, const struct ist n, const struct ist v)
+static void http_debug_hdr(const char *dir, struct stream *s, const struct ist n, const struct ist v)
 {
         struct session *sess = strm_sess(s);
         int max;
@@ -5955,7 +5955,7 @@
 DECLARE_POOL(pool_head_uniqueid, "uniqueid", UNIQUEID_LEN);
 
 __attribute__((constructor))
-static void __htx_protocol_init(void)
+static void __http_protocol_init(void)
 {
 }
 
diff --git a/src/http_fetch.c b/src/http_fetch.c
index cdf1c0e..08e71f4 100644
--- a/src/http_fetch.c
+++ b/src/http_fetch.c
@@ -38,7 +38,7 @@
 #include <proto/http_htx.h>
 #include <proto/log.h>
 #include <proto/obj_type.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 #include <proto/stream.h>
 
diff --git a/src/http_rules.c b/src/http_rules.c
index 5089200..b790c5f 100644
--- a/src/http_rules.c
+++ b/src/http_rules.c
@@ -33,7 +33,7 @@
 #include <proto/action.h>
 #include <proto/arg.h>
 #include <proto/http_rules.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 
 
diff --git a/src/payload.c b/src/payload.c
index f9b5fe0..5665794 100644
--- a/src/payload.c
+++ b/src/payload.c
@@ -22,7 +22,7 @@
 #include <proto/pattern.h>
 #include <proto/payload.h>
 #include <proto/sample.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 
 
 /************************************************************************/
diff --git a/src/proto_http.c b/src/proto_http.c
deleted file mode 100644
index 1b4e0aa..0000000
--- a/src/proto_http.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * HTTP protocol analyzer
- *
- * Copyright 2000-2011 Willy Tarreau <w@1wt.eu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- *
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <common/base64.h>
-#include <common/cfgparse.h>
-#include <common/chunk.h>
-#include <common/compat.h>
-#include <common/config.h>
-#include <common/debug.h>
-#include <common/h1.h>
-#include <common/memory.h>
-#include <common/mini-clist.h>
-#include <common/standard.h>
-#include <common/ticks.h>
-#include <common/time.h>
-#include <common/uri_auth.h>
-#include <common/version.h>
-
-#include <types/capture.h>
-#include <types/cli.h>
-#include <types/filters.h>
-#include <types/global.h>
-#include <types/stats.h>
-
-#include <proto/acl.h>
-#include <proto/action.h>
-#include <proto/arg.h>
-#include <proto/auth.h>
-#include <proto/backend.h>
-#include <proto/channel.h>
-#include <proto/checks.h>
-#include <proto/cli.h>
-#include <proto/compression.h>
-#include <proto/dns.h>
-#include <proto/stats.h>
-#include <proto/fd.h>
-#include <proto/filters.h>
-#include <proto/frontend.h>
-#include <proto/log.h>
-#include <proto/hlua.h>
-#include <proto/pattern.h>
-#include <proto/proto_tcp.h>
-#include <proto/proto_http.h>
-#include <proto/proxy.h>
-#include <proto/queue.h>
-#include <proto/sample.h>
-#include <proto/server.h>
-#include <proto/session.h>
-#include <proto/stream.h>
-#include <proto/stream_interface.h>
-#include <proto/task.h>
-#include <proto/pattern.h>
-#include <proto/vars.h>
-
-/*
- * Local variables:
- *  c-indent-level: 8
- *  c-basic-offset: 8
- * End:
- */
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 4ca6fc2..a99febf 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -53,7 +53,7 @@
 #include <proto/log.h>
 #include <proto/port_range.h>
 #include <proto/protocol.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proto_tcp.h>
 #include <proto/proxy.h>
 #include <proto/sample.h>
diff --git a/src/proxy.c b/src/proxy.c
index 3012233..de54f0b 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -44,7 +44,7 @@
 #include <proto/listener.h>
 #include <proto/log.h>
 #include <proto/proto_tcp.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/server.h>
 #include <proto/signal.h>
diff --git a/src/queue.c b/src/queue.c
index f4a9453..1c09482 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -77,7 +77,7 @@
 #include <eb32tree.h>
 
 #include <proto/http_rules.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/queue.h>
 #include <proto/sample.h>
 #include <proto/server.h>
diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index 3ddacb6..62b85d1 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -77,7 +77,7 @@
 #include <proto/listener.h>
 #include <proto/pattern.h>
 #include <proto/proto_tcp.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/server.h>
 #include <proto/stream_interface.h>
 #include <proto/log.h>
diff --git a/src/stick_table.c b/src/stick_table.c
index 4b04f18..746cda3 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -33,7 +33,7 @@
 #include <proto/cli.h>
 #include <proto/http_rules.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proto_tcp.h>
 #include <proto/proxy.h>
 #include <proto/sample.h>
diff --git a/src/stream.c b/src/stream.c
index 918da5e..e240551 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -54,7 +54,7 @@
 #include <proto/session.h>
 #include <proto/stream.h>
 #include <proto/pipe.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/proxy.h>
 #include <proto/queue.h>
 #include <proto/server.h>
@@ -2072,20 +2072,20 @@
 				/* Warning! ensure that analysers are always placed in ascending order! */
 				ANALYZE    (s, req, flt_start_analyze,          ana_list, ana_back, AN_REQ_FLT_START_FE);
 				FLT_ANALYZE(s, req, tcp_inspect_request,        ana_list, ana_back, AN_REQ_INSPECT_FE);
-				FLT_ANALYZE(s, req, htx_wait_for_request,       ana_list, ana_back, AN_REQ_WAIT_HTTP);
-				FLT_ANALYZE(s, req, htx_wait_for_request_body,  ana_list, ana_back, AN_REQ_HTTP_BODY);
-				FLT_ANALYZE(s, req, htx_process_req_common,     ana_list, ana_back, AN_REQ_HTTP_PROCESS_FE, sess->fe);
+				FLT_ANALYZE(s, req, http_wait_for_request,      ana_list, ana_back, AN_REQ_WAIT_HTTP);
+				FLT_ANALYZE(s, req, http_wait_for_request_body, ana_list, ana_back, AN_REQ_HTTP_BODY);
+				FLT_ANALYZE(s, req, http_process_req_common,    ana_list, ana_back, AN_REQ_HTTP_PROCESS_FE, sess->fe);
 				FLT_ANALYZE(s, req, process_switching_rules,    ana_list, ana_back, AN_REQ_SWITCHING_RULES);
 				ANALYZE    (s, req, flt_start_analyze,          ana_list, ana_back, AN_REQ_FLT_START_BE);
 				FLT_ANALYZE(s, req, tcp_inspect_request,        ana_list, ana_back, AN_REQ_INSPECT_BE);
-				FLT_ANALYZE(s, req, htx_process_req_common,     ana_list, ana_back, AN_REQ_HTTP_PROCESS_BE, s->be);
-				FLT_ANALYZE(s, req, htx_process_tarpit,         ana_list, ana_back, AN_REQ_HTTP_TARPIT);
+				FLT_ANALYZE(s, req, http_process_req_common,    ana_list, ana_back, AN_REQ_HTTP_PROCESS_BE, s->be);
+				FLT_ANALYZE(s, req, http_process_tarpit,        ana_list, ana_back, AN_REQ_HTTP_TARPIT);
 				FLT_ANALYZE(s, req, process_server_rules,       ana_list, ana_back, AN_REQ_SRV_RULES);
-				FLT_ANALYZE(s, req, htx_process_request,        ana_list, ana_back, AN_REQ_HTTP_INNER);
+				FLT_ANALYZE(s, req, http_process_request,       ana_list, ana_back, AN_REQ_HTTP_INNER);
 				FLT_ANALYZE(s, req, tcp_persist_rdp_cookie,     ana_list, ana_back, AN_REQ_PRST_RDP_COOKIE);
 				FLT_ANALYZE(s, req, process_sticking_rules,     ana_list, ana_back, AN_REQ_STICKING_RULES);
 				ANALYZE    (s, req, flt_analyze_http_headers,   ana_list, ana_back, AN_REQ_FLT_HTTP_HDRS);
-				ANALYZE    (s, req, htx_request_forward_body,   ana_list, ana_back, AN_REQ_HTTP_XFER_BODY);
+				ANALYZE    (s, req, http_request_forward_body,  ana_list, ana_back, AN_REQ_HTTP_XFER_BODY);
 				ANALYZE    (s, req, pcli_wait_for_request,      ana_list, ana_back, AN_REQ_WAIT_CLI);
 				ANALYZE    (s, req, flt_xfer_data,              ana_list, ana_back, AN_REQ_FLT_XFER_DATA);
 				ANALYZE    (s, req, flt_end_analyze,            ana_list, ana_back, AN_REQ_FLT_END);
@@ -2150,11 +2150,11 @@
 				ANALYZE    (s, res, flt_start_analyze,          ana_list, ana_back, AN_RES_FLT_START_FE);
 				ANALYZE    (s, res, flt_start_analyze,          ana_list, ana_back, AN_RES_FLT_START_BE);
 				FLT_ANALYZE(s, res, tcp_inspect_response,       ana_list, ana_back, AN_RES_INSPECT);
-				FLT_ANALYZE(s, res, htx_wait_for_response,      ana_list, ana_back, AN_RES_WAIT_HTTP);
+				FLT_ANALYZE(s, res, http_wait_for_response,     ana_list, ana_back, AN_RES_WAIT_HTTP);
 				FLT_ANALYZE(s, res, process_store_rules,        ana_list, ana_back, AN_RES_STORE_RULES);
-				FLT_ANALYZE(s, res, htx_process_res_common,     ana_list, ana_back, AN_RES_HTTP_PROCESS_BE, s->be);
+				FLT_ANALYZE(s, res, http_process_res_common,    ana_list, ana_back, AN_RES_HTTP_PROCESS_BE, s->be);
 				ANALYZE    (s, res, flt_analyze_http_headers,   ana_list, ana_back, AN_RES_FLT_HTTP_HDRS);
-				ANALYZE    (s, res, htx_response_forward_body,  ana_list, ana_back, AN_RES_HTTP_XFER_BODY);
+				ANALYZE    (s, res, http_response_forward_body, ana_list, ana_back, AN_RES_HTTP_XFER_BODY);
 				ANALYZE    (s, res, pcli_wait_for_response,     ana_list, ana_back, AN_RES_WAIT_CLI);
 				ANALYZE    (s, res, flt_xfer_data,              ana_list, ana_back, AN_RES_FLT_XFER_DATA);
 				ANALYZE    (s, res, flt_end_analyze,            ana_list, ana_back, AN_RES_FLT_END);
@@ -2392,12 +2392,12 @@
 			    (s->be->server_id_hdr_name != NULL) &&
 			    (s->be->mode == PR_MODE_HTTP) &&
 			    objt_server(s->target)) {
-				htx_send_name_header(s, s->be, objt_server(s->target)->id);
+				http_send_name_header(s, s->be, objt_server(s->target)->id);
 			}
 
 			srv = objt_server(s->target);
 			if (si_b->state == SI_ST_ASS && srv && srv->rdr_len && (s->flags & SF_REDIRECTABLE))
-				htx_perform_server_redirect(s, si_b);
+				http_perform_server_redirect(s, si_b);
 		} while (si_b->state == SI_ST_ASS);
 	}
 
diff --git a/src/vars.c b/src/vars.c
index 49ff672..b2a2b7e 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -9,7 +9,7 @@
 
 #include <proto/arg.h>
 #include <proto/http_rules.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/sample.h>
 #include <proto/stream.h>
 #include <proto/tcp_rules.h>
diff --git a/src/wurfl.c b/src/wurfl.c
index 7206a1e..1e702c0 100644
--- a/src/wurfl.c
+++ b/src/wurfl.c
@@ -9,7 +9,7 @@
 #include <types/global.h>
 #include <proto/arg.h>
 #include <proto/log.h>
-#include <proto/proto_http.h>
+#include <proto/http_ana.h>
 #include <proto/http_fetch.h>
 #include <proto/http_htx.h>
 #include <proto/sample.h>
