]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: qpack: Add static header table definitions for QPACK.
authorFrédéric Lécaille <flecaille@haproxy.com>
Tue, 22 Dec 2020 15:01:57 +0000 (16:01 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 4 Jan 2021 11:31:28 +0000 (12:31 +0100)
As HPACK, QPACK makes usage of a static header table.

include/haproxy/qpack-tbl-t.h [new file with mode: 0644]
src/qpack-tbl.c [new file with mode: 0644]

diff --git a/include/haproxy/qpack-tbl-t.h b/include/haproxy/qpack-tbl-t.h
new file mode 100644 (file)
index 0000000..fd498ee
--- /dev/null
@@ -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 (file)
index 0000000..4a501c1
--- /dev/null
@@ -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")               },
+};
+