[MEDIUM] reference and index appended request headers

When headers are appended to the end of a request, they must
be indexed.
diff --git a/src/proto_http.c b/src/proto_http.c
index bb4ebc3..859e69b 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -946,6 +946,10 @@
 		for (cur_hdr = 0; cur_hdr < t->fi->nb_reqadd; cur_hdr++) {
 			int len = sprintf(trash, "%s\r\n", t->fi->req_add[cur_hdr]);
 			buffer_replace2(req, req->h, req->h, trash, len);
+			if (hdr_idx_add(len - 2, 1, t->hdr_idx, t->hdr_idx.tail) < 0) {
+				t->hdr_state = HTTP_PA_ERROR;
+				break;
+			}
 		}
 
 
@@ -960,6 +964,10 @@
 				len = sprintf(trash, "X-Forwarded-For: %d.%d.%d.%d\r\n",
 					      pn[0], pn[1], pn[2], pn[3]);
 				buffer_replace2(req, req->h, req->h, trash, len);
+				if (hdr_idx_add(len - 2, 1, t->hdr_idx, t->hdr_idx.tail) < 0) {
+					t->hdr_state = HTTP_PA_ERROR;
+					break;
+				}
 			}
 			else if (t->cli_addr.ss_family == AF_INET6) {
 				int len;
@@ -969,6 +977,10 @@
 					  pn, sizeof(pn));
 				len = sprintf(trash, "X-Forwarded-For: %s\r\n", pn);
 				buffer_replace2(req, req->h, req->h, trash, len);
+				if (hdr_idx_add(len - 2, 1, t->hdr_idx, t->hdr_idx.tail) < 0) {
+					t->hdr_state = HTTP_PA_ERROR;
+					break;
+				}
 			}
 		}
 
@@ -978,10 +990,26 @@
 		 */
 
 		/* add a "connection: close" line if needed */
-		if (t->fe->options & PR_O_HTTP_CLOSE)
+		if (t->fe->options & PR_O_HTTP_CLOSE) {
 			buffer_replace2(req, req->h, req->h, "Connection: close\r\n", 19);
+			if (hdr_idx_add(17, 1, t->hdr_idx, t->hdr_idx.tail) < 0) {
+				t->hdr_state = HTTP_PA_ERROR;
+				break;
+			}
+		}
 
 
+		/*
+		 * 10: We can now check whether we want to switch to another
+		 * backend, in which case we will re-check the backend's filters
+		 * and various options.
+		 *
+		 */
+
+
+
+
+
 		/*************************************************************
 		 * OK, that's finished for the headers. We have done what we *
 		 * could. Let's switch to the DATA state.                    *
@@ -2952,6 +2980,10 @@
 						int len, delta;
 						len = exp_replace(trash, cur_ptr, exp->replace, pmatch);
 						delta = buffer_replace2(req, cur_ptr, cur_end, trash, len);
+						/* FIXME: if the user adds a newline in the replacement, the
+						 * index will not be recalculated for now, and the new line
+						 * will not be counted for a new header.
+						 */
 						cur_end += delta;
 						cur_next += delta;
 						cur_hdr->len += delta;