MINOR: h1: Change the union h1_sl to use indirect strings to store infos

Instead of using offsets relating to the parsed buffer to store start line
infos, we now use indirect strings. So now, these infos remain valid only if the
origin buffer remains untouched. But it's not a real problem because this union
is used during the parsing and never stored to a later use.
diff --git a/include/types/h1.h b/include/types/h1.h
index c6645fa..af5c896 100644
--- a/include/types/h1.h
+++ b/include/types/h1.h
@@ -23,6 +23,7 @@
 #define _TYPES_H1_H
 
 #include <common/http.h>
+#include <common/ist.h>
 
 /* Legacy version of the HTTP/1 message state, used by the channels, should
  * ultimately be removed.
@@ -177,15 +178,15 @@
 /* basic H1 start line, describes either the request and the response */
 union h1_sl {                          /* useful start line pointers, relative to ->sol */
 	struct {
-		int m, m_l;            /* METHOD, length */
-		int u, u_l;            /* URI, length */
-		int v, v_l;            /* VERSION, length */
+		struct ist m;          /* METHOD */
+		struct ist u;          /* URI */
+		struct ist v;          /* VERSION */
 		enum http_meth_t meth; /* method */
 	} rq;                          /* request line : field, length */
 	struct {
-		int v, v_l;            /* VERSION, length */
-		int c, c_l;            /* CODE, length */
-		int r, r_l;            /* REASON, length */
+		struct ist v;          /* VERSION */
+		struct ist c;          /* CODE */
+		struct ist r;          /* REASON */
 		uint16_t status;       /* status code */
 	} st;                          /* status line : field, length */
 };
diff --git a/src/h1.c b/src/h1.c
index 660e7fd..e3efd59 100644
--- a/src/h1.c
+++ b/src/h1.c
@@ -904,7 +904,7 @@
 			start = ptr;
 
 			sol = 0;
-			sl.rq.m = skip;
+			sl.rq.m.ptr = ptr;
 			hdr_count = 0;
 			state = H1_MSG_RQMETH;
 			goto http_msg_rqmeth;
@@ -932,22 +932,22 @@
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rqmeth, http_msg_ood, state, H1_MSG_RQMETH);
 
 		if (likely(HTTP_IS_SPHT(*ptr))) {
-			sl.rq.m_l = ptr - start;
-			sl.rq.meth = find_http_meth(start, sl.rq.m_l);
+			sl.rq.m.len = ptr - sl.rq.m.ptr;
+			sl.rq.meth = find_http_meth(start, sl.rq.m.len);
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rqmeth_sp, http_msg_ood, state, H1_MSG_RQMETH_SP);
 		}
 
 		if (likely(HTTP_IS_CRLF(*ptr))) {
 			/* HTTP 0.9 request */
-			sl.rq.m_l = ptr - start;
-			sl.rq.meth = find_http_meth(start, sl.rq.m_l);
+			sl.rq.m.len = ptr - sl.rq.m.ptr;
+			sl.rq.meth = find_http_meth(sl.rq.m.ptr, sl.rq.m.len);
 		http_msg_req09_uri:
-			sl.rq.u = ptr - start + skip;
+			sl.rq.u.ptr = ptr;
 		http_msg_req09_uri_e:
-			sl.rq.u_l = ptr - start + skip - sl.rq.u;
+			sl.rq.u.len = ptr - sl.rq.u.ptr;
 		http_msg_req09_ver:
-			sl.rq.v = ptr - start + skip;
-			sl.rq.v_l = 0;
+			sl.rq.v.ptr = ptr;
+			sl.rq.v.len = 0;
 			goto http_msg_rqline_eol;
 		}
 		state = H1_MSG_RQMETH;
@@ -956,7 +956,7 @@
 	case H1_MSG_RQMETH_SP:
 	http_msg_rqmeth_sp:
 		if (likely(!HTTP_IS_LWS(*ptr))) {
-			sl.rq.u = ptr - start + skip;
+			sl.rq.u.ptr = ptr;
 			goto http_msg_rquri;
 		}
 		if (likely(HTTP_IS_SPHT(*ptr)))
@@ -991,7 +991,7 @@
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rquri2, http_msg_ood, state, H1_MSG_RQURI);
 
 		if (likely(HTTP_IS_SPHT(*ptr))) {
-			sl.rq.u_l = ptr - start + skip - sl.rq.u;
+			sl.rq.u.len = ptr - sl.rq.u.ptr;
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rquri_sp, http_msg_ood, state, H1_MSG_RQURI_SP);
 		}
 		if (likely((unsigned char)*ptr >= 128)) {
@@ -1019,7 +1019,7 @@
 	case H1_MSG_RQURI_SP:
 	http_msg_rquri_sp:
 		if (likely(!HTTP_IS_LWS(*ptr))) {
-			sl.rq.v = ptr - start + skip;
+			sl.rq.v.ptr = ptr;
 			goto http_msg_rqver;
 		}
 		if (likely(HTTP_IS_SPHT(*ptr)))
@@ -1034,7 +1034,7 @@
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rqver, http_msg_ood, state, H1_MSG_RQVER);
 
 		if (likely(HTTP_IS_CRLF(*ptr))) {
-			sl.rq.v_l = ptr - start + skip - sl.rq.v;
+			sl.rq.v.len = ptr - sl.rq.v.ptr;
 		http_msg_rqline_eol:
 			/* We have seen the end of line. Note that we do not
 			 * necessarily have the \n yet, but at least we know that we
@@ -1044,22 +1044,22 @@
 			 */
 
 			if (likely(!skip_update)) {
-				if ((sl.rq.v_l == 8) &&
-				    ((start[sl.rq.v + 5] > '1') ||
-				     ((start[sl.rq.v + 5] == '1') && (start[sl.rq.v + 7] >= '1'))))
+				if ((sl.rq.v.len == 8) &&
+				    (*(sl.rq.v.ptr + 5) > '1' ||
+				     (*(sl.rq.v.ptr + 5) == '1' && *(sl.rq.v.ptr + 7) >= '1')))
 					h1m->flags |= H1_MF_VER_11;
 
 				if (unlikely(hdr_count >= hdr_num)) {
 					state = H1_MSG_RQVER;
 					goto http_output_full;
 				}
-				http_set_hdr(&hdr[hdr_count++], ist(":method"), ist2(start + sl.rq.m, sl.rq.m_l));
+				http_set_hdr(&hdr[hdr_count++], ist(":method"), sl.rq.m);
 
 				if (unlikely(hdr_count >= hdr_num)) {
 					state = H1_MSG_RQVER;
 					goto http_output_full;
 				}
-				http_set_hdr(&hdr[hdr_count++], ist(":path"), ist2(start + sl.rq.u, sl.rq.u_l));
+				http_set_hdr(&hdr[hdr_count++], ist(":path"), sl.rq.u);
 			}
 
 			sol = ptr - start;
@@ -1083,7 +1083,7 @@
 		if (restarting)
 			goto restart;
 
-		if (unlikely(sl.rq.v_l == 0))
+		if (unlikely(sl.rq.v.len == 0))
 			goto http_msg_last_lf;
 
 		EXPECT_LF_HERE(ptr, http_msg_invalid, state, H1_MSG_RQLINE_END);
@@ -1103,7 +1103,7 @@
 			start = ptr;
 
 			sol = 0;
-			sl.st.v = skip;
+			sl.st.v.ptr = ptr;
 			hdr_count = 0;
 			state = H1_MSG_RPVER;
 			goto http_msg_rpver;
@@ -1131,11 +1131,11 @@
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rpver, http_msg_ood, state, H1_MSG_RPVER);
 
 		if (likely(HTTP_IS_SPHT(*ptr))) {
-			sl.st.v_l = ptr - start;
+			sl.st.v.len = ptr - sl.st.v.ptr;
 
-			if ((sl.st.v_l == 8) &&
-			    ((start[sl.st.v + 5] > '1') ||
-			     ((start[sl.st.v + 5] == '1') && (start[sl.st.v + 7] >= '1'))))
+			if ((sl.st.v.len == 8) &&
+			    (*(sl.st.v.ptr + 5) > '1' ||
+			     (*(sl.st.v.ptr + 5) == '1' && *(sl.st.v.ptr + 7) >= '1')))
 				h1m->flags |= H1_MF_VER_11;
 
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rpver_sp, http_msg_ood, state, H1_MSG_RPVER_SP);
@@ -1147,7 +1147,7 @@
 	http_msg_rpver_sp:
 		if (likely(!HTTP_IS_LWS(*ptr))) {
 			sl.st.status = 0;
-			sl.st.c = ptr - start + skip;
+			sl.st.c.ptr = ptr;
 			goto http_msg_rpcode;
 		}
 		if (likely(HTTP_IS_SPHT(*ptr)))
@@ -1169,22 +1169,22 @@
 		}
 
 		if (likely(HTTP_IS_SPHT(*ptr))) {
-			sl.st.c_l = ptr - start + skip - sl.st.c;
+			sl.st.c.len = ptr - sl.st.c.ptr;
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rpcode_sp, http_msg_ood, state, H1_MSG_RPCODE_SP);
 		}
 
 		/* so it's a CR/LF, so there is no reason phrase */
-		sl.st.c_l = ptr - start + skip - sl.st.c;
+		sl.st.c.len = ptr - sl.st.c.ptr;
 
 	http_msg_rsp_reason:
-		sl.st.r = ptr - start + skip;
-		sl.st.r_l = 0;
+		sl.st.r.ptr = ptr;
+		sl.st.r.len = 0;
 		goto http_msg_rpline_eol;
 
 	case H1_MSG_RPCODE_SP:
 	http_msg_rpcode_sp:
 		if (likely(!HTTP_IS_LWS(*ptr))) {
-			sl.st.r = ptr - start + skip;
+			sl.st.r.ptr = ptr;
 			goto http_msg_rpreason;
 		}
 		if (likely(HTTP_IS_SPHT(*ptr)))
@@ -1196,7 +1196,7 @@
 	http_msg_rpreason:
 		if (likely(!HTTP_IS_CRLF(*ptr)))
 			EAT_AND_JUMP_OR_RETURN(ptr, end, http_msg_rpreason, http_msg_ood, state, H1_MSG_RPREASON);
-		sl.st.r_l = ptr - start + skip - sl.st.r;
+		sl.st.r.len = ptr - sl.st.r.ptr;
 	http_msg_rpline_eol:
 		/* We have seen the end of line. Note that we do not
 		 * necessarily have the \n yet, but at least we know that we
@@ -1210,7 +1210,7 @@
 				state = H1_MSG_RPREASON;
 				goto http_output_full;
 			}
-			http_set_hdr(&hdr[hdr_count++], ist(":status"), ist2(start + sl.st.c, sl.st.c_l));
+			http_set_hdr(&hdr[hdr_count++], ist(":status"), sl.st.c);
 		}
 
 		sol = ptr - start;