CLEANUP: tcp: stop exporting smp_fetch_src()

This is totally ugly, smp_fetch_src() is exported only so that stick_table.c
can (ab)use it in the {sc,src}_* sample fetch functions. It could be argued
that the sample could have been reconstructed there in place, but we don't
even need to duplicate the code. We'd rather simply retrieve the "src"
fetch's function from where it's used at init time and be done with it.
diff --git a/src/stick_table.c b/src/stick_table.c
index 121ad07..69bd7ad 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -45,6 +45,7 @@
 
 /* structure used to return a table key built from a sample */
 static THREAD_LOCAL struct stktable_key static_table_key;
+static int (*smp_fetch_src)(const struct arg *, struct sample *, const char *, void *);
 
 struct stktable *stktables_list;
 struct eb_root stktable_by_name = EB_ROOT;
@@ -2211,7 +2212,7 @@
 		smp.px = NULL;
 		smp.sess = sess;
 		smp.strm = strm;
-		if (!smp_fetch_src(NULL, &smp, NULL, NULL))
+		if (!smp_fetch_src || !smp_fetch_src(NULL, &smp, NULL, NULL))
 			return NULL;
 
 		/* Converts into key. */
@@ -2276,7 +2277,7 @@
 	smp.px = NULL;
 	smp.sess = sess;
 	smp.strm = strm;
-	if (!smp_fetch_src(NULL, &smp, NULL, NULL))
+	if (!smp_fetch_src || !smp_fetch_src(NULL, &smp, NULL, NULL))
 		return NULL;
 
 	/* Converts into key. */
@@ -2808,7 +2809,7 @@
 		return 0;
 
 	/* Fetch source address in a sample. */
-	if (!smp_fetch_src(NULL, smp, NULL, NULL))
+	if (!smp_fetch_src || !smp_fetch_src(NULL, smp, NULL, NULL))
 		return 0;
 
 	/* Converts into key. */
@@ -3856,6 +3857,17 @@
 	}
 }
 
+static void stkt_late_init(void)
+{
+	struct sample_fetch *f;
+
+	f = find_sample_fetch("src", strlen("src"));
+	if (f)
+		smp_fetch_src = f->process;
+}
+
+INITCALL0(STG_INIT, stkt_late_init);
+
 /* register cli keywords */
 static struct cli_kw_list cli_kws = {{ },{
 	{ { "clear", "table", NULL }, "clear table    : remove an entry from a table", cli_parse_table_req, cli_io_handler_table, cli_release_show_table, (void *)STK_CLI_ACT_CLR },