xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/spdy/core/hpack/hpack_constants.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/spdy/core/hpack/hpack_constants.h"
6 
7 #include <vector>
8 
9 #include "absl/base/macros.h"
10 #include "quiche/common/platform/api/quiche_logging.h"
11 #include "quiche/spdy/core/hpack/hpack_static_table.h"
12 
13 namespace spdy {
14 
15 // Produced by applying the python program [1] with tables provided by [2]
16 // (inserted into the source of the python program) and copy-paste them into
17 // this file.
18 //
19 // [1] net/tools/build_hpack_constants.py in Chromium
20 // [2] http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08
21 
22 // HpackHuffmanSymbol entries are initialized as {code, length, id}.
23 // Codes are specified in the |length| most-significant bits of |code|.
HpackHuffmanCodeVector()24 const std::vector<HpackHuffmanSymbol>& HpackHuffmanCodeVector() {
25   static const auto* kHpackHuffmanCode = new std::vector<HpackHuffmanSymbol>{
26       {0xffc00000ul, 13, 0},    //     11111111|11000
27       {0xffffb000ul, 23, 1},    //     11111111|11111111|1011000
28       {0xfffffe20ul, 28, 2},    //     11111111|11111111|11111110|0010
29       {0xfffffe30ul, 28, 3},    //     11111111|11111111|11111110|0011
30       {0xfffffe40ul, 28, 4},    //     11111111|11111111|11111110|0100
31       {0xfffffe50ul, 28, 5},    //     11111111|11111111|11111110|0101
32       {0xfffffe60ul, 28, 6},    //     11111111|11111111|11111110|0110
33       {0xfffffe70ul, 28, 7},    //     11111111|11111111|11111110|0111
34       {0xfffffe80ul, 28, 8},    //     11111111|11111111|11111110|1000
35       {0xffffea00ul, 24, 9},    //     11111111|11111111|11101010
36       {0xfffffff0ul, 30, 10},   //     11111111|11111111|11111111|111100
37       {0xfffffe90ul, 28, 11},   //     11111111|11111111|11111110|1001
38       {0xfffffea0ul, 28, 12},   //     11111111|11111111|11111110|1010
39       {0xfffffff4ul, 30, 13},   //     11111111|11111111|11111111|111101
40       {0xfffffeb0ul, 28, 14},   //     11111111|11111111|11111110|1011
41       {0xfffffec0ul, 28, 15},   //     11111111|11111111|11111110|1100
42       {0xfffffed0ul, 28, 16},   //     11111111|11111111|11111110|1101
43       {0xfffffee0ul, 28, 17},   //     11111111|11111111|11111110|1110
44       {0xfffffef0ul, 28, 18},   //     11111111|11111111|11111110|1111
45       {0xffffff00ul, 28, 19},   //     11111111|11111111|11111111|0000
46       {0xffffff10ul, 28, 20},   //     11111111|11111111|11111111|0001
47       {0xffffff20ul, 28, 21},   //     11111111|11111111|11111111|0010
48       {0xfffffff8ul, 30, 22},   //     11111111|11111111|11111111|111110
49       {0xffffff30ul, 28, 23},   //     11111111|11111111|11111111|0011
50       {0xffffff40ul, 28, 24},   //     11111111|11111111|11111111|0100
51       {0xffffff50ul, 28, 25},   //     11111111|11111111|11111111|0101
52       {0xffffff60ul, 28, 26},   //     11111111|11111111|11111111|0110
53       {0xffffff70ul, 28, 27},   //     11111111|11111111|11111111|0111
54       {0xffffff80ul, 28, 28},   //     11111111|11111111|11111111|1000
55       {0xffffff90ul, 28, 29},   //     11111111|11111111|11111111|1001
56       {0xffffffa0ul, 28, 30},   //     11111111|11111111|11111111|1010
57       {0xffffffb0ul, 28, 31},   //     11111111|11111111|11111111|1011
58       {0x50000000ul, 6, 32},    // ' ' 010100
59       {0xfe000000ul, 10, 33},   // '!' 11111110|00
60       {0xfe400000ul, 10, 34},   // '"' 11111110|01
61       {0xffa00000ul, 12, 35},   // '#' 11111111|1010
62       {0xffc80000ul, 13, 36},   // '$' 11111111|11001
63       {0x54000000ul, 6, 37},    // '%' 010101
64       {0xf8000000ul, 8, 38},    // '&' 11111000
65       {0xff400000ul, 11, 39},   // ''' 11111111|010
66       {0xfe800000ul, 10, 40},   // '(' 11111110|10
67       {0xfec00000ul, 10, 41},   // ')' 11111110|11
68       {0xf9000000ul, 8, 42},    // '*' 11111001
69       {0xff600000ul, 11, 43},   // '+' 11111111|011
70       {0xfa000000ul, 8, 44},    // ',' 11111010
71       {0x58000000ul, 6, 45},    // '-' 010110
72       {0x5c000000ul, 6, 46},    // '.' 010111
73       {0x60000000ul, 6, 47},    // '/' 011000
74       {0x00000000ul, 5, 48},    // '0' 00000
75       {0x08000000ul, 5, 49},    // '1' 00001
76       {0x10000000ul, 5, 50},    // '2' 00010
77       {0x64000000ul, 6, 51},    // '3' 011001
78       {0x68000000ul, 6, 52},    // '4' 011010
79       {0x6c000000ul, 6, 53},    // '5' 011011
80       {0x70000000ul, 6, 54},    // '6' 011100
81       {0x74000000ul, 6, 55},    // '7' 011101
82       {0x78000000ul, 6, 56},    // '8' 011110
83       {0x7c000000ul, 6, 57},    // '9' 011111
84       {0xb8000000ul, 7, 58},    // ':' 1011100
85       {0xfb000000ul, 8, 59},    // ';' 11111011
86       {0xfff80000ul, 15, 60},   // '<' 11111111|1111100
87       {0x80000000ul, 6, 61},    // '=' 100000
88       {0xffb00000ul, 12, 62},   // '>' 11111111|1011
89       {0xff000000ul, 10, 63},   // '?' 11111111|00
90       {0xffd00000ul, 13, 64},   // '@' 11111111|11010
91       {0x84000000ul, 6, 65},    // 'A' 100001
92       {0xba000000ul, 7, 66},    // 'B' 1011101
93       {0xbc000000ul, 7, 67},    // 'C' 1011110
94       {0xbe000000ul, 7, 68},    // 'D' 1011111
95       {0xc0000000ul, 7, 69},    // 'E' 1100000
96       {0xc2000000ul, 7, 70},    // 'F' 1100001
97       {0xc4000000ul, 7, 71},    // 'G' 1100010
98       {0xc6000000ul, 7, 72},    // 'H' 1100011
99       {0xc8000000ul, 7, 73},    // 'I' 1100100
100       {0xca000000ul, 7, 74},    // 'J' 1100101
101       {0xcc000000ul, 7, 75},    // 'K' 1100110
102       {0xce000000ul, 7, 76},    // 'L' 1100111
103       {0xd0000000ul, 7, 77},    // 'M' 1101000
104       {0xd2000000ul, 7, 78},    // 'N' 1101001
105       {0xd4000000ul, 7, 79},    // 'O' 1101010
106       {0xd6000000ul, 7, 80},    // 'P' 1101011
107       {0xd8000000ul, 7, 81},    // 'Q' 1101100
108       {0xda000000ul, 7, 82},    // 'R' 1101101
109       {0xdc000000ul, 7, 83},    // 'S' 1101110
110       {0xde000000ul, 7, 84},    // 'T' 1101111
111       {0xe0000000ul, 7, 85},    // 'U' 1110000
112       {0xe2000000ul, 7, 86},    // 'V' 1110001
113       {0xe4000000ul, 7, 87},    // 'W' 1110010
114       {0xfc000000ul, 8, 88},    // 'X' 11111100
115       {0xe6000000ul, 7, 89},    // 'Y' 1110011
116       {0xfd000000ul, 8, 90},    // 'Z' 11111101
117       {0xffd80000ul, 13, 91},   // '[' 11111111|11011
118       {0xfffe0000ul, 19, 92},   // '\' 11111111|11111110|000
119       {0xffe00000ul, 13, 93},   // ']' 11111111|11100
120       {0xfff00000ul, 14, 94},   // '^' 11111111|111100
121       {0x88000000ul, 6, 95},    // '_' 100010
122       {0xfffa0000ul, 15, 96},   // '`' 11111111|1111101
123       {0x18000000ul, 5, 97},    // 'a' 00011
124       {0x8c000000ul, 6, 98},    // 'b' 100011
125       {0x20000000ul, 5, 99},    // 'c' 00100
126       {0x90000000ul, 6, 100},   // 'd' 100100
127       {0x28000000ul, 5, 101},   // 'e' 00101
128       {0x94000000ul, 6, 102},   // 'f' 100101
129       {0x98000000ul, 6, 103},   // 'g' 100110
130       {0x9c000000ul, 6, 104},   // 'h' 100111
131       {0x30000000ul, 5, 105},   // 'i' 00110
132       {0xe8000000ul, 7, 106},   // 'j' 1110100
133       {0xea000000ul, 7, 107},   // 'k' 1110101
134       {0xa0000000ul, 6, 108},   // 'l' 101000
135       {0xa4000000ul, 6, 109},   // 'm' 101001
136       {0xa8000000ul, 6, 110},   // 'n' 101010
137       {0x38000000ul, 5, 111},   // 'o' 00111
138       {0xac000000ul, 6, 112},   // 'p' 101011
139       {0xec000000ul, 7, 113},   // 'q' 1110110
140       {0xb0000000ul, 6, 114},   // 'r' 101100
141       {0x40000000ul, 5, 115},   // 's' 01000
142       {0x48000000ul, 5, 116},   // 't' 01001
143       {0xb4000000ul, 6, 117},   // 'u' 101101
144       {0xee000000ul, 7, 118},   // 'v' 1110111
145       {0xf0000000ul, 7, 119},   // 'w' 1111000
146       {0xf2000000ul, 7, 120},   // 'x' 1111001
147       {0xf4000000ul, 7, 121},   // 'y' 1111010
148       {0xf6000000ul, 7, 122},   // 'z' 1111011
149       {0xfffc0000ul, 15, 123},  // '{' 11111111|1111110
150       {0xff800000ul, 11, 124},  // '|' 11111111|100
151       {0xfff40000ul, 14, 125},  // '}' 11111111|111101
152       {0xffe80000ul, 13, 126},  // '~' 11111111|11101
153       {0xffffffc0ul, 28, 127},  //     11111111|11111111|11111111|1100
154       {0xfffe6000ul, 20, 128},  //     11111111|11111110|0110
155       {0xffff4800ul, 22, 129},  //     11111111|11111111|010010
156       {0xfffe7000ul, 20, 130},  //     11111111|11111110|0111
157       {0xfffe8000ul, 20, 131},  //     11111111|11111110|1000
158       {0xffff4c00ul, 22, 132},  //     11111111|11111111|010011
159       {0xffff5000ul, 22, 133},  //     11111111|11111111|010100
160       {0xffff5400ul, 22, 134},  //     11111111|11111111|010101
161       {0xffffb200ul, 23, 135},  //     11111111|11111111|1011001
162       {0xffff5800ul, 22, 136},  //     11111111|11111111|010110
163       {0xffffb400ul, 23, 137},  //     11111111|11111111|1011010
164       {0xffffb600ul, 23, 138},  //     11111111|11111111|1011011
165       {0xffffb800ul, 23, 139},  //     11111111|11111111|1011100
166       {0xffffba00ul, 23, 140},  //     11111111|11111111|1011101
167       {0xffffbc00ul, 23, 141},  //     11111111|11111111|1011110
168       {0xffffeb00ul, 24, 142},  //     11111111|11111111|11101011
169       {0xffffbe00ul, 23, 143},  //     11111111|11111111|1011111
170       {0xffffec00ul, 24, 144},  //     11111111|11111111|11101100
171       {0xffffed00ul, 24, 145},  //     11111111|11111111|11101101
172       {0xffff5c00ul, 22, 146},  //     11111111|11111111|010111
173       {0xffffc000ul, 23, 147},  //     11111111|11111111|1100000
174       {0xffffee00ul, 24, 148},  //     11111111|11111111|11101110
175       {0xffffc200ul, 23, 149},  //     11111111|11111111|1100001
176       {0xffffc400ul, 23, 150},  //     11111111|11111111|1100010
177       {0xffffc600ul, 23, 151},  //     11111111|11111111|1100011
178       {0xffffc800ul, 23, 152},  //     11111111|11111111|1100100
179       {0xfffee000ul, 21, 153},  //     11111111|11111110|11100
180       {0xffff6000ul, 22, 154},  //     11111111|11111111|011000
181       {0xffffca00ul, 23, 155},  //     11111111|11111111|1100101
182       {0xffff6400ul, 22, 156},  //     11111111|11111111|011001
183       {0xffffcc00ul, 23, 157},  //     11111111|11111111|1100110
184       {0xffffce00ul, 23, 158},  //     11111111|11111111|1100111
185       {0xffffef00ul, 24, 159},  //     11111111|11111111|11101111
186       {0xffff6800ul, 22, 160},  //     11111111|11111111|011010
187       {0xfffee800ul, 21, 161},  //     11111111|11111110|11101
188       {0xfffe9000ul, 20, 162},  //     11111111|11111110|1001
189       {0xffff6c00ul, 22, 163},  //     11111111|11111111|011011
190       {0xffff7000ul, 22, 164},  //     11111111|11111111|011100
191       {0xffffd000ul, 23, 165},  //     11111111|11111111|1101000
192       {0xffffd200ul, 23, 166},  //     11111111|11111111|1101001
193       {0xfffef000ul, 21, 167},  //     11111111|11111110|11110
194       {0xffffd400ul, 23, 168},  //     11111111|11111111|1101010
195       {0xffff7400ul, 22, 169},  //     11111111|11111111|011101
196       {0xffff7800ul, 22, 170},  //     11111111|11111111|011110
197       {0xfffff000ul, 24, 171},  //     11111111|11111111|11110000
198       {0xfffef800ul, 21, 172},  //     11111111|11111110|11111
199       {0xffff7c00ul, 22, 173},  //     11111111|11111111|011111
200       {0xffffd600ul, 23, 174},  //     11111111|11111111|1101011
201       {0xffffd800ul, 23, 175},  //     11111111|11111111|1101100
202       {0xffff0000ul, 21, 176},  //     11111111|11111111|00000
203       {0xffff0800ul, 21, 177},  //     11111111|11111111|00001
204       {0xffff8000ul, 22, 178},  //     11111111|11111111|100000
205       {0xffff1000ul, 21, 179},  //     11111111|11111111|00010
206       {0xffffda00ul, 23, 180},  //     11111111|11111111|1101101
207       {0xffff8400ul, 22, 181},  //     11111111|11111111|100001
208       {0xffffdc00ul, 23, 182},  //     11111111|11111111|1101110
209       {0xffffde00ul, 23, 183},  //     11111111|11111111|1101111
210       {0xfffea000ul, 20, 184},  //     11111111|11111110|1010
211       {0xffff8800ul, 22, 185},  //     11111111|11111111|100010
212       {0xffff8c00ul, 22, 186},  //     11111111|11111111|100011
213       {0xffff9000ul, 22, 187},  //     11111111|11111111|100100
214       {0xffffe000ul, 23, 188},  //     11111111|11111111|1110000
215       {0xffff9400ul, 22, 189},  //     11111111|11111111|100101
216       {0xffff9800ul, 22, 190},  //     11111111|11111111|100110
217       {0xffffe200ul, 23, 191},  //     11111111|11111111|1110001
218       {0xfffff800ul, 26, 192},  //     11111111|11111111|11111000|00
219       {0xfffff840ul, 26, 193},  //     11111111|11111111|11111000|01
220       {0xfffeb000ul, 20, 194},  //     11111111|11111110|1011
221       {0xfffe2000ul, 19, 195},  //     11111111|11111110|001
222       {0xffff9c00ul, 22, 196},  //     11111111|11111111|100111
223       {0xffffe400ul, 23, 197},  //     11111111|11111111|1110010
224       {0xffffa000ul, 22, 198},  //     11111111|11111111|101000
225       {0xfffff600ul, 25, 199},  //     11111111|11111111|11110110|0
226       {0xfffff880ul, 26, 200},  //     11111111|11111111|11111000|10
227       {0xfffff8c0ul, 26, 201},  //     11111111|11111111|11111000|11
228       {0xfffff900ul, 26, 202},  //     11111111|11111111|11111001|00
229       {0xfffffbc0ul, 27, 203},  //     11111111|11111111|11111011|110
230       {0xfffffbe0ul, 27, 204},  //     11111111|11111111|11111011|111
231       {0xfffff940ul, 26, 205},  //     11111111|11111111|11111001|01
232       {0xfffff100ul, 24, 206},  //     11111111|11111111|11110001
233       {0xfffff680ul, 25, 207},  //     11111111|11111111|11110110|1
234       {0xfffe4000ul, 19, 208},  //     11111111|11111110|010
235       {0xffff1800ul, 21, 209},  //     11111111|11111111|00011
236       {0xfffff980ul, 26, 210},  //     11111111|11111111|11111001|10
237       {0xfffffc00ul, 27, 211},  //     11111111|11111111|11111100|000
238       {0xfffffc20ul, 27, 212},  //     11111111|11111111|11111100|001
239       {0xfffff9c0ul, 26, 213},  //     11111111|11111111|11111001|11
240       {0xfffffc40ul, 27, 214},  //     11111111|11111111|11111100|010
241       {0xfffff200ul, 24, 215},  //     11111111|11111111|11110010
242       {0xffff2000ul, 21, 216},  //     11111111|11111111|00100
243       {0xffff2800ul, 21, 217},  //     11111111|11111111|00101
244       {0xfffffa00ul, 26, 218},  //     11111111|11111111|11111010|00
245       {0xfffffa40ul, 26, 219},  //     11111111|11111111|11111010|01
246       {0xffffffd0ul, 28, 220},  //     11111111|11111111|11111111|1101
247       {0xfffffc60ul, 27, 221},  //     11111111|11111111|11111100|011
248       {0xfffffc80ul, 27, 222},  //     11111111|11111111|11111100|100
249       {0xfffffca0ul, 27, 223},  //     11111111|11111111|11111100|101
250       {0xfffec000ul, 20, 224},  //     11111111|11111110|1100
251       {0xfffff300ul, 24, 225},  //     11111111|11111111|11110011
252       {0xfffed000ul, 20, 226},  //     11111111|11111110|1101
253       {0xffff3000ul, 21, 227},  //     11111111|11111111|00110
254       {0xffffa400ul, 22, 228},  //     11111111|11111111|101001
255       {0xffff3800ul, 21, 229},  //     11111111|11111111|00111
256       {0xffff4000ul, 21, 230},  //     11111111|11111111|01000
257       {0xffffe600ul, 23, 231},  //     11111111|11111111|1110011
258       {0xffffa800ul, 22, 232},  //     11111111|11111111|101010
259       {0xffffac00ul, 22, 233},  //     11111111|11111111|101011
260       {0xfffff700ul, 25, 234},  //     11111111|11111111|11110111|0
261       {0xfffff780ul, 25, 235},  //     11111111|11111111|11110111|1
262       {0xfffff400ul, 24, 236},  //     11111111|11111111|11110100
263       {0xfffff500ul, 24, 237},  //     11111111|11111111|11110101
264       {0xfffffa80ul, 26, 238},  //     11111111|11111111|11111010|10
265       {0xffffe800ul, 23, 239},  //     11111111|11111111|1110100
266       {0xfffffac0ul, 26, 240},  //     11111111|11111111|11111010|11
267       {0xfffffcc0ul, 27, 241},  //     11111111|11111111|11111100|110
268       {0xfffffb00ul, 26, 242},  //     11111111|11111111|11111011|00
269       {0xfffffb40ul, 26, 243},  //     11111111|11111111|11111011|01
270       {0xfffffce0ul, 27, 244},  //     11111111|11111111|11111100|111
271       {0xfffffd00ul, 27, 245},  //     11111111|11111111|11111101|000
272       {0xfffffd20ul, 27, 246},  //     11111111|11111111|11111101|001
273       {0xfffffd40ul, 27, 247},  //     11111111|11111111|11111101|010
274       {0xfffffd60ul, 27, 248},  //     11111111|11111111|11111101|011
275       {0xffffffe0ul, 28, 249},  //     11111111|11111111|11111111|1110
276       {0xfffffd80ul, 27, 250},  //     11111111|11111111|11111101|100
277       {0xfffffda0ul, 27, 251},  //     11111111|11111111|11111101|101
278       {0xfffffdc0ul, 27, 252},  //     11111111|11111111|11111101|110
279       {0xfffffde0ul, 27, 253},  //     11111111|11111111|11111101|111
280       {0xfffffe00ul, 27, 254},  //     11111111|11111111|11111110|000
281       {0xfffffb80ul, 26, 255},  //     11111111|11111111|11111011|10
282       {0xfffffffcul, 30, 256},  // EOS 11111111|11111111|11111111|111111
283   };
284   return *kHpackHuffmanCode;
285 }
286 
287 // The "constructor" for a HpackStaticEntry that computes the lengths at
288 // compile time.
289 #define STATIC_ENTRY(name, value) \
290   { name, ABSL_ARRAYSIZE(name) - 1, value, ABSL_ARRAYSIZE(value) - 1 }
291 
HpackStaticTableVector()292 const std::vector<HpackStaticEntry>& HpackStaticTableVector() {
293   static const auto* kHpackStaticTable = new std::vector<HpackStaticEntry>{
294       STATIC_ENTRY(":authority", ""),                    // 1
295       STATIC_ENTRY(":method", "GET"),                    // 2
296       STATIC_ENTRY(":method", "POST"),                   // 3
297       STATIC_ENTRY(":path", "/"),                        // 4
298       STATIC_ENTRY(":path", "/index.html"),              // 5
299       STATIC_ENTRY(":scheme", "http"),                   // 6
300       STATIC_ENTRY(":scheme", "https"),                  // 7
301       STATIC_ENTRY(":status", "200"),                    // 8
302       STATIC_ENTRY(":status", "204"),                    // 9
303       STATIC_ENTRY(":status", "206"),                    // 10
304       STATIC_ENTRY(":status", "304"),                    // 11
305       STATIC_ENTRY(":status", "400"),                    // 12
306       STATIC_ENTRY(":status", "404"),                    // 13
307       STATIC_ENTRY(":status", "500"),                    // 14
308       STATIC_ENTRY("accept-charset", ""),                // 15
309       STATIC_ENTRY("accept-encoding", "gzip, deflate"),  // 16
310       STATIC_ENTRY("accept-language", ""),               // 17
311       STATIC_ENTRY("accept-ranges", ""),                 // 18
312       STATIC_ENTRY("accept", ""),                        // 19
313       STATIC_ENTRY("access-control-allow-origin", ""),   // 20
314       STATIC_ENTRY("age", ""),                           // 21
315       STATIC_ENTRY("allow", ""),                         // 22
316       STATIC_ENTRY("authorization", ""),                 // 23
317       STATIC_ENTRY("cache-control", ""),                 // 24
318       STATIC_ENTRY("content-disposition", ""),           // 25
319       STATIC_ENTRY("content-encoding", ""),              // 26
320       STATIC_ENTRY("content-language", ""),              // 27
321       STATIC_ENTRY("content-length", ""),                // 28
322       STATIC_ENTRY("content-location", ""),              // 29
323       STATIC_ENTRY("content-range", ""),                 // 30
324       STATIC_ENTRY("content-type", ""),                  // 31
325       STATIC_ENTRY("cookie", ""),                        // 32
326       STATIC_ENTRY("date", ""),                          // 33
327       STATIC_ENTRY("etag", ""),                          // 34
328       STATIC_ENTRY("expect", ""),                        // 35
329       STATIC_ENTRY("expires", ""),                       // 36
330       STATIC_ENTRY("from", ""),                          // 37
331       STATIC_ENTRY("host", ""),                          // 38
332       STATIC_ENTRY("if-match", ""),                      // 39
333       STATIC_ENTRY("if-modified-since", ""),             // 40
334       STATIC_ENTRY("if-none-match", ""),                 // 41
335       STATIC_ENTRY("if-range", ""),                      // 42
336       STATIC_ENTRY("if-unmodified-since", ""),           // 43
337       STATIC_ENTRY("last-modified", ""),                 // 44
338       STATIC_ENTRY("link", ""),                          // 45
339       STATIC_ENTRY("location", ""),                      // 46
340       STATIC_ENTRY("max-forwards", ""),                  // 47
341       STATIC_ENTRY("proxy-authenticate", ""),            // 48
342       STATIC_ENTRY("proxy-authorization", ""),           // 49
343       STATIC_ENTRY("range", ""),                         // 50
344       STATIC_ENTRY("referer", ""),                       // 51
345       STATIC_ENTRY("refresh", ""),                       // 52
346       STATIC_ENTRY("retry-after", ""),                   // 53
347       STATIC_ENTRY("server", ""),                        // 54
348       STATIC_ENTRY("set-cookie", ""),                    // 55
349       STATIC_ENTRY("strict-transport-security", ""),     // 56
350       STATIC_ENTRY("transfer-encoding", ""),             // 57
351       STATIC_ENTRY("user-agent", ""),                    // 58
352       STATIC_ENTRY("vary", ""),                          // 59
353       STATIC_ENTRY("via", ""),                           // 60
354       STATIC_ENTRY("www-authenticate", ""),              // 61
355   };
356   return *kHpackStaticTable;
357 }
358 
359 #undef STATIC_ENTRY
360 
ObtainHpackStaticTable()361 const HpackStaticTable& ObtainHpackStaticTable() {
362   static const HpackStaticTable* const shared_static_table = []() {
363     auto* table = new HpackStaticTable();
364     table->Initialize(HpackStaticTableVector().data(),
365                       HpackStaticTableVector().size());
366     QUICHE_CHECK(table->IsInitialized());
367     return table;
368   }();
369   return *shared_static_table;
370 }
371 
372 }  // namespace spdy
373