MAJOR: stick-tables: remove key storage from the key struct

Now, the key struct only points to the storage provided by the
sample as input.
diff --git a/src/stream.c b/src/stream.c
index 5280e37..278bdb8 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -2597,11 +2597,20 @@
 	else if (num > 9) { /* src_* variant, args[0] = table */
 		struct stktable_key *key;
 		struct connection *conn = objt_conn(sess->origin);
+		struct sample smp;
 
 		if (!conn)
 			return NULL;
 
-		key = addr_to_stktable_key(&conn->addr.from, args->data.prx->table.type);
+		/* Fetch source adress in a sample. */
+		smp.px = NULL;
+		smp.sess = sess;
+		smp.strm = strm;
+		if (!smp_fetch_src(NULL, &smp, NULL, NULL))
+			return NULL;
+
+		/* Converts into key. */
+		key = smp_to_stkey(&smp, &args->data.prx->table);
 		if (!key)
 			return NULL;
 
@@ -2647,6 +2656,7 @@
 	static struct stkctr stkctr;
 	struct stktable_key *key;
 	struct connection *conn = objt_conn(sess->origin);
+	struct sample smp;
 
 	if (strncmp(kw, "src_", 4) != 0)
 		return NULL;
@@ -2654,7 +2664,15 @@
 	if (!conn)
 		return NULL;
 
+	/* Fetch source adress in a sample. */
+	smp.px = NULL;
+	smp.sess = sess;
+	smp.strm = strm;
+	if (!smp_fetch_src(NULL, &smp, NULL, NULL))
+		return NULL;
+
-	key = addr_to_stktable_key(&conn->addr.from, args->data.prx->table.type);
+	/* Converts into key. */
+	key = smp_to_stkey(&smp, &args->data.prx->table);
 	if (!key)
 		return NULL;
 
@@ -2867,7 +2885,12 @@
 	if (!conn)
 		return 0;
 
+	/* Fetch source adress in a sample. */
+	if (!smp_fetch_src(NULL, smp, NULL, NULL))
+		return 0;
+
-	key = addr_to_stktable_key(&conn->addr.from, smp->px->table.type);
+	/* Converts into key. */
+	key = smp_to_stkey(smp, &args->data.prx->table);
 	if (!key)
 		return 0;