[MINOR] Allow showing and clearing by key of integer stick tables
diff --git a/doc/configuration.txt b/doc/configuration.txt
index a946e75..f70a952 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -9336,7 +9336,7 @@
     - gt : match entries whose data is greater than this value
 
   When the key form is used the entry <key> is removed.  The key must be of the
-  same type as the table, which currently is limited to IPv4 and IPv6.
+  same type as the table, which currently is limited to IPv4, IPv6 and integer.
 
   Example :
         $ echo "show table http_proxy" | socat stdio /tmp/sock1
@@ -9562,7 +9562,7 @@
 
 
   When the key form is used the entry <key> is shown.  The key must be of the
-  same type as the table, which currently is limited to IPv4 and IPv6.
+  same type as the table, which currently is limited to IPv4, IPv6 and integer.
 
   Example :
         $ echo "show table http_proxy" | socat stdio /tmp/sock1
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 0d5396c..45424df 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -15,6 +15,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <stdbool.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -510,7 +511,7 @@
 	struct session *s = si->applet.private;
 	struct proxy *px = si->applet.ctx.table.target;
 	struct stksess *ts;
-	unsigned int ip_key;
+	uint32_t uint32_key;
 	unsigned char ip6_key[sizeof(struct in6_addr)];
 
 	si->applet.st0 = STAT_CLI_OUTPUT;
@@ -523,18 +524,36 @@
 
 	switch (px->table.type) {
 	case STKTABLE_TYPE_IP:
-		ip_key = htonl(inetaddr_host(args[4]));
-		static_table_key.key = (void *)&ip_key;
+		uint32_key = htonl(inetaddr_host(args[4]));
+		static_table_key.key = &uint32_key;
 		break;
 	case STKTABLE_TYPE_IPV6:
 		inet_pton(AF_INET6, args[4], ip6_key);
 		static_table_key.key = &ip6_key;
 		break;
+	case STKTABLE_TYPE_INTEGER:
+		{
+			char *endptr;
+			unsigned long val;
+			errno = 0;
+			val = strtoul(args[4], &endptr, 10);
+			if ((errno == ERANGE && val == ULONG_MAX) ||
+			    (errno != 0 && val == 0) || endptr == args[4] ||
+			    val > 0xffffffff) {
+				si->applet.ctx.cli.msg = "Invalid key\n";
+				si->applet.st0 = STAT_CLI_PRINT;
+				return;
+			}
+			uint32_key = (uint32_t) val;
+			static_table_key.key = &uint32_key;
+			break;
+		}
+		break;
 	default:
 		if (show)
-			si->applet.ctx.cli.msg = "Showing keys from tables of type other than ip and ipv6 is not supported\n";
+			si->applet.ctx.cli.msg = "Showing keys from tables of type other than ip, ipv6 and integer is not supported\n";
 		else
-			si->applet.ctx.cli.msg = "Removing keys from ip tables of type other than ip and ipv6 is not supported\n";
+			si->applet.ctx.cli.msg = "Removing keys from ip tables of type other than ip, ipv6 and integer is not supported\n";
 		si->applet.st0 = STAT_CLI_PRINT;
 		return;
 	}