MINOR: qpack: Add static header table definitions for QPACK.

As HPACK, QPACK makes usage of a static header table.
diff --git a/include/haproxy/qpack-tbl-t.h b/include/haproxy/qpack-tbl-t.h
new file mode 100644
index 0000000..fd498ee
--- /dev/null
+++ b/include/haproxy/qpack-tbl-t.h
@@ -0,0 +1,32 @@
+/*
+ * QPACK header table management (draft-ietf-quic-qpack-20) - type definitions
+ *
+ * Copyright 2020 HAProxy Technologies, Frédéric Lécaille <flecaille@haproxy.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef _HAPROXY_QPACK_TBL_T_H
+#define _HAPROXY_QPACK_TBL_T_H
+
+/* static header table as in draft-ietf-quic-qpack-20 Appendix A. [0] unused. */
+#define QPACK_SHT_SIZE 99
+
+#endif /* _HAPROXY_QPACK_TBL_T_H */
diff --git a/src/qpack-tbl.c b/src/qpack-tbl.c
new file mode 100644
index 0000000..4a501c1
--- /dev/null
+++ b/src/qpack-tbl.c
@@ -0,0 +1,141 @@
+/*
+ * QPACK header table management (draft-ietf-quic-qpack-20)
+ *
+ * Copyright 2020 HAProxy Technologies, Frédéric Lécaille <flecaille@haproxy.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include <import/ist.h>
+#include <haproxy/http-hdr-t.h>
+#include <haproxy/qpack-tbl-t.h>
+
+/* static header table as in RFC7541 Appendix A. [0] unused. */
+const struct http_hdr qpack_sht[QPACK_SHT_SIZE] = {
+	[ 0] = { .n = IST(":authority"),                       .v = IST("")                         },
+	[ 1] = { .n = IST(":path"),                            .v = IST("/")                        },
+	[ 2] = { .n = IST("age"),                              .v = IST("0")                        },
+	[ 3] = { .n = IST("content-disposition"),              .v = IST("")                         },
+	[ 4] = { .n = IST("content-length"),                   .v = IST("0")                        },
+	[ 5] = { .n = IST("cookie"),                           .v = IST("")                         },
+	[ 6] = { .n = IST("date"),                             .v = IST("")                         },
+	[ 7] = { .n = IST("etag"),                             .v = IST("")                         },
+	[ 8] = { .n = IST("if-modified-since"),                .v = IST("")                         },
+	[ 9] = { .n = IST("if-none-match"),                    .v = IST("")                         },
+	[10] = { .n = IST("last-modified"),                    .v = IST("")                         },
+	[11] = { .n = IST("link"),                             .v = IST("")                         },
+	[12] = { .n = IST("location"),                         .v = IST("")                         },
+	[13] = { .n = IST("referer"),                          .v = IST("")                         },
+	[14] = { .n = IST("set-cookie"),                       .v = IST("")                         },
+	[15] = { .n = IST(":method"),                          .v = IST("CONNECT")                  },
+	[16] = { .n = IST(":method"),                          .v = IST("DELETE")                   },
+	[17] = { .n = IST(":method"),                          .v = IST("GET")                      },
+	[18] = { .n = IST(":method"),                          .v = IST("HEAD")                     },
+	[19] = { .n = IST(":method"),                          .v = IST("OPTIONS")                  },
+	[20] = { .n = IST(":method"),                          .v = IST("POST")                     },
+	[21] = { .n = IST(":method"),                          .v = IST("PUT")                      },
+	[22] = { .n = IST(":scheme"),                          .v = IST("http")                     },
+	[23] = { .n = IST(":scheme"),                          .v = IST("https")                    },
+	[24] = { .n = IST(":status"),                          .v = IST("103")                      },
+	[25] = { .n = IST(":status"),                          .v = IST("200")                      },
+	[26] = { .n = IST(":status"),                          .v = IST("304")                      },
+	[27] = { .n = IST(":status"),                          .v = IST("404")                      },
+	[28] = { .n = IST(":status"),                          .v = IST("503")                      },
+	[29] = { .n = IST("accept"),                           .v = IST("*/*")                      },
+	[30] = { .n = IST("accept"),                           .v = IST("application/dns-message")  },
+	[31] = { .n = IST("accept-encoding"),                  .v = IST("gzip, deflate, br")        },
+	[32] = { .n = IST("accept-ranges"),                    .v = IST("bytes")                    },
+	[33] = { .n = IST("access-control-allow-headers"),     .v = IST("cache-control")            },
+	[34] = { .n = IST("access-control-allow-headers"),     .v = IST("content-type")             },
+	[35] = { .n = IST("access-control-allow-origin"),      .v = IST("*")                        },
+	[36] = { .n = IST("cache-control"),                    .v = IST("max-age=0")                },
+	[37] = { .n = IST("cache-control"),                    .v = IST("max-age=2592000")          },
+	[38] = { .n = IST("cache-control"),                    .v = IST("max-age=604800")           },
+	[39] = { .n = IST("cache-control"),                    .v = IST("no-cache")                 },
+	[40] = { .n = IST("cache-control"),                    .v = IST("no-store")                 },
+	[41] = { .n = IST("cache-control"),                    .v = IST("public, max-age=31536000") },
+	[42] = { .n = IST("content-encoding"),                 .v = IST("br")                       },
+	[43] = { .n = IST("content-encoding"),                 .v = IST("gzip")                     },
+	[44] = { .n = IST("content-type"),                     .v = IST("application/dns-message")  },
+	[45] = { .n = IST("content-type"),                     .v = IST("application/javascript")   },
+	[46] = { .n = IST("content-type"),                     .v = IST("application/json")         },
+	[47] = { .n = IST("content-type"),                     .v = IST("application/"
+	                                                                "x-www-form-urlencoded")    },
+	[48] = { .n = IST("content-type"),                     .v = IST("image/gif")                },
+	[49] = { .n = IST("content-type"),                     .v = IST("image/jpeg")               },
+	[50] = { .n = IST("content-type"),                     .v = IST("image/png")                },
+	[51] = { .n = IST("content-type"),                     .v = IST("text/css")                 },
+	[52] = { .n = IST("content-type"),                     .v = IST("text/html;"
+	                                                                " charset=utf-8")           },
+	[53] = { .n = IST("content-type"),                     .v = IST("text/plain")               },
+	[54] = { .n = IST("content-type"),                     .v = IST("text/plain;"
+	                                                                "charset=utf-8")            },
+	[55] = { .n = IST("range"),                            .v = IST("bytes=0-")                 },
+	[56] = { .n = IST("strict-transport-security"),        .v = IST("max-age=31536000")         },
+	[57] = { .n = IST("strict-transport-security"),        .v = IST("max-age=31536000;"
+	                                                                " includesubdomains")       },
+	[58] = { .n = IST("strict-transport-security"),        .v = IST("max-age=31536000;"
+	                                                                " includesubdomains;"
+	                                                                " preload")                 },
+	[59] = { .n = IST("vary"),                             .v = IST("accept-encoding")          },
+	[60] = { .n = IST("vary"),                             .v = IST("origin")                   },
+	[61] = { .n = IST("x-content-type-options"),           .v = IST("nosniff")                  },
+	[62] = { .n = IST("x-xss-protection"),                 .v = IST("1; mode=block")            },
+	[63] = { .n = IST(":status"),                          .v = IST("100")                      },
+	[64] = { .n = IST(":status"),                          .v = IST("204")                      },
+	[65] = { .n = IST(":status"),                          .v = IST("206")                      },
+	[66] = { .n = IST(":status"),                          .v = IST("302")                      },
+	[67] = { .n = IST(":status"),                          .v = IST("400")                      },
+	[68] = { .n = IST(":status"),                          .v = IST("403")                      },
+	[69] = { .n = IST(":status"),                          .v = IST("421")                      },
+	[70] = { .n = IST(":status"),                          .v = IST("425")                      },
+	[71] = { .n = IST(":status"),                          .v = IST("500")                      },
+	[72] = { .n = IST("accept-language"),                  .v = IST("")                         },
+	[73] = { .n = IST("access-control-allow-credentials"), .v = IST("FALSE")                    },
+	[74] = { .n = IST("access-control-allow-credentials"), .v = IST("TRUE")                     },
+	[75] = { .n = IST("access-control-allow-headers"),     .v = IST("*")                        },
+	[76] = { .n = IST("access-control-allow-methods"),     .v = IST("get")                      },
+	[77] = { .n = IST("access-control-allow-methods"),     .v = IST("get, post, options")       },
+	[78] = { .n = IST("access-control-allow-methods"),     .v = IST("options")                  },
+	[79] = { .n = IST("access-control-expose-headers"),    .v = IST("content-length")           },
+	[80] = { .n = IST("access-control-request-headers"),   .v = IST("content-type")             },
+	[81] = { .n = IST("access-control-request-method"),    .v = IST("get")                      },
+	[82] = { .n = IST("access-control-request-method"),    .v = IST("post")                     },
+	[83] = { .n = IST("alt-svc"),                          .v = IST("clear")                    },
+	[84] = { .n = IST("authorization"),                    .v = IST("")                         },
+	[85] = { .n = IST("content-security-policy"),          .v = IST("script-src 'none';"
+	                                                                " object-src 'none';"
+	                                                                " base-uri 'none'")         },
+	[86] = { .n = IST("early-data"),                       .v = IST("1")                        },
+	[87] = { .n = IST("expect-ct"),                        .v = IST("")                         },
+	[88] = { .n = IST("forwarded"),                        .v = IST("")                         },
+	[89] = { .n = IST("if-range"),                         .v = IST("")                         },
+	[90] = { .n = IST("origin"),                           .v = IST("")                         },
+	[91] = { .n = IST("purpose"),                          .v = IST("prefetch")                 },
+	[92] = { .n = IST("server"),                           .v = IST("")                         },
+	[93] = { .n = IST("timing-allow-origin"),              .v = IST("*")                        },
+	[94] = { .n = IST("upgrade-insecure-requests"),        .v = IST("1")                        },
+	[95] = { .n = IST("user-agent"),                       .v = IST("")                         },
+	[96] = { .n = IST("x-forwarded-for"),                  .v = IST("")                         },
+	[97] = { .n = IST("x-frame-options"),                  .v = IST("deny")                     },
+	[98] = { .n = IST("x-frame-options"),                  .v = IST("sameorigin")               },
+};
+