REORG: include: move stick_table.h to haproxy/stick_table{,-t}.h

The stktable_types[] array declaration was moved to the main file as
it had nothing to do in the types. A few declarations were reordered
in the types file so that defines were before the structs. Thread-t
was added since there are a few __decl_thread(). The loss of peers.h
revealed that cfgparse-listen needed it.
diff --git a/include/types/proxy.h b/include/types/proxy.h
index 5ba68c7..7579d8a 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -46,7 +46,7 @@
 #include <types/log.h>
 #include <haproxy/sample-t.h>
 #include <types/server.h>
-#include <types/stick_table.h>
+#include <haproxy/stick_table-t.h>
 
 /* values for proxy->state */
 enum pr_state {
diff --git a/include/types/session.h b/include/types/session.h
index 559e786..3942d62 100644
--- a/include/types/session.h
+++ b/include/types/session.h
@@ -33,7 +33,7 @@
 #include <haproxy/obj_type-t.h>
 #include <haproxy/vars-t.h>
 
-#include <types/stick_table.h>
+#include <haproxy/stick_table-t.h>
 #include <haproxy/task-t.h>
 
 struct sess_srv_list {
diff --git a/include/types/stick_table.h b/include/types/stick_table.h
deleted file mode 100644
index 2918381..0000000
--- a/include/types/stick_table.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * include/types/stick_table.h
- * Macros, variables and structures for stick tables management.
- *
- * Copyright (C) 2009-2010 EXCELIANCE, Emeric Brun <ebrun@exceliance.fr>
- * Copyright (C) 2010 Willy Tarreau <w@1wt.eu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation, version 2.1
- * exclusively.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef _TYPES_STICK_TABLE_H
-#define _TYPES_STICK_TABLE_H
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-#include <import/ebtree.h>
-#include <import/ebmbtree.h>
-#include <import/eb32tree.h>
-#include <haproxy/dict-t.h>
-#include <haproxy/pool-t.h>
-#include <haproxy/freq_ctr-t.h>
-#include <haproxy/peers-t.h>
-#include <haproxy/sample-t.h>
-
-/* The types of extra data we can store in a stick table */
-enum {
-	STKTABLE_DT_SERVER_ID,    /* the server ID to use with this stream if > 0 */
-	STKTABLE_DT_GPT0,         /* General Purpose Flag 0. */
-	STKTABLE_DT_GPC0,         /* General Purpose Counter 0 (unsigned 32-bit integer) */
-	STKTABLE_DT_GPC0_RATE,    /* General Purpose Counter 0's event rate */
-	STKTABLE_DT_CONN_CNT,     /* cumulated number of connections */
-	STKTABLE_DT_CONN_RATE,    /* incoming connection rate */
-	STKTABLE_DT_CONN_CUR,     /* concurrent number of connections */
-	STKTABLE_DT_SESS_CNT,     /* cumulated number of sessions (accepted connections) */
-	STKTABLE_DT_SESS_RATE,    /* accepted sessions rate */
-	STKTABLE_DT_HTTP_REQ_CNT, /* cumulated number of incoming HTTP requests */
-	STKTABLE_DT_HTTP_REQ_RATE,/* incoming HTTP request rate */
-	STKTABLE_DT_HTTP_ERR_CNT, /* cumulated number of HTTP requests errors (4xx) */
-	STKTABLE_DT_HTTP_ERR_RATE,/* HTTP request error rate */
-	STKTABLE_DT_BYTES_IN_CNT, /* cumulated bytes count from client to servers */
-	STKTABLE_DT_BYTES_IN_RATE,/* bytes rate from client to servers */
-	STKTABLE_DT_BYTES_OUT_CNT,/* cumulated bytes count from servers to client */
-	STKTABLE_DT_BYTES_OUT_RATE,/* bytes rate from servers to client */
-	STKTABLE_DT_GPC1,         /* General Purpose Counter 1 (unsigned 32-bit integer) */
-	STKTABLE_DT_GPC1_RATE,    /* General Purpose Counter 1's event rate */
-	STKTABLE_DT_SERVER_NAME,  /* The server name */
-	STKTABLE_STATIC_DATA_TYPES,/* number of types above */
-	/* up to STKTABLE_EXTRA_DATA_TYPES types may be registered here, always
-	 * followed by the number of data types, must always be last.
-	 */
-	STKTABLE_DATA_TYPES = STKTABLE_STATIC_DATA_TYPES + STKTABLE_EXTRA_DATA_TYPES
-};
-
-/* The equivalent standard types of the stored data */
-enum {
-	STD_T_SINT = 0,           /* data is of type signed int */
-	STD_T_UINT,               /* data is of type unsigned int */
-	STD_T_ULL,                /* data is of type unsigned long long */
-	STD_T_FRQP,               /* data is of type freq_ctr_period */
-	STD_T_DICT,               /* data is of type key of dictionary entry */
-};
-
-/* The types of optional arguments to stored data */
-enum {
-	ARG_T_NONE = 0,           /* data type takes no argument (default) */
-	ARG_T_INT,                /* signed integer */
-	ARG_T_DELAY,              /* a delay which supports time units */
-};
-
-/* stick_table extra data. This is mainly used for casting or size computation */
-union stktable_data {
-	/* standard types for easy casting */
-	int std_t_sint;
-	unsigned int std_t_uint;
-	unsigned long long std_t_ull;
-	struct freq_ctr_period std_t_frqp;
-	struct dict_entry *std_t_dict;
-
-	/* types of each storable data */
-	int server_id;
-	struct dict_entry *server_name;
-	unsigned int gpt0;
-	unsigned int gpc0;
-	struct freq_ctr_period gpc0_rate;
-	unsigned int gpc1;
-	struct freq_ctr_period gpc1_rate;
-	unsigned int conn_cnt;
-	struct freq_ctr_period conn_rate;
-	unsigned int conn_cur;
-	unsigned int sess_cnt;
-	struct freq_ctr_period sess_rate;
-	unsigned int http_req_cnt;
-	struct freq_ctr_period http_req_rate;
-	unsigned int http_err_cnt;
-	struct freq_ctr_period http_err_rate;
-	unsigned long long bytes_in_cnt;
-	struct freq_ctr_period bytes_in_rate;
-	unsigned long long bytes_out_cnt;
-	struct freq_ctr_period bytes_out_rate;
-};
-
-/* known data types */
-struct stktable_data_type {
-	const char *name; /* name of the data type */
-	int std_type;     /* standard type we can use for this data, STD_T_* */
-	int arg_type;     /* type of optional argument, ARG_T_* */
-};
-
-/* stick table key type flags */
-#define STK_F_CUSTOM_KEYSIZE      0x00000001   /* this table's key size is configurable */
-
-/* stick table keyword type */
-struct stktable_type {
-	const char *kw;           /* keyword string */
-	int flags;                /* type flags */
-	size_t default_size;      /* default key size */
-};
-
-extern struct stktable_type stktable_types[];
-
-/* Sticky session.
- * Any additional data related to the stuck session is installed *before*
- * stksess (with negative offsets). This allows us to run variable-sized
- * keys and variable-sized data without making use of intermediate pointers.
- */
-struct stksess {
-	unsigned int expire;      /* session expiration date */
-	unsigned int ref_cnt;     /* reference count, can only purge when zero */
-	__decl_thread(HA_RWLOCK_T lock); /* lock related to the table entry */
-	struct eb32_node exp;     /* ebtree node used to hold the session in expiration tree */
-	struct eb32_node upd;     /* ebtree node used to hold the update sequence tree */
-	struct ebmb_node key;     /* ebtree node used to hold the session in table */
-	/* WARNING! do not put anything after <keys>, it's used by the key */
-};
-
-
-/* stick table */
-struct stktable {
-	char *id;		  /* local table id name. */
-	char *nid;		  /* table id name sent over the network with peers protocol. */
-	struct stktable *next;    /* The stick-table may be linked when belonging to
-	                           * the same configuration section.
-	                           */
-	struct {
-		const char *file;     /* The file where the stick-table is declared. */
-		int line;             /* The line in this <file> the stick-table is declared. */
-	} conf;
-	struct ebpt_node name;    /* Stick-table are lookup by name here. */
-	struct eb_root keys;      /* head of sticky session tree */
-	struct eb_root exps;      /* head of sticky session expiration tree */
-	struct eb_root updates;   /* head of sticky updates sequence tree */
-	struct pool_head *pool;   /* pool used to allocate sticky sessions */
-	__decl_thread(HA_SPINLOCK_T lock); /* spin lock related to the table */
-	struct task *exp_task;    /* expiration task */
-	struct task *sync_task;   /* sync task */
-	unsigned int update;
-	unsigned int localupdate;
-	unsigned int commitupdate;/* used to identify the latest local updates
-				     pending for sync */
-	unsigned int syncing;     /* number of sync tasks watching this table now */
-	union {
-		struct peers *p; /* sync peers */
-		char *name;
-	} peers;
-
-	unsigned long type;       /* type of table (determines key format) */
-	size_t key_size;          /* size of a key, maximum size in case of string */
-	unsigned int size;        /* maximum number of sticky sessions in table */
-	unsigned int current;     /* number of sticky sessions currently in table */
-	int nopurge;              /* if non-zero, don't purge sticky sessions when full */
-	int exp_next;             /* next expiration date (ticks) */
-	int expire;               /* time to live for sticky sessions (milliseconds) */
-	int data_size;            /* the size of the data that is prepended *before* stksess */
-	int data_ofs[STKTABLE_DATA_TYPES]; /* negative offsets of present data types, or 0 if absent */
-	union {
-		int i;
-		unsigned int u;
-		void *p;
-	} data_arg[STKTABLE_DATA_TYPES]; /* optional argument of each data type */
-	struct proxy *proxy;      /* The proxy this stick-table is attached to, if any.*/
-	struct proxy *proxies_list; /* The list of proxies which reference this stick-table. */
-};
-
-extern struct stktable_data_type stktable_data_types[STKTABLE_DATA_TYPES];
-
-/* stick table key */
-struct stktable_key {
-	void *key;                      /* pointer on key buffer */
-	size_t key_len;                 /* data len to read in buff in case of null terminated string */
-};
-
-/* WARNING: if new fields are added, they must be initialized in stream_accept()
- * and freed in stream_free() !
- *
- * What's the purpose of there two macro:
- *   - STKCTR_TRACK_BACKEND indicates that a tracking pointer was set from the backend
- *    and thus that when a keep-alive request goes to another backend, the track
- *    must cease.
- *
- *   - STKCTR_TRACK_CONTENT indicates that the tracking pointer was set in a
- *    content-aware rule (tcp-request content or http-request) and that the
- *    tracking has to be performed in the stream and not in the session, and
- *    will cease for a new keep-alive request over the same connection.
- */
-#define STKCTR_TRACK_BACKEND 1
-#define STKCTR_TRACK_CONTENT 2
-
-/* stick counter. The <entry> member is a composite address (caddr) made of a
- * pointer to an stksess struct, and two flags among STKCTR_TRACK_* above.
- */
-struct stkctr {
-	unsigned long   entry;          /* entry containing counters currently being tracked by this stream  */
-	struct stktable *table;         /* table the counters above belong to (undefined if counters are null) */
-};
-
-/* parameters to configure tracked counters */
-struct track_ctr_prm {
-	struct sample_expr *expr;		/* expression used as the key */
-	union {
-		struct stktable *t;		/* a pointer to the table */
-		char *n;			/* or its name during parsing. */
-	} table;
-};
-
-#endif /* _TYPES_STICK_TABLE_H */
diff --git a/include/types/stream.h b/include/types/stream.h
index e2e01db..1a99429 100644
--- a/include/types/stream.h
+++ b/include/types/stream.h
@@ -44,7 +44,7 @@
 #include <types/session.h>
 #include <types/stream_interface.h>
 #include <haproxy/task-t.h>
-#include <types/stick_table.h>
+#include <haproxy/stick_table-t.h>
 
 /* Various Stream Flags, bits values 0x01 to 0x100 (shift 0) */
 #define SF_DIRECT	0x00000001	/* connection made on the server matching the client cookie */