[MAJOR] http: implement body parser

The body parser will be used in close and keep-alive modes. It follows
the stream to keep in sync with both the request and the response message.
Both chunked transfer-coding and content-length are supported according to
RFC2616.

The multipart/byterange encoding has not yet been implemented and if not
seconded by any of the two other ones, will be forwarded till the close,
as requested by the specification.

Both the request and the response analysers converge into an HTTP_MSG_DONE
state where it will be possible to force a close (option forceclose) or to
restart with a fresh new transaction and maintain keep-alive.

This change is important. All tests are OK but any possible behaviour
change with "option httpclose" might find its root here.
diff --git a/include/proto/proto_http.h b/include/proto/proto_http.h
index 50d5957..f4a57a5 100644
--- a/include/proto/proto_http.h
+++ b/include/proto/proto_http.h
@@ -68,6 +68,8 @@
 int http_process_request_body(struct session *s, struct buffer *req, int an_bit);
 int http_wait_for_response(struct session *s, struct buffer *rep, int an_bit);
 int http_process_res_common(struct session *t, struct buffer *rep, int an_bit, struct proxy *px);
+int http_request_forward_body(struct session *s, struct buffer *req, int an_bit);
+int http_response_forward_body(struct session *s, struct buffer *res, int an_bit);
 
 void debug_hdr(const char *dir, struct session *t, const char *start, const char *end);
 void get_srv_from_appsession(struct session *t, const char *begin, int len);
diff --git a/include/types/buffers.h b/include/types/buffers.h
index 322f21e..fd078fa 100644
--- a/include/types/buffers.h
+++ b/include/types/buffers.h
@@ -142,12 +142,14 @@
 #define AN_REQ_HTTP_BODY        0x00000080  /* inspect HTTP request body */
 /* unused: 0x100, 0x200 */
 #define AN_REQ_PRST_RDP_COOKIE  0x00000400  /* persistence on rdp cookie */
+#define AN_REQ_HTTP_XFER_BODY   0x00000800  /* forward request body */
 
 /* response analysers */
 #define AN_RES_INSPECT          0x00010000  /* content inspection */
 #define AN_RES_WAIT_HTTP        0x00020000  /* wait for HTTP response */
 #define AN_RES_HTTP_PROCESS_BE  0x00040000  /* process backend's HTTP part */
 #define AN_RES_HTTP_PROCESS_FE  0x00040000  /* process frontend's HTTP part (same for now) */
+#define AN_RES_HTTP_XFER_BODY   0x00100000  /* forward response body */
 
 
 /* Magic value to forward infinite size (TCP, ...), used with ->to_forward */