REORG: http: move the HTTP semantics definitions to http.h/http.c

It's a bit painful to have to deal with HTTP semantics for each protocol
version (H1 and H2), and working on the version-agnostic code further
emphasizes the problem.

This patch creates http.h and http.c which are agnostic to the version
in use, and which borrow a few parts from proto_http and from h1. For
example the once thought h1-specific h1_char_classes array is in fact
dictated by RFC7231 and is used to parse HTTP headers. A few changes
were made to a few files which were including proto_http.h while they
only needed http.h.

Certain string definitions pre-dated the introduction of indirect
strings (ist) so some were used to simplify the definition of the known
HTTP methods. The current lookup code saves 2 kB of a heavily used table
and is faster than the previous table based lookup (typ. 14 ns vs 16
before).
diff --git a/include/types/hlua.h b/include/types/hlua.h
index 5a8173f..4fb6309 100644
--- a/include/types/hlua.h
+++ b/include/types/hlua.h
@@ -8,6 +8,7 @@
 
 #include <common/xref.h>
 
+#include <types/h1.h>
 #include <types/proxy.h>
 #include <types/server.h>
 
diff --git a/include/types/proto_http.h b/include/types/proto_http.h
index 9c39056..5cb0589 100644
--- a/include/types/proto_http.h
+++ b/include/types/proto_http.h
@@ -22,8 +22,9 @@
 #ifndef _TYPES_PROTO_HTTP_H
 #define _TYPES_PROTO_HTTP_H
 
-#include <common/chunk.h>
+#include <common/buf.h>
 #include <common/config.h>
+#include <common/http.h>
 #include <common/mini-clist.h>
 #include <common/regex.h>
 
@@ -31,7 +32,7 @@
 #include <types/h1.h>
 #include <types/hdr_idx.h>
 #include <types/filters.h>
-#include <types/sample.h>
+//#include <types/sample.h>
 
 /* These are the flags that are found in txn->flags */
 
@@ -170,13 +171,6 @@
 	PERSIST_TYPE_IGNORE,            /* ignore-persist */
 };
 
-enum ht_auth_m {
-	HTTP_AUTH_WRONG		= -1,		/* missing or unknown */
-	HTTP_AUTH_UNKNOWN	= 0,
-	HTTP_AUTH_BASIC,
-	HTTP_AUTH_DIGEST,
-} __attribute__((packed));
-
 /* final results for http-request rules */
 enum rule_result {
 	HTTP_RULE_RES_CONT = 0,  /* nothing special, continue rules evaluation */
@@ -188,25 +182,6 @@
 	HTTP_RULE_RES_BADREQ,    /* bad request */
 };
 
-/*
- * All implemented return codes
- */
-enum {
-	HTTP_ERR_200 = 0,
-	HTTP_ERR_400,
-	HTTP_ERR_403,
-	HTTP_ERR_405,
-	HTTP_ERR_408,
-	HTTP_ERR_421,
-	HTTP_ERR_425,
-	HTTP_ERR_429,
-	HTTP_ERR_500,
-	HTTP_ERR_502,
-	HTTP_ERR_503,
-	HTTP_ERR_504,
-	HTTP_ERR_SIZE
-};
-
 /* status codes available for the stats admin page */
 enum {
 	STAT_STATUS_INIT = 0,
@@ -298,13 +273,6 @@
 	unsigned long long body_len;           /* total known length of the body, excluding encoding */
 };
 
-struct http_auth_data {
-	enum ht_auth_m method;                /* one of HTTP_AUTH_* */
-	/* 7 bytes unused here */
-	struct buffer method_data;             /* points to the creditial part from 'Authorization:' header */
-	char *user, *pass;                    /* extracted username & password */
-};
-
 struct proxy;
 struct http_txn;
 struct stream;
@@ -349,16 +317,9 @@
 	int  prev; /* index of previous header */
 };
 
-struct http_method_name {
-	char *name;
-	int len;
-};
-
 extern struct action_kw_list http_req_keywords;
 extern struct action_kw_list http_res_keywords;
 
-extern const struct http_method_name http_known_methods[HTTP_METH_OTHER];
-
 extern struct pool_head *pool_head_http_txn;
 
 #endif /* _TYPES_PROTO_HTTP_H */
diff --git a/include/types/proxy.h b/include/types/proxy.h
index 2d1b881..70bfeee 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -29,6 +29,7 @@
 
 #include <common/chunk.h>
 #include <common/config.h>
+#include <common/http.h>
 #include <common/mini-clist.h>
 #include <common/regex.h>
 #include <common/tools.h>
@@ -45,7 +46,6 @@
 #include <types/listener.h>
 #include <types/log.h>
 #include <types/obj_type.h>
-#include <types/proto_http.h>
 #include <types/sample.h>
 #include <types/server.h>
 #include <types/stick_table.h>
diff --git a/include/types/sample.h b/include/types/sample.h
index 987a099..015c5ae 100644
--- a/include/types/sample.h
+++ b/include/types/sample.h
@@ -26,7 +26,8 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 
-#include <common/chunk.h>
+#include <common/buf.h>
+#include <common/http.h>
 #include <common/mini-clist.h>
 
 struct arg;
@@ -210,19 +211,6 @@
 struct session;
 struct stream;
 
-/* Known HTTP methods */
-enum http_meth_t {
-	HTTP_METH_OPTIONS,
-	HTTP_METH_GET,
-	HTTP_METH_HEAD,
-	HTTP_METH_POST,
-	HTTP_METH_PUT,
-	HTTP_METH_DELETE,
-	HTTP_METH_TRACE,
-	HTTP_METH_CONNECT,
-	HTTP_METH_OTHER, /* Must be the last entry */
-} __attribute__((packed));
-
 /* a sample context might be used by any sample fetch function in order to
  * store information needed across multiple calls (eg: restart point for a
  * next occurrence). By definition it may store up to 8 pointers, or any
@@ -242,17 +230,12 @@
  * sample will automatically be duplicated when a change larger than <len> has
  * to be performed. Thus it is safe to always set size to zero.
  */
-struct meth {
-	enum http_meth_t meth;
-	struct buffer str;
-};
-
 union sample_value {
 	long long int   sint;  /* used for signed 64bits integers */
 	struct in_addr  ipv4;  /* used for ipv4 addresses */
 	struct in6_addr ipv6;  /* used for ipv6 addresses */
 	struct buffer    str;   /* used for char strings or buffers */
-	struct meth     meth;  /* used for http method */
+	struct http_meth meth;  /* used for http method */
 };
 
 /* Used to store sample constant */