MINOR: spoa-server: Allow registering external processes

Add struct for declaring an reistrering external processing resource.
diff --git a/contrib/spoa_server/spoa.c b/contrib/spoa_server/spoa.c
index 3766c47..6645c8c 100644
--- a/contrib/spoa_server/spoa.c
+++ b/contrib/spoa_server/spoa.c
@@ -97,6 +97,13 @@
 
 bool debug = false;
 pthread_key_t worker_id;
+static struct ps *ps_list = NULL;
+
+void ps_register(struct ps *ps)
+{
+	ps->next = ps_list;
+	ps_list = ps;
+}
 
 static void
 check_ipv4_reputation(struct worker *w, struct in_addr *ipv4)
@@ -925,10 +932,15 @@
 	struct sockaddr_in client;
 	int *info = (int *)data;
 	int csock, lsock = info[0];
+	struct ps *ps;
 
 	signal(SIGPIPE, SIG_IGN);
 	pthread_setspecific(worker_id, &info[1]);
 
+	/* Init registered processors */
+	for (ps = ps_list; ps != NULL; ps = ps->next)
+		ps->init_worker(&w);
+
 	while (1) {
 		socklen_t sz = sizeof(client);
 
diff --git a/contrib/spoa_server/spoa.h b/contrib/spoa_server/spoa.h
index 92c24ac..c8f9861 100644
--- a/contrib/spoa_server/spoa.h
+++ b/contrib/spoa_server/spoa.h
@@ -80,9 +80,22 @@
 	union spoe_value    u;     /* spoe data value */
 };
 
+struct spoe_kv {
+	struct chunk name;
+	struct spoe_data value;
+};
+
+struct ps {
+	struct ps *next;
+	char *ext;
+	int (*init_worker)(struct worker *w);
+};
+
 extern bool debug;
 extern pthread_key_t worker_id;
 
+void ps_register(struct ps *ps);
+
 #define LOG(fmt, args...) \
 	do { \
 		struct timeval now; \