1#!/usr/bin/perl
2# Generate static table enums
3
4use strict;
5use warnings;
6
7my @table = (
8    ":authority", "",
9    ":path", "/",
10    "age", "0",
11    "content-disposition", "",
12    "content-length", "0",
13    "cookie", "",
14    "date", "",
15    "etag", "",
16    "if-modified-since", "",
17    "if-none-match", "",
18    "last-modified", "",
19    "link", "",
20    "location", "",
21    "referer", "",
22    "set-cookie", "",
23    ":method", "CONNECT",
24    ":method", "DELETE",
25    ":method", "GET",
26    ":method", "HEAD",
27    ":method", "OPTIONS",
28    ":method", "POST",
29    ":method", "PUT",
30    ":scheme", "http",
31    ":scheme", "https",
32    ":status", "103",
33    ":status", "200",
34    ":status", "304",
35    ":status", "404",
36    ":status", "503",
37    "accept", "*/*",
38    "accept", "application/dns-message",
39    "accept-encoding", "gzip, deflate, br",
40    "accept-ranges", "bytes",
41    "access-control-allow-headers", "cache-control",
42    "access-control-allow-headers", "content-type",
43    "access-control-allow-origin", "*",
44    "cache-control", "max-age=0",
45    "cache-control", "max-age=2592000",
46    "cache-control", "max-age=604800",
47    "cache-control", "no-cache",
48    "cache-control", "no-store",
49    "cache-control", "public, max-age=31536000",
50    "content-encoding", "br",
51    "content-encoding", "gzip",
52    "content-type", "application/dns-message",
53    "content-type", "application/javascript",
54    "content-type", "application/json",
55    "content-type", "application/x-www-form-urlencoded",
56    "content-type", "image/gif",
57    "content-type", "image/jpeg",
58    "content-type", "image/png",
59    "content-type", "text/css",
60    "content-type", "text/html; charset=utf-8",
61    "content-type", "text/plain",
62    "content-type", "text/plain;charset=utf-8",
63    "range", "bytes=0-",
64    "strict-transport-security", "max-age=31536000",
65    "strict-transport-security", "max-age=31536000; includesubdomains",
66    "strict-transport-security", "max-age=31536000; includesubdomains; preload",
67    "vary", "accept-encoding",
68    "vary", "origin",
69    "x-content-type-options", "nosniff",
70    "x-xss-protection", "1; mode=block",
71    ":status", "100",
72    ":status", "204",
73    ":status", "206",
74    ":status", "302",
75    ":status", "400",
76    ":status", "403",
77    ":status", "421",
78    ":status", "425",
79    ":status", "500",
80    "accept-language", "",
81    "access-control-allow-credentials", "FALSE",
82    "access-control-allow-credentials", "TRUE",
83    "access-control-allow-headers", "*",
84    "access-control-allow-methods", "get",
85    "access-control-allow-methods", "get, post, options",
86    "access-control-allow-methods", "options",
87    "access-control-expose-headers", "content-length",
88    "access-control-request-headers", "content-type",
89    "access-control-request-method", "get",
90    "access-control-request-method", "post",
91    "alt-svc", "clear",
92    "authorization", "",
93    "content-security-policy", "script-src 'none'; object-src 'none'; base-uri 'none'",
94    "early-data", "1",
95    "expect-ct", "",
96    "forwarded", "",
97    "if-range", "",
98    "origin", "",
99    "purpose", "prefetch",
100    "server", "",
101    "timing-allow-origin", "*",
102    "upgrade-insecure-requests", "1",
103    "user-agent", "",
104    "x-forwarded-for", "",
105    "x-frame-options", "deny",
106    "x-frame-options", "sameorigin",
107);
108
109
110my $idx = 0;
111print "enum lsqpack_tnam {\n";
112while (my ($name, $value) = splice(@table, 0, 2)) {
113    my $enum = "$name-$value";
114    $enum =~ tr/a-z/A-Z/;
115    $enum =~ tr/-/_/;
116    $enum =~ s~[^A-Z0-9_]~_~g;
117    $enum =~ s/_+/_/g;
118    $enum =~ s/_+$//;
119    $enum =~ s/^_+//;
120    print "    LSQPACK_TNV_$enum = $idx, /* \"$name\" \"$value\" */\n";
121    ++$idx;
122}
123print "};\n\n";
124