[master] c1bd0b6 Add H2 table includes

Poul-Henning Kamp phk at FreeBSD.org
Tue Aug 30 11:42:12 CEST 2016


commit c1bd0b6b794a247c3c3129dd4ae94890c795f51f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Aug 30 09:40:49 2016 +0000

    Add H2 table includes

diff --git a/include/Makefile.am b/include/Makefile.am
index 145d8b9..5ea662a 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -2,8 +2,8 @@
 
 # API headers
 nobase_pkginclude_HEADERS = \
-	tbl/acct_fields_req.h \
 	tbl/acct_fields_bereq.h \
+	tbl/acct_fields_req.h \
 	tbl/backend_poll.h \
 	tbl/ban_vars.h \
 	tbl/bo_flags.h \
@@ -12,6 +12,10 @@ nobase_pkginclude_HEADERS = \
 	tbl/cli_cmds.h \
 	tbl/debug_bits.h \
 	tbl/feature_bits.h \
+	tbl/h2_error.h \
+	tbl/h2_frames.h \
+	tbl/h2_settings.h \
+	tbl/h2_stream.h \
 	tbl/http_headers.h \
 	tbl/http_response.h \
 	tbl/locks.h \
@@ -27,12 +31,17 @@ nobase_pkginclude_HEADERS = \
 	tbl/symbol_kind.h \
 	tbl/vcc_types.h \
 	tbl/vcl_returns.h \
+	tbl/vhd_fsm.h \
+	tbl/vhd_fsm_funcs.h \
+	tbl/vhd_return.h \
+	tbl/vhp_huffman.h \
+	tbl/vhp_static.h \
 	tbl/vrt_stv_var.h \
-	tbl/vsc_types.h \
 	tbl/vsc_all.h \
+	tbl/vsc_f_main.h \
 	tbl/vsc_fields.h \
 	tbl/vsc_levels.h \
-	tbl/vsc_f_main.h \
+	tbl/vsc_types.h \
 	tbl/vsl_tags.h \
 	tbl/vsl_tags_http.h \
 	vapi/vsm.h \
diff --git a/include/tbl/h2_error.h b/include/tbl/h2_error.h
new file mode 100644
index 0000000..c946454
--- /dev/null
+++ b/include/tbl/h2_error.h
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2016 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * RFC7540 section 11.4
+ */
+
+/*lint -save -e525 -e539 */
+
+H2_ERROR(NO_ERROR,		0x0, "Graceful shutdown")
+H2_ERROR(PROTOCOL_ERROR,	0x1, "Protocol error detected")
+H2_ERROR(INTERNAL_ERROR,	0x2, "Implementation fault")
+H2_ERROR(FLOW_CONTROL_ERROR,	0x3, "Flow-control limits exceeded")
+H2_ERROR(SETTINGS_TIMEOUT,	0x4, "Settings not acknowledged")
+H2_ERROR(STREAM_CLOSED,		0x5, "Frame received for closed stream")
+H2_ERROR(FRAME_SIZE_ERROR,	0x6, "Frame size incorrect")
+H2_ERROR(REFUSED_STREAM,	0x7, "Stream not processed")
+H2_ERROR(CANCEL,		0x8, "Stream cancelled")
+H2_ERROR(COMPRESSION_ERROR,	0x9, "Compression state not updated")
+H2_ERROR(CONNECT_ERROR,		0xa, "TCP connection error for CONNECT method")
+H2_ERROR(ENHANCE_YOUR_CALM,	0xb, "Processing capacity exceeded")
+H2_ERROR(INADEQUATE_SECURITY,	0xc, "Negotiated TLS parameters not acceptable")
+H2_ERROR(HTTP_1_1_REQUIRED,	0xd, "Use HTTP/1.1 for the request")
+#undef H2_ERROR
+
+/*lint -restore */
diff --git a/include/tbl/h2_frames.h b/include/tbl/h2_frames.h
new file mode 100644
index 0000000..031b27c
--- /dev/null
+++ b/include/tbl/h2_frames.h
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 2016 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * RFC7540 section 11.2
+ */
+
+/*lint -save -e525 -e539 */
+
+#ifdef H2_FRAME
+/* lower, upper, type, valid flags */
+H2_FRAME(data,		DATA,		0x0, 0x09)
+H2_FRAME(headers,	HEADERS,	0x1, 0x2d)
+H2_FRAME(priority,	PRIORITY,	0x2, 0x00)
+H2_FRAME(rst_stream,	RST_STREAM,	0x3, 0x00)
+H2_FRAME(settings,	SETTINGS,	0x4, 0x01)
+H2_FRAME(push_promise,	PUSH_PROMISE,	0x5, 0x0c)
+H2_FRAME(ping,		PING,		0x6, 0x01)
+H2_FRAME(goaway,	GOAWAY,		0x7, 0x00)
+H2_FRAME(window_update,	WINDOW_UPDATE,	0x8, 0x00)
+H2_FRAME(continuation,	CONTINUATION,	0x9, 0x04)
+#undef H2_FRAME
+#endif
+
+
+#ifdef H2_FRAME_FLAGS
+H2_FRAME_FLAGS(none,			NONE,				0x00)
+H2_FRAME_FLAGS(data_end_stream,		DATA_END_STREAM,		0x01)
+H2_FRAME_FLAGS(data_padded,		DATA_PADDED,			0x08)
+H2_FRAME_FLAGS(headers_end_stream,	HEADERS_END_STREAM,		0x01)
+H2_FRAME_FLAGS(headers_end_headers,	HEADERS_END_HEADERS,		0x04)
+H2_FRAME_FLAGS(headers_padded,		HEADERS_PADDED,			0x08)
+H2_FRAME_FLAGS(headers_priority,	HEADERS_PRIORITY,		0x20)
+H2_FRAME_FLAGS(settings_ack,		SETTINGS_ACK,			0x01)
+H2_FRAME_FLAGS(push_promise_end_headers,PUSH_PROMISE_END_HEADERS,	0x04)
+H2_FRAME_FLAGS(push_promise_padded,	PUSH_PROMISE_PADDED,		0x08)
+H2_FRAME_FLAGS(ping_ack,		PING_ACK,			0x01)
+H2_FRAME_FLAGS(continuation_end_headers,CONTINUATION_END_HEADERS,	0x04)
+#undef H2_FRAME_FLAGS
+#endif
+
+
+/*lint -restore */
diff --git a/include/tbl/h2_settings.h b/include/tbl/h2_settings.h
new file mode 100644
index 0000000..929094c
--- /dev/null
+++ b/include/tbl/h2_settings.h
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2016 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * RFC7540 section 11.3
+ */
+
+/*lint -save -e525 -e539 */
+
+H2_SETTINGS(HEADER_TABLE_SIZE,		0x1,       4096)
+H2_SETTINGS(ENABLE_PUSH,		0x2,          1)
+H2_SETTINGS(MAX_CONCURRENT_STREAMS,	0x3, 0xffffffff)
+H2_SETTINGS(INITIAL_WINDOW_SIZE,	0x4,      65535)
+H2_SETTINGS(MAX_FRAME_SIZE,		0x5,      16384)
+H2_SETTINGS(MAX_HEADER_LIST_SIZE,	0x6, 0xffffffff)
+#undef H2_SETTINGS
+
+/*lint -restore */
diff --git a/include/tbl/h2_stream.h b/include/tbl/h2_stream.h
new file mode 100644
index 0000000..21f6b3d
--- /dev/null
+++ b/include/tbl/h2_stream.h
@@ -0,0 +1,42 @@
+/*-
+ * Copyright (c) 2016 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * RFC7540 section 11.4
+ */
+
+/*lint -save -e525 -e539 */
+
+H2_STREAM(IDLE,			"idle",		"idle")
+H2_STREAM(RESV_LOC,		"r-loc",	"reserved (local)")
+H2_STREAM(RESV_REM,		"r-rem",	"reserved (remote)")
+H2_STREAM(OPEN,			"open",		"open")
+H2_STREAM(CLOS_LOC,		"c-loc",	"half closed (local)")
+H2_STREAM(CLOS_REM,		"c-rem",	"half closed (remote)")
+H2_STREAM(CLOSED,		"closed",	"closed")
+#undef H2_STREAM
+
+/*lint -restore */
diff --git a/include/tbl/vhd_fsm.h b/include/tbl/vhd_fsm.h
new file mode 100644
index 0000000..802b2e1
--- /dev/null
+++ b/include/tbl/vhd_fsm.h
@@ -0,0 +1,267 @@
+/*-
+ * Copyright (c) 2016 Varnish Software
+ * All rights reserved.
+ *
+ * Author: Martin Blix Grydeland <martin at varnish-software.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+/* Decode integer with prefix */
+#define VHD_FSM_INTEGER(STATE, pfx)				\
+	VHD_FSM(STATE, INTEGER, pfx, 0)
+/* Goto */
+#define VHD_FSM_GOTO(STATE, TO)					\
+	VHD_FSM(STATE, GOTO, VHD_S_##TO, 0)
+/* Label */
+#define VHD_FSM_LABEL(STATE)					\
+	VHD_FSM(STATE, SKIP, 0, 0)
+/* Set max table size */
+#define VHD_FSM_SET_MAX(STATE)					\
+	VHD_FSM(STATE, SET_MAX, 0, 0)
+/* Set index */
+#define VHD_FSM_SET_IDX(STATE)					\
+	VHD_FSM(STATE, SET_IDX, 0, 0)
+/* Table lookup from index */
+#define VHD_FSM_LOOKUP(STATE, type)				\
+	VHD_FSM(STATE, LOOKUP, type, 0)
+/* New table entry */
+#define VHD_FSM_NEW(STATE)					\
+	VHD_FSM(STATE, NEW, 0, 0)
+/* New table entry, name from index */
+#define VHD_FSM_NEW_IDX(STATE)					\
+	VHD_FSM(STATE, NEW_IDX, 0, 0)
+/* Branch if index is zero */
+#define VHD_FSM_BRANCH_ZIDX(STATE, BRANCH)			\
+	VHD_FSM(STATE, BRANCH_ZIDX, VHD_S_##BRANCH, 0)
+/* Branch if bit 0 */
+#define VHD_FSM_BRANCH_BIT0(STATE, BRANCH)			\
+	VHD_FSM(STATE, BRANCH_BIT0, VHD_S_##BRANCH, 0)
+
+/* Decode a literal:
+ *   0   1   2   3   4   5   6   7
+ * +---+---+-----------------------+
+ * | H |        Length (7+)        |
+ * +---+---------------------------+
+ * |     String (Length octets)    |
+ * +-------------------------------+
+ */
+#define VHD_FSM_LITERAL(STATE, type, flags)			\
+	VHD_FSM_BRANCH_BIT0(STATE, STATE##_HUFFMAN_LEN)		\
+	VHD_FSM_INTEGER(STATE##_RAW_LEN, 7)			\
+	VHD_FSM(STATE##_RAW, RAW, type, flags)			\
+	VHD_FSM_GOTO(STATE##_RAW_FINISH, STATE##_EXIT)		\
+	VHD_FSM_INTEGER(STATE##_HUFFMAN_LEN, 7)			\
+	VHD_FSM(STATE##_HUFFMAN, HUFFMAN, type, flags)		\
+	VHD_FSM_LABEL(STATE##_EXIT)
+
+/* The idle state */
+VHD_FSM(IDLE, IDLE, 0, 0)
+
+/* Indexed header field
+ * (RFC 7541 section 6.1)
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 1 | Index(7+)                 |
+ * +---+---------------------------+
+ */
+VHD_FSM_LABEL(HP61_START)
+VHD_FSM_INTEGER(HP61_IDX, 7)
+VHD_FSM_SET_IDX(HP61_SET_IDX)
+VHD_FSM_LOOKUP(HP61_NAME, VHD_NAME)
+VHD_FSM_LOOKUP(HP61_VAL, VHD_VALUE)
+VHD_FSM_GOTO(HP61_FINISH, IDLE)
+
+/* Literal header field with incremental indexing
+ * (RFC 7541 section 6.2.1)
+ *
+ * HP621_IN - Indexed name
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 1 |      Index (6+)       |
+ * +---+---+-----------------------+
+ * | H |     Value Length (7+)     |
+ * +---+---------------------------+
+ * | Value String (Length octets)  |
+ * +-------------------------------+
+ *
+ * HP621_NN - New name
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 1 |           0           |
+ * +---+---+-----------------------+
+ * | H |     Name Length (7+)      |
+ * +---+---------------------------+
+ * |  Name String (Length octets)  |
+ * +---+---------------------------+
+ * | H |     Value Length (7+)     |
+ * +---+---------------------------+
+ * | Value String (Length octets)  |
+ * +-------------------------------+
+ */
+VHD_FSM_LABEL(HP621_START)
+VHD_FSM_INTEGER(HP621_IDX, 6)
+VHD_FSM_SET_IDX(HP621_SET_IDX)
+VHD_FSM_BRANCH_ZIDX(HP621_BRANCH_ZIDX, HP621_NN_NEW)
+/* HP621_IN - Indexed name */
+VHD_FSM_LOOKUP(HP621_IN_NAME, VHD_NAME)
+VHD_FSM_NEW_IDX(HP621_IN_NEW)
+VHD_FSM_LITERAL(HP621_IN_VAL, VHD_VALUE, VHD_INCREMENTAL)
+VHD_FSM_GOTO(HP621_IN_FINISH, IDLE)
+/* HP621_NN - New name */
+VHD_FSM_NEW(HP621_NN_NEW)
+VHD_FSM_LITERAL(HP621_NN_NAME, VHD_NAME, VHD_INCREMENTAL)
+VHD_FSM_LITERAL(HP621_NN_VAL, VHD_VALUE, VHD_INCREMENTAL)
+VHD_FSM_GOTO(HP621_NN_FINISH, IDLE)
+
+/* Literal header field without indexing
+ * (RFC 7541 section 622)
+ *
+ * HP622_IN - Indexed name
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 0 | 0 | 0 |  Index (4+)   |
+ * +---+---+-----------------------+
+ * | H |     Value Length (7+)     |
+ * +---+---------------------------+
+ * | Value String (Length octets)  |
+ * +-------------------------------+
+ *
+ * HP622_NN - New name
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 0 | 0 | 0 |       0       |
+ * +---+---+-----------------------+
+ * | H |     Name Length (7+)      |
+ * +---+---------------------------+
+ * |  Name String (Length octets)  |
+ * +---+---------------------------+
+ * | H |     Value Length (7+)     |
+ * +---+---------------------------+
+ * | Value String (Length octets)  |
+ * +-------------------------------+
+ */
+VHD_FSM_LABEL(HP622_START)
+VHD_FSM_INTEGER(HP622_IDX, 4)
+VHD_FSM_SET_IDX(HP622_SET_IDX)
+VHD_FSM_BRANCH_ZIDX(HP622_BR_ZIDX, HP622_NN_NAME)
+/* HP622_IN - Indexed name */
+VHD_FSM_LOOKUP(HP622_IN_NAME, VHD_NAME)
+VHD_FSM_LITERAL(HP622_IN_VAL, VHD_VALUE, 0)
+VHD_FSM_GOTO(HP622_IN_FINISH, IDLE)
+/* HP622_NN - New name */
+VHD_FSM_LITERAL(HP622_NN_NAME, VHD_NAME, 0)
+VHD_FSM_LITERAL(HP622_NN_VAL, VHD_VALUE, 0)
+VHD_FSM_GOTO(HP622_NN_FINISH, IDLE)
+
+/* Literal header field never indexed
+ * (RFC 7541 section 6.2.3)
+ *
+ * HP623_IN - Indexed name
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 0 | 0 | 1 |  Index (4+)   |
+ * +---+---+-----------------------+
+ * | H |     Value Length (7+)     |
+ * +---+---------------------------+
+ * | Value String (Length octets)  |
+ * +-------------------------------+
+ *
+ * HP623_NN - New name
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 0 | 0 | 1 |       0       |
+ * +---+---+-----------------------+
+ * | H |     Name Length (7+)      |
+ * +---+---------------------------+
+ * |  Name String (Length octets)  |
+ * +---+---------------------------+
+ * | H |     Value Length (7+)     |
+ * +---+---------------------------+
+ * | Value String (Length octets)  |
+ * +-------------------------------+
+ */
+VHD_FSM_LABEL(HP623_START)
+VHD_FSM_INTEGER(HP623_IDX, 4)
+VHD_FSM_SET_IDX(HP623_SET_IDX)
+VHD_FSM_BRANCH_ZIDX(HP623_BR_ZIDX, HP623_NN_NAME)
+/* HP623_IN - Indexed name */
+VHD_FSM_LOOKUP(HP623_IN_NAME, VHD_NAME_SEC)
+VHD_FSM_LITERAL(HP623_IN_VAL, VHD_VALUE_SEC, 0)
+VHD_FSM_GOTO(HP623_IN_FINISH, IDLE)
+/* HP623_NN - New name */
+VHD_FSM_LITERAL(HP623_NN_NAME, VHD_NAME_SEC, 0)
+VHD_FSM_LITERAL(HP623_NN_VAL, VHD_VALUE_SEC, 0)
+VHD_FSM_GOTO(HP623_NN_FINISH, IDLE)
+
+/* Dynamic table size update
+ * (RFC 7541 section 6.3)
+ *
+ *   0   1   2   3   4   5   6   7
+ * +---+---+---+---+---+---+---+---+
+ * | 0 | 0 | 1 |   Max size (5+)   |
+ * +---+---------------------------+
+ */
+VHD_FSM_LABEL(HP63_START)
+VHD_FSM_INTEGER(HP63_SIZE, 5)
+VHD_FSM_SET_MAX(HP63_SET_MAX)
+VHD_FSM_GOTO(HP63_FINISH, IDLE)
+
+/*---------------------------------------------------------------------*/
+/* States used for unit testing */
+
+#ifdef DECODE_TEST_DRIVER
+
+/* Test integer prefix 5 */
+VHD_FSM_LABEL(TEST_INT5)
+VHD_FSM_INTEGER(TEST_INT5_INT, 5)
+VHD_FSM_GOTO(TEST_INT5_FINISH, IDLE)
+
+/* Test literal decoding */
+VHD_FSM_LABEL(TEST_LITERAL)
+VHD_FSM_LITERAL(TEST_LITERAL_NAME, VHD_NAME, 0)
+VHD_FSM_LITERAL(TEST_LITERAL_VALUE, VHD_VALUE, 0)
+VHD_FSM_GOTO(TEST_LITERAL_FINISH, IDLE)
+
+#endif	/* DECODE_TEST_DRIVER */
+
+/*---------------------------------------------------------------------*/
+/* Clean up macro namespace */
+#undef VHD_FSM_INTEGER
+#undef VHD_FSM_GOTO
+#undef VHD_FSM_LABEL
+#undef VHD_FSM_SET_MAX
+#undef VHD_FSM_SET_IDX
+#undef VHD_FSM_LOOKUP
+#undef VHD_FSM_NEW
+#undef VHD_FSM_NEW_IDX
+#undef VHD_FSM_BRANCH_ZIDX
+#undef VHD_FSM_BRANCH_BIT0
+#undef VHD_FSM_LITERAL
diff --git a/include/tbl/vhd_fsm_funcs.h b/include/tbl/vhd_fsm_funcs.h
new file mode 100644
index 0000000..92cd082
--- /dev/null
+++ b/include/tbl/vhd_fsm_funcs.h
@@ -0,0 +1,42 @@
+/*-
+ * Copyright (c) 2016 Varnish Software
+ * All rights reserved.
+ *
+ * Author: Martin Blix Grydeland <martin at varnish-software.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+VHD_FSM_FUNC(SKIP, vhd_skip)
+VHD_FSM_FUNC(GOTO, vhd_goto)
+VHD_FSM_FUNC(IDLE, vhd_idle)
+VHD_FSM_FUNC(INTEGER, vhd_integer)
+VHD_FSM_FUNC(SET_MAX, vhd_set_max)
+VHD_FSM_FUNC(SET_IDX, vhd_set_idx)
+VHD_FSM_FUNC(LOOKUP, vhd_lookup)
+VHD_FSM_FUNC(NEW, vhd_new)
+VHD_FSM_FUNC(NEW_IDX, vhd_new_idx)
+VHD_FSM_FUNC(BRANCH_ZIDX, vhd_branch_zidx)
+VHD_FSM_FUNC(BRANCH_BIT0, vhd_branch_bit0)
+VHD_FSM_FUNC(RAW, vhd_raw)
+VHD_FSM_FUNC(HUFFMAN, vhd_huffman)
diff --git a/include/tbl/vhd_return.h b/include/tbl/vhd_return.h
new file mode 100644
index 0000000..31f6cca
--- /dev/null
+++ b/include/tbl/vhd_return.h
@@ -0,0 +1,44 @@
+/*-
+ * Copyright (c) 2016 Varnish Software
+ * All rights reserved.
+ *
+ * Author: Martin Blix Grydeland <martin at varnish-software.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+VHD_RET(ERR_ARG, -1, "Invalid HPACK instruction")
+VHD_RET(ERR_INT, -2, "Integer overflow")
+VHD_RET(ERR_IDX, -3, "Invalid table index")
+VHD_RET(ERR_LEN, -4, "Invalid length")
+VHD_RET(ERR_HUF, -5, "Invalid huffman code")
+VHD_RET(ERR_UPD, -6, "Spurious update")
+
+VHD_RET(OK, 0, "OK")
+VHD_RET(MORE, 1, "Feed me")
+VHD_RET(NAME, 2, "Name")
+VHD_RET(VALUE, 3, "Value")
+VHD_RET(NAME_SEC, 4, "Name never index")
+VHD_RET(VALUE_SEC, 5, "Value never index")
+VHD_RET(BUF, 6, "Stuffed")
+VHD_RET(AGAIN, 7, "Call again")
diff --git a/include/tbl/vhp_huffman.h b/include/tbl/vhp_huffman.h
new file mode 100644
index 0000000..ad9ebe2
--- /dev/null
+++ b/include/tbl/vhp_huffman.h
@@ -0,0 +1,264 @@
+/*-
+ * Written by Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
+ *
+ * This file is in the public domain.
+ *
+ * HPACK Huffman table, but sorted by codes (RFC 7541 Appendix B)
+ */
+
+HPH(0x30, 0x00000000,  5) /* '0' */
+HPH(0x31, 0x00000001,  5) /* '1' */
+HPH(0x32, 0x00000002,  5) /* '2' */
+HPH(0x61, 0x00000003,  5) /* 'a' */
+HPH(0x63, 0x00000004,  5) /* 'c' */
+HPH(0x65, 0x00000005,  5) /* 'e' */
+HPH(0x69, 0x00000006,  5) /* 'i' */
+HPH(0x6f, 0x00000007,  5) /* 'o' */
+HPH(0x73, 0x00000008,  5) /* 's' */
+HPH(0x74, 0x00000009,  5) /* 't' */
+HPH(0x20, 0x00000014,  6) /* ' ' */
+HPH(0x25, 0x00000015,  6) /* '%' */
+HPH(0x2d, 0x00000016,  6) /* '-' */
+HPH(0x2e, 0x00000017,  6) /* '.' */
+HPH(0x2f, 0x00000018,  6) /* '/' */
+HPH(0x33, 0x00000019,  6) /* '3' */
+HPH(0x34, 0x0000001a,  6) /* '4' */
+HPH(0x35, 0x0000001b,  6) /* '5' */
+HPH(0x36, 0x0000001c,  6) /* '6' */
+HPH(0x37, 0x0000001d,  6) /* '7' */
+HPH(0x38, 0x0000001e,  6) /* '8' */
+HPH(0x39, 0x0000001f,  6) /* '9' */
+HPH(0x3d, 0x00000020,  6) /* '=' */
+HPH(0x41, 0x00000021,  6) /* 'A' */
+HPH(0x5f, 0x00000022,  6) /* '_' */
+HPH(0x62, 0x00000023,  6) /* 'b' */
+HPH(0x64, 0x00000024,  6) /* 'd' */
+HPH(0x66, 0x00000025,  6) /* 'f' */
+HPH(0x67, 0x00000026,  6) /* 'g' */
+HPH(0x68, 0x00000027,  6) /* 'h' */
+HPH(0x6c, 0x00000028,  6) /* 'l' */
+HPH(0x6d, 0x00000029,  6) /* 'm' */
+HPH(0x6e, 0x0000002a,  6) /* 'n' */
+HPH(0x70, 0x0000002b,  6) /* 'p' */
+HPH(0x72, 0x0000002c,  6) /* 'r' */
+HPH(0x75, 0x0000002d,  6) /* 'u' */
+HPH(0x3a, 0x0000005c,  7) /* ':' */
+HPH(0x42, 0x0000005d,  7) /* 'B' */
+HPH(0x43, 0x0000005e,  7) /* 'C' */
+HPH(0x44, 0x0000005f,  7) /* 'D' */
+HPH(0x45, 0x00000060,  7) /* 'E' */
+HPH(0x46, 0x00000061,  7) /* 'F' */
+HPH(0x47, 0x00000062,  7) /* 'G' */
+HPH(0x48, 0x00000063,  7) /* 'H' */
+HPH(0x49, 0x00000064,  7) /* 'I' */
+HPH(0x4a, 0x00000065,  7) /* 'J' */
+HPH(0x4b, 0x00000066,  7) /* 'K' */
+HPH(0x4c, 0x00000067,  7) /* 'L' */
+HPH(0x4d, 0x00000068,  7) /* 'M' */
+HPH(0x4e, 0x00000069,  7) /* 'N' */
+HPH(0x4f, 0x0000006a,  7) /* 'O' */
+HPH(0x50, 0x0000006b,  7) /* 'P' */
+HPH(0x51, 0x0000006c,  7) /* 'Q' */
+HPH(0x52, 0x0000006d,  7) /* 'R' */
+HPH(0x53, 0x0000006e,  7) /* 'S' */
+HPH(0x54, 0x0000006f,  7) /* 'T' */
+HPH(0x55, 0x00000070,  7) /* 'U' */
+HPH(0x56, 0x00000071,  7) /* 'V' */
+HPH(0x57, 0x00000072,  7) /* 'W' */
+HPH(0x59, 0x00000073,  7) /* 'Y' */
+HPH(0x6a, 0x00000074,  7) /* 'j' */
+HPH(0x6b, 0x00000075,  7) /* 'k' */
+HPH(0x71, 0x00000076,  7) /* 'q' */
+HPH(0x76, 0x00000077,  7) /* 'v' */
+HPH(0x77, 0x00000078,  7) /* 'w' */
+HPH(0x78, 0x00000079,  7) /* 'x' */
+HPH(0x79, 0x0000007a,  7) /* 'y' */
+HPH(0x7a, 0x0000007b,  7) /* 'z' */
+HPH(0x26, 0x000000f8,  8) /* '&' */
+HPH(0x2a, 0x000000f9,  8) /* '*' */
+HPH(0x2c, 0x000000fa,  8) /* ',' */
+HPH(0x3b, 0x000000fb,  8) /* ';' */
+HPH(0x58, 0x000000fc,  8) /* 'X' */
+HPH(0x5a, 0x000000fd,  8) /* 'Z' */
+HPH(0x21, 0x000003f8, 10) /* '!' */
+HPH(0x22, 0x000003f9, 10) /* '"' */
+HPH(0x28, 0x000003fa, 10) /* '(' */
+HPH(0x29, 0x000003fb, 10) /* ')' */
+HPH(0x3f, 0x000003fc, 10) /* '?' */
+HPH(0x27, 0x000007fa, 11) /* ''' */
+HPH(0x2b, 0x000007fb, 11) /* '+' */
+HPH(0x7c, 0x000007fc, 11) /* '|' */
+HPH(0x23, 0x00000ffa, 12) /* '#' */
+HPH(0x3e, 0x00000ffb, 12) /* '>' */
+HPH(0x00, 0x00001ff8, 13)
+HPH(0x24, 0x00001ff9, 13) /* '$' */
+HPH(0x40, 0x00001ffa, 13) /* '@' */
+HPH(0x5b, 0x00001ffb, 13) /* '[' */
+HPH(0x5d, 0x00001ffc, 13) /* ']' */
+HPH(0x7e, 0x00001ffd, 13) /* '~' */
+HPH(0x5e, 0x00003ffc, 14) /* '^' */
+HPH(0x7d, 0x00003ffd, 14) /* '}' */
+HPH(0x3c, 0x00007ffc, 15) /* '<' */
+HPH(0x60, 0x00007ffd, 15) /* '`' */
+HPH(0x7b, 0x00007ffe, 15) /* '{' */
+HPH(0x5c, 0x0007fff0, 19) /* '\' */
+HPH(0xc3, 0x0007fff1, 19)
+HPH(0xd0, 0x0007fff2, 19)
+HPH(0x80, 0x000fffe6, 20)
+HPH(0x82, 0x000fffe7, 20)
+HPH(0x83, 0x000fffe8, 20)
+HPH(0xa2, 0x000fffe9, 20)
+HPH(0xb8, 0x000fffea, 20)
+HPH(0xc2, 0x000fffeb, 20)
+HPH(0xe0, 0x000fffec, 20)
+HPH(0xe2, 0x000fffed, 20)
+HPH(0x99, 0x001fffdc, 21)
+HPH(0xa1, 0x001fffdd, 21)
+HPH(0xa7, 0x001fffde, 21)
+HPH(0xac, 0x001fffdf, 21)
+HPH(0xb0, 0x001fffe0, 21)
+HPH(0xb1, 0x001fffe1, 21)
+HPH(0xb3, 0x001fffe2, 21)
+HPH(0xd1, 0x001fffe3, 21)
+HPH(0xd8, 0x001fffe4, 21)
+HPH(0xd9, 0x001fffe5, 21)
+HPH(0xe3, 0x001fffe6, 21)
+HPH(0xe5, 0x001fffe7, 21)
+HPH(0xe6, 0x001fffe8, 21)
+HPH(0x81, 0x003fffd2, 22)
+HPH(0x84, 0x003fffd3, 22)
+HPH(0x85, 0x003fffd4, 22)
+HPH(0x86, 0x003fffd5, 22)
+HPH(0x88, 0x003fffd6, 22)
+HPH(0x92, 0x003fffd7, 22)
+HPH(0x9a, 0x003fffd8, 22)
+HPH(0x9c, 0x003fffd9, 22)
+HPH(0xa0, 0x003fffda, 22)
+HPH(0xa3, 0x003fffdb, 22)
+HPH(0xa4, 0x003fffdc, 22)
+HPH(0xa9, 0x003fffdd, 22)
+HPH(0xaa, 0x003fffde, 22)
+HPH(0xad, 0x003fffdf, 22)
+HPH(0xb2, 0x003fffe0, 22)
+HPH(0xb5, 0x003fffe1, 22)
+HPH(0xb9, 0x003fffe2, 22)
+HPH(0xba, 0x003fffe3, 22)
+HPH(0xbb, 0x003fffe4, 22)
+HPH(0xbd, 0x003fffe5, 22)
+HPH(0xbe, 0x003fffe6, 22)
+HPH(0xc4, 0x003fffe7, 22)
+HPH(0xc6, 0x003fffe8, 22)
+HPH(0xe4, 0x003fffe9, 22)
+HPH(0xe8, 0x003fffea, 22)
+HPH(0xe9, 0x003fffeb, 22)
+HPH(0x01, 0x007fffd8, 23)
+HPH(0x87, 0x007fffd9, 23)
+HPH(0x89, 0x007fffda, 23)
+HPH(0x8a, 0x007fffdb, 23)
+HPH(0x8b, 0x007fffdc, 23)
+HPH(0x8c, 0x007fffdd, 23)
+HPH(0x8d, 0x007fffde, 23)
+HPH(0x8f, 0x007fffdf, 23)
+HPH(0x93, 0x007fffe0, 23)
+HPH(0x95, 0x007fffe1, 23)
+HPH(0x96, 0x007fffe2, 23)
+HPH(0x97, 0x007fffe3, 23)
+HPH(0x98, 0x007fffe4, 23)
+HPH(0x9b, 0x007fffe5, 23)
+HPH(0x9d, 0x007fffe6, 23)
+HPH(0x9e, 0x007fffe7, 23)
+HPH(0xa5, 0x007fffe8, 23)
+HPH(0xa6, 0x007fffe9, 23)
+HPH(0xa8, 0x007fffea, 23)
+HPH(0xae, 0x007fffeb, 23)
+HPH(0xaf, 0x007fffec, 23)
+HPH(0xb4, 0x007fffed, 23)
+HPH(0xb6, 0x007fffee, 23)
+HPH(0xb7, 0x007fffef, 23)
+HPH(0xbc, 0x007ffff0, 23)
+HPH(0xbf, 0x007ffff1, 23)
+HPH(0xc5, 0x007ffff2, 23)
+HPH(0xe7, 0x007ffff3, 23)
+HPH(0xef, 0x007ffff4, 23)
+HPH(0x09, 0x00ffffea, 24)
+HPH(0x8e, 0x00ffffeb, 24)
+HPH(0x90, 0x00ffffec, 24)
+HPH(0x91, 0x00ffffed, 24)
+HPH(0x94, 0x00ffffee, 24)
+HPH(0x9f, 0x00ffffef, 24)
+HPH(0xab, 0x00fffff0, 24)
+HPH(0xce, 0x00fffff1, 24)
+HPH(0xd7, 0x00fffff2, 24)
+HPH(0xe1, 0x00fffff3, 24)
+HPH(0xec, 0x00fffff4, 24)
+HPH(0xed, 0x00fffff5, 24)
+HPH(0xc7, 0x01ffffec, 25)
+HPH(0xcf, 0x01ffffed, 25)
+HPH(0xea, 0x01ffffee, 25)
+HPH(0xeb, 0x01ffffef, 25)
+HPH(0xc0, 0x03ffffe0, 26)
+HPH(0xc1, 0x03ffffe1, 26)
+HPH(0xc8, 0x03ffffe2, 26)
+HPH(0xc9, 0x03ffffe3, 26)
+HPH(0xca, 0x03ffffe4, 26)
+HPH(0xcd, 0x03ffffe5, 26)
+HPH(0xd2, 0x03ffffe6, 26)
+HPH(0xd5, 0x03ffffe7, 26)
+HPH(0xda, 0x03ffffe8, 26)
+HPH(0xdb, 0x03ffffe9, 26)
+HPH(0xee, 0x03ffffea, 26)
+HPH(0xf0, 0x03ffffeb, 26)
+HPH(0xf2, 0x03ffffec, 26)
+HPH(0xf3, 0x03ffffed, 26)
+HPH(0xff, 0x03ffffee, 26)
+HPH(0xcb, 0x07ffffde, 27)
+HPH(0xcc, 0x07ffffdf, 27)
+HPH(0xd3, 0x07ffffe0, 27)
+HPH(0xd4, 0x07ffffe1, 27)
+HPH(0xd6, 0x07ffffe2, 27)
+HPH(0xdd, 0x07ffffe3, 27)
+HPH(0xde, 0x07ffffe4, 27)
+HPH(0xdf, 0x07ffffe5, 27)
+HPH(0xf1, 0x07ffffe6, 27)
+HPH(0xf4, 0x07ffffe7, 27)
+HPH(0xf5, 0x07ffffe8, 27)
+HPH(0xf6, 0x07ffffe9, 27)
+HPH(0xf7, 0x07ffffea, 27)
+HPH(0xf8, 0x07ffffeb, 27)
+HPH(0xfa, 0x07ffffec, 27)
+HPH(0xfb, 0x07ffffed, 27)
+HPH(0xfc, 0x07ffffee, 27)
+HPH(0xfd, 0x07ffffef, 27)
+HPH(0xfe, 0x07fffff0, 27)
+HPH(0x02, 0x0fffffe2, 28)
+HPH(0x03, 0x0fffffe3, 28)
+HPH(0x04, 0x0fffffe4, 28)
+HPH(0x05, 0x0fffffe5, 28)
+HPH(0x06, 0x0fffffe6, 28)
+HPH(0x07, 0x0fffffe7, 28)
+HPH(0x08, 0x0fffffe8, 28)
+HPH(0x0b, 0x0fffffe9, 28)
+HPH(0x0c, 0x0fffffea, 28)
+HPH(0x0e, 0x0fffffeb, 28)
+HPH(0x0f, 0x0fffffec, 28)
+HPH(0x10, 0x0fffffed, 28)
+HPH(0x11, 0x0fffffee, 28)
+HPH(0x12, 0x0fffffef, 28)
+HPH(0x13, 0x0ffffff0, 28)
+HPH(0x14, 0x0ffffff1, 28)
+HPH(0x15, 0x0ffffff2, 28)
+HPH(0x17, 0x0ffffff3, 28)
+HPH(0x18, 0x0ffffff4, 28)
+HPH(0x19, 0x0ffffff5, 28)
+HPH(0x1a, 0x0ffffff6, 28)
+HPH(0x1b, 0x0ffffff7, 28)
+HPH(0x1c, 0x0ffffff8, 28)
+HPH(0x1d, 0x0ffffff9, 28)
+HPH(0x1e, 0x0ffffffa, 28)
+HPH(0x1f, 0x0ffffffb, 28)
+HPH(0x7f, 0x0ffffffc, 28)
+HPH(0xdc, 0x0ffffffd, 28)
+HPH(0xf9, 0x0ffffffe, 28)
+HPH(0x0a, 0x3ffffffc, 30)
+HPH(0x0d, 0x3ffffffd, 30)
+HPH(0x16, 0x3ffffffe, 30)
diff --git a/include/tbl/vhp_static.h b/include/tbl/vhp_static.h
new file mode 100644
index 0000000..576c180
--- /dev/null
+++ b/include/tbl/vhp_static.h
@@ -0,0 +1,69 @@
+/*-
+ * Written by Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
+ *
+ * This file is in the public domain.
+ *
+ * HPACK: Static Table Definition (RFC 7540 Appendix A)
+ */
+
+HPS( 1,	":authority",			"")
+HPS( 2,	":method",			"GET")
+HPS( 3,	":method",			"POST")
+HPS( 4,	":path",			"/")
+HPS( 5,	":path",			"/index.html")
+HPS( 6,	":scheme",			"http")
+HPS( 7,	":scheme",			"https")
+HPS( 8,	":status",			"200")
+HPS( 9,	":status",			"204")
+HPS(10,	":status",			"206")
+HPS(11,	":status",			"304")
+HPS(12,	":status",			"400")
+HPS(13,	":status",			"404")
+HPS(14,	":status",			"500")
+HPS(15,	"accept-charset",		"")
+HPS(16,	"accept-encoding",		"gzip, deflate")
+HPS(17,	"accept-language",		"")
+HPS(18,	"accept-ranges",		"")
+HPS(19,	"accept",			"")
+HPS(20,	"access-control-allow-origin",	"")
+HPS(21,	"age",				"")
+HPS(22,	"allow",			"")
+HPS(23,	"authorization",		"")
+HPS(24,	"cache-control",		"")
+HPS(25,	"content-disposition",		"")
+HPS(26,	"content-encoding",		"")
+HPS(27,	"content-language",		"")
+HPS(28,	"content-length",		"")
+HPS(29,	"content-location",		"")
+HPS(30,	"content-range",		"")
+HPS(31,	"content-type",			"")
+HPS(32,	"cookie",			"")
+HPS(33,	"date",				"")
+HPS(34,	"etag",				"")
+HPS(35,	"expect",			"")
+HPS(36,	"expires",			"")
+HPS(37,	"from",				"")
+HPS(38,	"host",				"")
+HPS(39,	"if-match",			"")
+HPS(40,	"if-modified-since",		"")
+HPS(41,	"if-none-match",		"")
+HPS(42,	"if-range",			"")
+HPS(43,	"if-unmodified-since",		"")
+HPS(44,	"last-modified",		"")
+HPS(45,	"link",				"")
+HPS(46,	"location",			"")
+HPS(47,	"max-forwards",			"")
+HPS(48,	"proxy-authenticate",		"")
+HPS(49,	"proxy-authorization",		"")
+HPS(50,	"range",			"")
+HPS(51,	"referer",			"")
+HPS(52,	"refresh",			"")
+HPS(53,	"retry-after",			"")
+HPS(54,	"server",			"")
+HPS(55,	"set-cookie",			"")
+HPS(56,	"strict-transport-security",	"")
+HPS(57,	"transfer-encoding",		"")
+HPS(58,	"user-agent",			"")
+HPS(59,	"vary",				"")
+HPS(60,	"via",				"")
+HPS(61,	"www-authenticate",		"")



More information about the varnish-commit mailing list