MAJOR: http: remove references to appsession

appsessions started to be deprecated with the introduction of stick
tables, and the latter are much more powerful and flexible, and in
addition they are replicated between nodes and maintained across
reloads. Let's now remove appsession completely.
diff --git a/include/proto/proto_http.h b/include/proto/proto_http.h
index 5f1ac1f..c9ccddd 100644
--- a/include/proto/proto_http.h
+++ b/include/proto/proto_http.h
@@ -78,12 +78,10 @@
 int http_response_forward_body(struct stream *s, struct channel *res, int an_bit);
 
 void debug_hdr(const char *dir, struct stream *s, const char *start, const char *end);
-void get_srv_from_appsession(struct stream *s, const char *begin, int len);
 int apply_filter_to_req_headers(struct stream *s, struct channel *req, struct hdr_exp *exp);
 int apply_filter_to_req_line(struct stream *s, struct channel *req, struct hdr_exp *exp);
 int apply_filters_to_request(struct stream *s, struct channel *req, struct proxy *px);
 int apply_filters_to_response(struct stream *s, struct channel *rtr, struct proxy *px);
-void manage_client_side_appsession(struct stream *s, const char *buf, int len);
 void manage_client_side_cookies(struct stream *s, struct channel *req);
 void manage_server_side_cookies(struct stream *s, struct channel *rtr);
 void check_response_for_cacheability(struct stream *s, struct channel *rtr);
diff --git a/src/proto_http.c b/src/proto_http.c
index c7ed011..4cb9483 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -25,7 +25,6 @@
 
 #include <netinet/tcp.h>
 
-#include <common/appsession.h>
 #include <common/base64.h>
 #include <common/chunk.h>
 #include <common/compat.h>
@@ -4531,20 +4530,10 @@
 	 * the fields will stay coherent and the URI will not move.
 	 * This should only be performed in the backend.
 	 */
-	if ((s->be->cookie_name || s->be->appsession_name || sess->fe->capture_name)
+	if ((s->be->cookie_name || sess->fe->capture_name)
 	    && !(txn->flags & (TX_CLDENY|TX_CLTARPIT)))
 		manage_client_side_cookies(s, req);
 
-	/*
-	 * 8: the appsession cookie was looked up very early in 1.2,
-	 * so let's do the same now.
-	 */
-
-	/* It needs to look into the URI unless persistence must be ignored */
-	if ((txn->sessid == NULL) && s->be->appsession_name && !(s->flags & SF_IGNORE_PRST)) {
-		get_srv_from_appsession(s, req->buf->p + msg->sl.rq.u, msg->sl.rq.u_l);
-	}
-
 	/* add unique-id if "header-unique-id" is specified */
 
 	if (!LIST_ISEMPTY(&sess->fe->format_unique_id)) {
@@ -6639,8 +6628,7 @@
 	/*
 	 * Now check for a server cookie.
 	 */
-	if (s->be->cookie_name || s->be->appsession_name || sess->fe->capture_name ||
-	    (s->be->options & PR_O_CHK_CACHE))
+	if (s->be->cookie_name || sess->fe->capture_name || (s->be->options & PR_O_CHK_CACHE))
 		manage_server_side_cookies(s, rep);
 
 	/*
@@ -7387,81 +7375,6 @@
 	return 0;
 }
 
-
-
-/*
- * Try to retrieve the server associated to the appsession.
- * If the server is found, it's assigned to the stream.
- */
-void manage_client_side_appsession(struct stream *s, const char *buf, int len) {
-	struct http_txn *txn = s->txn;
-	appsess *asession = NULL;
-	char *sessid_temp = NULL;
-
-	if (len > s->be->appsession_len) {
-		len = s->be->appsession_len;
-	}
-
-	if (s->be->options2 & PR_O2_AS_REQL) {
-		/* request-learn option is enabled : store the sessid in the stream for future use */
-		if (txn->sessid != NULL) {
-			/* free previously allocated memory as we don't need the stream id found in the URL anymore */
-			pool_free2(apools.sessid, txn->sessid);
-		}
-
-		if ((txn->sessid = pool_alloc2(apools.sessid)) == NULL) {
-			Alert("Not enough memory process_cli():asession->sessid:malloc().\n");
-			send_log(s->be, LOG_ALERT, "Not enough memory process_cli():asession->sessid:malloc().\n");
-			return;
-		}
-
-		memcpy(txn->sessid, buf, len);
-		txn->sessid[len] = 0;
-	}
-
-	if ((sessid_temp = pool_alloc2(apools.sessid)) == NULL) {
-		Alert("Not enough memory process_cli():asession->sessid:malloc().\n");
-		send_log(s->be, LOG_ALERT, "Not enough memory process_cli():asession->sessid:malloc().\n");
-		return;
-	}
-
-	memcpy(sessid_temp, buf, len);
-	sessid_temp[len] = 0;
-
-	asession = appsession_hash_lookup(&(s->be->htbl_proxy), sessid_temp);
-	/* free previously allocated memory */
-	pool_free2(apools.sessid, sessid_temp);
-
-	if (asession != NULL) {
-		asession->expire = tick_add_ifset(now_ms, s->be->timeout.appsession);
-		if (!(s->be->options2 & PR_O2_AS_REQL))
-			asession->request_count++;
-
-		if (asession->serverid != NULL) {
-			struct server *srv = s->be->srv;
-
-			while (srv) {
-				if (strcmp(srv->id, asession->serverid) == 0) {
-					if ((srv->state != SRV_ST_STOPPED) ||
-					    (s->be->options & PR_O_PERSIST) ||
-					    (s->flags & SF_FORCE_PRST)) {
-						/* we found the server and it's usable */
-						txn->flags &= ~TX_CK_MASK;
-						txn->flags |= (srv->state != SRV_ST_STOPPED) ? TX_CK_VALID : TX_CK_DOWN;
-						s->flags |= SF_DIRECT | SF_ASSIGNED;
-						s->target = &srv->obj_type;
-
-						break;
-					} else {
-						txn->flags &= ~TX_CK_MASK;
-						txn->flags |= TX_CK_DOWN;
-					}
-				}
-				srv = srv->next;
-			}
-		}
-	}
-}
 
 /* Find the end of a cookie value contained between <s> and <e>. It works the
  * same way as with headers above except that the semi-colon also ends a token.
@@ -7933,28 +7846,6 @@
 				}
 			}
 
-			/* Look for the appsession cookie unless persistence must be ignored */
-			if (!(s->flags & SF_IGNORE_PRST) && (s->be->appsession_name != NULL)) {
-				int cmp_len, value_len;
-				char *value_begin;
-
-				if (s->be->options2 & PR_O2_AS_PFX) {
-					cmp_len     = MIN(val_end - att_beg, s->be->appsession_name_len);
-					value_begin = att_beg + s->be->appsession_name_len;
-					value_len   = val_end - att_beg - s->be->appsession_name_len;
-				} else {
-					cmp_len     = att_end - att_beg;
-					value_begin = val_beg;
-					value_len   = val_end - val_beg;
-				}
-
-				/* let's see if the cookie is our appcookie */
-				if (cmp_len == s->be->appsession_name_len &&
-				    memcmp(att_beg, s->be->appsession_name, cmp_len) == 0) {
-					manage_client_side_appsession(s, value_begin, value_len);
-				}
-			}
-
 			/* continue with next cookie on this header line */
 			att_beg = next;
 		} /* for each cookie */
@@ -8271,9 +8162,7 @@
 		 * check-cache is enabled) and we are not interested in checking
 		 * them. Warning, the cookie capture is declared in the frontend.
 		 */
-		if (s->be->cookie_name == NULL &&
-		    s->be->appsession_name == NULL &&
-		    sess->fe->capture_name == NULL)
+		if (s->be->cookie_name == NULL && sess->fe->capture_name == NULL)
 			return;
 
 		/* OK so now we know we have to process this response cookie.
@@ -8500,36 +8389,6 @@
 					txn->flags |= TX_SCK_REPLACED;
 				}
 			}
-			/* next, let's see if the cookie is our appcookie, unless persistence must be ignored */
-			else if (!(s->flags & SF_IGNORE_PRST) && (s->be->appsession_name != NULL)) {
-				int cmp_len, value_len;
-				char *value_begin;
-
-				if (s->be->options2 & PR_O2_AS_PFX) {
-					cmp_len = MIN(val_end - att_beg, s->be->appsession_name_len);
-					value_begin = att_beg + s->be->appsession_name_len;
-					value_len = MIN(s->be->appsession_len, val_end - att_beg - s->be->appsession_name_len);
-				} else {
-					cmp_len = att_end - att_beg;
-					value_begin = val_beg;
-					value_len = MIN(s->be->appsession_len, val_end - val_beg);
-				}
-
-				if ((cmp_len == s->be->appsession_name_len) &&
-				    (memcmp(att_beg, s->be->appsession_name, s->be->appsession_name_len) == 0)) {
-					/* free a possibly previously allocated memory */
-					pool_free2(apools.sessid, txn->sessid);
-
-					/* Store the sessid in the stream for future use */
-					if ((txn->sessid = pool_alloc2(apools.sessid)) == NULL) {
-						Alert("Not enough Memory process_srv():asession->sessid:malloc().\n");
-						send_log(s->be, LOG_ALERT, "Not enough Memory process_srv():asession->sessid:malloc().\n");
-						return;
-					}
-					memcpy(txn->sessid, value_begin, value_len);
-					txn->sessid[value_len] = 0;
-				}
-			}
 			/* that's done for this cookie, check the next one on the same
 			 * line when next != hdr_end (only if is_cookie2).
 			 */
@@ -8537,46 +8396,6 @@
 		/* check next header */
 		old_idx = cur_idx;
 	}
-
-	if (txn->sessid != NULL) {
-		appsess *asession = NULL;
-		/* only do insert, if lookup fails */
-		asession = appsession_hash_lookup(&(s->be->htbl_proxy), txn->sessid);
-		if (asession == NULL) {
-			size_t server_id_len;
-			if ((asession = pool_alloc2(pool2_appsess)) == NULL) {
-				Alert("Not enough Memory process_srv():asession:calloc().\n");
-				send_log(s->be, LOG_ALERT, "Not enough Memory process_srv():asession:calloc().\n");
-				return;
-			}
-			asession->serverid = NULL; /* to avoid a double free in case of allocation error */
-
-			if ((asession->sessid = pool_alloc2(apools.sessid)) == NULL) {
-				Alert("Not enough Memory process_srv():asession->sessid:malloc().\n");
-				send_log(s->be, LOG_ALERT, "Not enough Memory process_srv():asession->sessid:malloc().\n");
-				s->be->htbl_proxy.destroy(asession);
-				return;
-			}
-			memcpy(asession->sessid, txn->sessid, s->be->appsession_len);
-			asession->sessid[s->be->appsession_len] = 0;
-
-			server_id_len = strlen(objt_server(s->target)->id) + 1;
-			if ((asession->serverid = pool_alloc2(apools.serverid)) == NULL) {
-				Alert("Not enough Memory process_srv():asession->serverid:malloc().\n");
-				send_log(s->be, LOG_ALERT, "Not enough Memory process_srv():asession->sessid:malloc().\n");
-				s->be->htbl_proxy.destroy(asession);
-				return;
-			}
-			asession->serverid[0] = '\0';
-			memcpy(asession->serverid, objt_server(s->target)->id, server_id_len);
-
-			asession->request_count = 0;
-			appsession_hash_insert(&(s->be->htbl_proxy), asession);
-		}
-
-		asession->expire = tick_add_ifset(now_ms, s->be->timeout.appsession);
-		asession->request_count++;
-	}
 }
 
 
@@ -8667,78 +8486,6 @@
 	}
 }
 
-
-/*
- * Try to retrieve a known appsession in the URI, then the associated server.
- * If the server is found, it's assigned to the stream.
- */
-void get_srv_from_appsession(struct stream *s, const char *begin, int len)
-{
-	char *end_params, *first_param, *cur_param, *next_param;
-	char separator;
-	int value_len;
-
-	int mode = s->be->options2 & PR_O2_AS_M_ANY;
-
-	if (s->be->appsession_name == NULL ||
-	    (s->txn->meth != HTTP_METH_GET && s->txn->meth != HTTP_METH_POST && s->txn->meth != HTTP_METH_HEAD)) {
-		return;
-	}
-
-	first_param = NULL;
-	switch (mode) {
-	case PR_O2_AS_M_PP:
-		first_param = memchr(begin, ';', len);
-		break;
-	case PR_O2_AS_M_QS:
-		first_param = memchr(begin, '?', len);
-		break;
-	}
-
-	if (first_param == NULL) {
-		return;
-	}
-
-	switch (mode) {
-	case PR_O2_AS_M_PP:
-		if ((end_params = memchr(first_param, '?', len - (begin - first_param))) == NULL) {
-			end_params = (char *) begin + len;
-		}
-		separator = ';';
-		break;
-	case PR_O2_AS_M_QS:
-		end_params = (char *) begin + len;
-		separator = '&';
-		break;
-	default:
-		/* unknown mode, shouldn't happen */
-		return;
-	}
-	
-	cur_param = next_param = end_params;
-	while (cur_param > first_param) {
-		cur_param--;
-		if ((cur_param[0] == separator) || (cur_param == first_param)) {
-			/* let's see if this is the appsession parameter */
-			if ((cur_param + s->be->appsession_name_len + 1 < next_param) &&
-				((s->be->options2 & PR_O2_AS_PFX) || cur_param[s->be->appsession_name_len + 1] == '=') &&
-				(strncasecmp(cur_param + 1, s->be->appsession_name, s->be->appsession_name_len) == 0)) {
-				/* Cool... it's the right one */
-				cur_param += s->be->appsession_name_len + (s->be->options2 & PR_O2_AS_PFX ? 1 : 2);
-				value_len = MIN(s->be->appsession_len, next_param - cur_param);
-				if (value_len > 0) {
-					manage_client_side_appsession(s, cur_param, value_len);
-				}
-				break;
-			}
-			next_param = cur_param;
-		}
-	}
-#if defined(DEBUG_HASH)
-	Alert("get_srv_from_appsession\n");
-	appsession_hash_dump(&(s->be->htbl_proxy));
-#endif
-}
 
 /*
  * In a GET, HEAD or POST request, check if the requested URI matches the stats uri
@@ -9021,7 +8768,6 @@
 	txn->cookie_first_date = 0;
 	txn->cookie_last_date = 0;
 
-	txn->sessid = NULL;
 	txn->srv_cookie = NULL;
 	txn->cli_cookie = NULL;
 	txn->uri = NULL;
@@ -9070,11 +8816,9 @@
 	pool_free2(pool2_requri, txn->uri);
 	pool_free2(pool2_capture, txn->cli_cookie);
 	pool_free2(pool2_capture, txn->srv_cookie);
-	pool_free2(apools.sessid, txn->sessid);
 	pool_free2(pool2_uniqueid, s->unique_id);
 
 	s->unique_id = NULL;
-	txn->sessid = NULL;
 	txn->uri = NULL;
 	txn->srv_cookie = NULL;
 	txn->cli_cookie = NULL;