summaryrefslogtreecommitdiff
path: root/chromium/net/spdy/hpack/hpack_constants.cc
blob: 59a55dac96a537ad6532d38da349932f207cabaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "net/spdy/hpack/hpack_constants.h"

#include <vector>

#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/singleton.h"
#include "net/spdy/hpack/hpack_huffman_table.h"
#include "net/spdy/hpack/hpack_static_table.h"

namespace net {

namespace {

// SharedHpackHuffmanTable is a Singleton wrapping a HpackHuffmanTable
// instance initialized with |kHpackHuffmanCode|.
struct SharedHpackHuffmanTable {
 public:
  SharedHpackHuffmanTable() {
    std::vector<HpackHuffmanSymbol> code = HpackHuffmanCode();
    scoped_ptr<HpackHuffmanTable> mutable_table(new HpackHuffmanTable());
    CHECK(mutable_table->Initialize(&code[0], code.size()));
    CHECK(mutable_table->IsInitialized());
    table.reset(mutable_table.release());
  }

  static SharedHpackHuffmanTable* GetInstance() {
    return base::Singleton<SharedHpackHuffmanTable>::get();
  }

  scoped_ptr<const HpackHuffmanTable> table;
};

// SharedHpackStaticTable is a Singleton wrapping a HpackStaticTable
// instance initialized with |kHpackStaticTable|.
struct SharedHpackStaticTable {
 public:
  SharedHpackStaticTable() {
    std::vector<HpackStaticEntry> static_table = HpackStaticTableVector();
    scoped_ptr<HpackStaticTable> mutable_table(new HpackStaticTable());
    mutable_table->Initialize(&static_table[0], static_table.size());
    CHECK(mutable_table->IsInitialized());
    table.reset(mutable_table.release());
  }

  static SharedHpackStaticTable* GetInstance() {
    return base::Singleton<SharedHpackStaticTable>::get();
  }

  scoped_ptr<const HpackStaticTable> table;
};

}  // namespace

// Produced by applying the python program [1] with tables
// provided by [2] (inserted into the source of the python program)
// and copy-paste them into this file.
//
// [1] net/tools/build_hpack_constants.py
// [2] http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08

// HpackHuffmanSymbol entries are initialized as {code, length, id}.
// Codes are specified in the |length| most-significant bits of |code|.
std::vector<HpackHuffmanSymbol> HpackHuffmanCode() {
  static const HpackHuffmanSymbol kHpackHuffmanCode[] = {
      {0xffc00000ul, 13, 0},    //     11111111|11000
      {0xffffb000ul, 23, 1},    //     11111111|11111111|1011000
      {0xfffffe20ul, 28, 2},    //     11111111|11111111|11111110|0010
      {0xfffffe30ul, 28, 3},    //     11111111|11111111|11111110|0011
      {0xfffffe40ul, 28, 4},    //     11111111|11111111|11111110|0100
      {0xfffffe50ul, 28, 5},    //     11111111|11111111|11111110|0101
      {0xfffffe60ul, 28, 6},    //     11111111|11111111|11111110|0110
      {0xfffffe70ul, 28, 7},    //     11111111|11111111|11111110|0111
      {0xfffffe80ul, 28, 8},    //     11111111|11111111|11111110|1000
      {0xffffea00ul, 24, 9},    //     11111111|11111111|11101010
      {0xfffffff0ul, 30, 10},   //     11111111|11111111|11111111|111100
      {0xfffffe90ul, 28, 11},   //     11111111|11111111|11111110|1001
      {0xfffffea0ul, 28, 12},   //     11111111|11111111|11111110|1010
      {0xfffffff4ul, 30, 13},   //     11111111|11111111|11111111|111101
      {0xfffffeb0ul, 28, 14},   //     11111111|11111111|11111110|1011
      {0xfffffec0ul, 28, 15},   //     11111111|11111111|11111110|1100
      {0xfffffed0ul, 28, 16},   //     11111111|11111111|11111110|1101
      {0xfffffee0ul, 28, 17},   //     11111111|11111111|11111110|1110
      {0xfffffef0ul, 28, 18},   //     11111111|11111111|11111110|1111
      {0xffffff00ul, 28, 19},   //     11111111|11111111|11111111|0000
      {0xffffff10ul, 28, 20},   //     11111111|11111111|11111111|0001
      {0xffffff20ul, 28, 21},   //     11111111|11111111|11111111|0010
      {0xfffffff8ul, 30, 22},   //     11111111|11111111|11111111|111110
      {0xffffff30ul, 28, 23},   //     11111111|11111111|11111111|0011
      {0xffffff40ul, 28, 24},   //     11111111|11111111|11111111|0100
      {0xffffff50ul, 28, 25},   //     11111111|11111111|11111111|0101
      {0xffffff60ul, 28, 26},   //     11111111|11111111|11111111|0110
      {0xffffff70ul, 28, 27},   //     11111111|11111111|11111111|0111
      {0xffffff80ul, 28, 28},   //     11111111|11111111|11111111|1000
      {0xffffff90ul, 28, 29},   //     11111111|11111111|11111111|1001
      {0xffffffa0ul, 28, 30},   //     11111111|11111111|11111111|1010
      {0xffffffb0ul, 28, 31},   //     11111111|11111111|11111111|1011
      {0x50000000ul, 6, 32},    // ' ' 010100
      {0xfe000000ul, 10, 33},   // '!' 11111110|00
      {0xfe400000ul, 10, 34},   // '"' 11111110|01
      {0xffa00000ul, 12, 35},   // '#' 11111111|1010
      {0xffc80000ul, 13, 36},   // '$' 11111111|11001
      {0x54000000ul, 6, 37},    // '%' 010101
      {0xf8000000ul, 8, 38},    // '&' 11111000
      {0xff400000ul, 11, 39},   // ''' 11111111|010
      {0xfe800000ul, 10, 40},   // '(' 11111110|10
      {0xfec00000ul, 10, 41},   // ')' 11111110|11
      {0xf9000000ul, 8, 42},    // '*' 11111001
      {0xff600000ul, 11, 43},   // '+' 11111111|011
      {0xfa000000ul, 8, 44},    // ',' 11111010
      {0x58000000ul, 6, 45},    // '-' 010110
      {0x5c000000ul, 6, 46},    // '.' 010111
      {0x60000000ul, 6, 47},    // '/' 011000
      {0x00000000ul, 5, 48},    // '0' 00000
      {0x08000000ul, 5, 49},    // '1' 00001
      {0x10000000ul, 5, 50},    // '2' 00010
      {0x64000000ul, 6, 51},    // '3' 011001
      {0x68000000ul, 6, 52},    // '4' 011010
      {0x6c000000ul, 6, 53},    // '5' 011011
      {0x70000000ul, 6, 54},    // '6' 011100
      {0x74000000ul, 6, 55},    // '7' 011101
      {0x78000000ul, 6, 56},    // '8' 011110
      {0x7c000000ul, 6, 57},    // '9' 011111
      {0xb8000000ul, 7, 58},    // ':' 1011100
      {0xfb000000ul, 8, 59},    // ';' 11111011
      {0xfff80000ul, 15, 60},   // '<' 11111111|1111100
      {0x80000000ul, 6, 61},    // '=' 100000
      {0xffb00000ul, 12, 62},   // '>' 11111111|1011
      {0xff000000ul, 10, 63},   // '?' 11111111|00
      {0xffd00000ul, 13, 64},   // '@' 11111111|11010
      {0x84000000ul, 6, 65},    // 'A' 100001
      {0xba000000ul, 7, 66},    // 'B' 1011101
      {0xbc000000ul, 7, 67},    // 'C' 1011110
      {0xbe000000ul, 7, 68},    // 'D' 1011111
      {0xc0000000ul, 7, 69},    // 'E' 1100000
      {0xc2000000ul, 7, 70},    // 'F' 1100001
      {0xc4000000ul, 7, 71},    // 'G' 1100010
      {0xc6000000ul, 7, 72},    // 'H' 1100011
      {0xc8000000ul, 7, 73},    // 'I' 1100100
      {0xca000000ul, 7, 74},    // 'J' 1100101
      {0xcc000000ul, 7, 75},    // 'K' 1100110
      {0xce000000ul, 7, 76},    // 'L' 1100111
      {0xd0000000ul, 7, 77},    // 'M' 1101000
      {0xd2000000ul, 7, 78},    // 'N' 1101001
      {0xd4000000ul, 7, 79},    // 'O' 1101010
      {0xd6000000ul, 7, 80},    // 'P' 1101011
      {0xd8000000ul, 7, 81},    // 'Q' 1101100
      {0xda000000ul, 7, 82},    // 'R' 1101101
      {0xdc000000ul, 7, 83},    // 'S' 1101110
      {0xde000000ul, 7, 84},    // 'T' 1101111
      {0xe0000000ul, 7, 85},    // 'U' 1110000
      {0xe2000000ul, 7, 86},    // 'V' 1110001
      {0xe4000000ul, 7, 87},    // 'W' 1110010
      {0xfc000000ul, 8, 88},    // 'X' 11111100
      {0xe6000000ul, 7, 89},    // 'Y' 1110011
      {0xfd000000ul, 8, 90},    // 'Z' 11111101
      {0xffd80000ul, 13, 91},   // '[' 11111111|11011
      {0xfffe0000ul, 19, 92},   // '\' 11111111|11111110|000
      {0xffe00000ul, 13, 93},   // ']' 11111111|11100
      {0xfff00000ul, 14, 94},   // '^' 11111111|111100
      {0x88000000ul, 6, 95},    // '_' 100010
      {0xfffa0000ul, 15, 96},   // '`' 11111111|1111101
      {0x18000000ul, 5, 97},    // 'a' 00011
      {0x8c000000ul, 6, 98},    // 'b' 100011
      {0x20000000ul, 5, 99},    // 'c' 00100
      {0x90000000ul, 6, 100},   // 'd' 100100
      {0x28000000ul, 5, 101},   // 'e' 00101
      {0x94000000ul, 6, 102},   // 'f' 100101
      {0x98000000ul, 6, 103},   // 'g' 100110
      {0x9c000000ul, 6, 104},   // 'h' 100111
      {0x30000000ul, 5, 105},   // 'i' 00110
      {0xe8000000ul, 7, 106},   // 'j' 1110100
      {0xea000000ul, 7, 107},   // 'k' 1110101
      {0xa0000000ul, 6, 108},   // 'l' 101000
      {0xa4000000ul, 6, 109},   // 'm' 101001
      {0xa8000000ul, 6, 110},   // 'n' 101010
      {0x38000000ul, 5, 111},   // 'o' 00111
      {0xac000000ul, 6, 112},   // 'p' 101011
      {0xec000000ul, 7, 113},   // 'q' 1110110
      {0xb0000000ul, 6, 114},   // 'r' 101100
      {0x40000000ul, 5, 115},   // 's' 01000
      {0x48000000ul, 5, 116},   // 't' 01001
      {0xb4000000ul, 6, 117},   // 'u' 101101
      {0xee000000ul, 7, 118},   // 'v' 1110111
      {0xf0000000ul, 7, 119},   // 'w' 1111000
      {0xf2000000ul, 7, 120},   // 'x' 1111001
      {0xf4000000ul, 7, 121},   // 'y' 1111010
      {0xf6000000ul, 7, 122},   // 'z' 1111011
      {0xfffc0000ul, 15, 123},  // '{' 11111111|1111110
      {0xff800000ul, 11, 124},  // '|' 11111111|100
      {0xfff40000ul, 14, 125},  // '}' 11111111|111101
      {0xffe80000ul, 13, 126},  // '~' 11111111|11101
      {0xffffffc0ul, 28, 127},  //     11111111|11111111|11111111|1100
      {0xfffe6000ul, 20, 128},  //     11111111|11111110|0110
      {0xffff4800ul, 22, 129},  //     11111111|11111111|010010
      {0xfffe7000ul, 20, 130},  //     11111111|11111110|0111
      {0xfffe8000ul, 20, 131},  //     11111111|11111110|1000
      {0xffff4c00ul, 22, 132},  //     11111111|11111111|010011
      {0xffff5000ul, 22, 133},  //     11111111|11111111|010100
      {0xffff5400ul, 22, 134},  //     11111111|11111111|010101
      {0xffffb200ul, 23, 135},  //     11111111|11111111|1011001
      {0xffff5800ul, 22, 136},  //     11111111|11111111|010110
      {0xffffb400ul, 23, 137},  //     11111111|11111111|1011010
      {0xffffb600ul, 23, 138},  //     11111111|11111111|1011011
      {0xffffb800ul, 23, 139},  //     11111111|11111111|1011100
      {0xffffba00ul, 23, 140},  //     11111111|11111111|1011101
      {0xffffbc00ul, 23, 141},  //     11111111|11111111|1011110
      {0xffffeb00ul, 24, 142},  //     11111111|11111111|11101011
      {0xffffbe00ul, 23, 143},  //     11111111|11111111|1011111
      {0xffffec00ul, 24, 144},  //     11111111|11111111|11101100
      {0xffffed00ul, 24, 145},  //     11111111|11111111|11101101
      {0xffff5c00ul, 22, 146},  //     11111111|11111111|010111
      {0xffffc000ul, 23, 147},  //     11111111|11111111|1100000
      {0xffffee00ul, 24, 148},  //     11111111|11111111|11101110
      {0xffffc200ul, 23, 149},  //     11111111|11111111|1100001
      {0xffffc400ul, 23, 150},  //     11111111|11111111|1100010
      {0xffffc600ul, 23, 151},  //     11111111|11111111|1100011
      {0xffffc800ul, 23, 152},  //     11111111|11111111|1100100
      {0xfffee000ul, 21, 153},  //     11111111|11111110|11100
      {0xffff6000ul, 22, 154},  //     11111111|11111111|011000
      {0xffffca00ul, 23, 155},  //     11111111|11111111|1100101
      {0xffff6400ul, 22, 156},  //     11111111|11111111|011001
      {0xffffcc00ul, 23, 157},  //     11111111|11111111|1100110
      {0xffffce00ul, 23, 158},  //     11111111|11111111|1100111
      {0xffffef00ul, 24, 159},  //     11111111|11111111|11101111
      {0xffff6800ul, 22, 160},  //     11111111|11111111|011010
      {0xfffee800ul, 21, 161},  //     11111111|11111110|11101
      {0xfffe9000ul, 20, 162},  //     11111111|11111110|1001
      {0xffff6c00ul, 22, 163},  //     11111111|11111111|011011
      {0xffff7000ul, 22, 164},  //     11111111|11111111|011100
      {0xffffd000ul, 23, 165},  //     11111111|11111111|1101000
      {0xffffd200ul, 23, 166},  //     11111111|11111111|1101001
      {0xfffef000ul, 21, 167},  //     11111111|11111110|11110
      {0xffffd400ul, 23, 168},  //     11111111|11111111|1101010
      {0xffff7400ul, 22, 169},  //     11111111|11111111|011101
      {0xffff7800ul, 22, 170},  //     11111111|11111111|011110
      {0xfffff000ul, 24, 171},  //     11111111|11111111|11110000
      {0xfffef800ul, 21, 172},  //     11111111|11111110|11111
      {0xffff7c00ul, 22, 173},  //     11111111|11111111|011111
      {0xffffd600ul, 23, 174},  //     11111111|11111111|1101011
      {0xffffd800ul, 23, 175},  //     11111111|11111111|1101100
      {0xffff0000ul, 21, 176},  //     11111111|11111111|00000
      {0xffff0800ul, 21, 177},  //     11111111|11111111|00001
      {0xffff8000ul, 22, 178},  //     11111111|11111111|100000
      {0xffff1000ul, 21, 179},  //     11111111|11111111|00010
      {0xffffda00ul, 23, 180},  //     11111111|11111111|1101101
      {0xffff8400ul, 22, 181},  //     11111111|11111111|100001
      {0xffffdc00ul, 23, 182},  //     11111111|11111111|1101110
      {0xffffde00ul, 23, 183},  //     11111111|11111111|1101111
      {0xfffea000ul, 20, 184},  //     11111111|11111110|1010
      {0xffff8800ul, 22, 185},  //     11111111|11111111|100010
      {0xffff8c00ul, 22, 186},  //     11111111|11111111|100011
      {0xffff9000ul, 22, 187},  //     11111111|11111111|100100
      {0xffffe000ul, 23, 188},  //     11111111|11111111|1110000
      {0xffff9400ul, 22, 189},  //     11111111|11111111|100101
      {0xffff9800ul, 22, 190},  //     11111111|11111111|100110
      {0xffffe200ul, 23, 191},  //     11111111|11111111|1110001
      {0xfffff800ul, 26, 192},  //     11111111|11111111|11111000|00
      {0xfffff840ul, 26, 193},  //     11111111|11111111|11111000|01
      {0xfffeb000ul, 20, 194},  //     11111111|11111110|1011
      {0xfffe2000ul, 19, 195},  //     11111111|11111110|001
      {0xffff9c00ul, 22, 196},  //     11111111|11111111|100111
      {0xffffe400ul, 23, 197},  //     11111111|11111111|1110010
      {0xffffa000ul, 22, 198},  //     11111111|11111111|101000
      {0xfffff600ul, 25, 199},  //     11111111|11111111|11110110|0
      {0xfffff880ul, 26, 200},  //     11111111|11111111|11111000|10
      {0xfffff8c0ul, 26, 201},  //     11111111|11111111|11111000|11
      {0xfffff900ul, 26, 202},  //     11111111|11111111|11111001|00
      {0xfffffbc0ul, 27, 203},  //     11111111|11111111|11111011|110
      {0xfffffbe0ul, 27, 204},  //     11111111|11111111|11111011|111
      {0xfffff940ul, 26, 205},  //     11111111|11111111|11111001|01
      {0xfffff100ul, 24, 206},  //     11111111|11111111|11110001
      {0xfffff680ul, 25, 207},  //     11111111|11111111|11110110|1
      {0xfffe4000ul, 19, 208},  //     11111111|11111110|010
      {0xffff1800ul, 21, 209},  //     11111111|11111111|00011
      {0xfffff980ul, 26, 210},  //     11111111|11111111|11111001|10
      {0xfffffc00ul, 27, 211},  //     11111111|11111111|11111100|000
      {0xfffffc20ul, 27, 212},  //     11111111|11111111|11111100|001
      {0xfffff9c0ul, 26, 213},  //     11111111|11111111|11111001|11
      {0xfffffc40ul, 27, 214},  //     11111111|11111111|11111100|010
      {0xfffff200ul, 24, 215},  //     11111111|11111111|11110010
      {0xffff2000ul, 21, 216},  //     11111111|11111111|00100
      {0xffff2800ul, 21, 217},  //     11111111|11111111|00101
      {0xfffffa00ul, 26, 218},  //     11111111|11111111|11111010|00
      {0xfffffa40ul, 26, 219},  //     11111111|11111111|11111010|01
      {0xffffffd0ul, 28, 220},  //     11111111|11111111|11111111|1101
      {0xfffffc60ul, 27, 221},  //     11111111|11111111|11111100|011
      {0xfffffc80ul, 27, 222},  //     11111111|11111111|11111100|100
      {0xfffffca0ul, 27, 223},  //     11111111|11111111|11111100|101
      {0xfffec000ul, 20, 224},  //     11111111|11111110|1100
      {0xfffff300ul, 24, 225},  //     11111111|11111111|11110011
      {0xfffed000ul, 20, 226},  //     11111111|11111110|1101
      {0xffff3000ul, 21, 227},  //     11111111|11111111|00110
      {0xffffa400ul, 22, 228},  //     11111111|11111111|101001
      {0xffff3800ul, 21, 229},  //     11111111|11111111|00111
      {0xffff4000ul, 21, 230},  //     11111111|11111111|01000
      {0xffffe600ul, 23, 231},  //     11111111|11111111|1110011
      {0xffffa800ul, 22, 232},  //     11111111|11111111|101010
      {0xffffac00ul, 22, 233},  //     11111111|11111111|101011
      {0xfffff700ul, 25, 234},  //     11111111|11111111|11110111|0
      {0xfffff780ul, 25, 235},  //     11111111|11111111|11110111|1
      {0xfffff400ul, 24, 236},  //     11111111|11111111|11110100
      {0xfffff500ul, 24, 237},  //     11111111|11111111|11110101
      {0xfffffa80ul, 26, 238},  //     11111111|11111111|11111010|10
      {0xffffe800ul, 23, 239},  //     11111111|11111111|1110100
      {0xfffffac0ul, 26, 240},  //     11111111|11111111|11111010|11
      {0xfffffcc0ul, 27, 241},  //     11111111|11111111|11111100|110
      {0xfffffb00ul, 26, 242},  //     11111111|11111111|11111011|00
      {0xfffffb40ul, 26, 243},  //     11111111|11111111|11111011|01
      {0xfffffce0ul, 27, 244},  //     11111111|11111111|11111100|111
      {0xfffffd00ul, 27, 245},  //     11111111|11111111|11111101|000
      {0xfffffd20ul, 27, 246},  //     11111111|11111111|11111101|001
      {0xfffffd40ul, 27, 247},  //     11111111|11111111|11111101|010
      {0xfffffd60ul, 27, 248},  //     11111111|11111111|11111101|011
      {0xffffffe0ul, 28, 249},  //     11111111|11111111|11111111|1110
      {0xfffffd80ul, 27, 250},  //     11111111|11111111|11111101|100
      {0xfffffda0ul, 27, 251},  //     11111111|11111111|11111101|101
      {0xfffffdc0ul, 27, 252},  //     11111111|11111111|11111101|110
      {0xfffffde0ul, 27, 253},  //     11111111|11111111|11111101|111
      {0xfffffe00ul, 27, 254},  //     11111111|11111111|11111110|000
      {0xfffffb80ul, 26, 255},  //     11111111|11111111|11111011|10
      {0xfffffffcul, 30, 256},  // EOS 11111111|11111111|11111111|111111
  };
  return std::vector<HpackHuffmanSymbol>(
      kHpackHuffmanCode, kHpackHuffmanCode + arraysize(kHpackHuffmanCode));
}

// The "constructor" for a HpackStaticEntry that computes the lengths at
// compile time.
#define STATIC_ENTRY(name, value) \
  { name, arraysize(name) - 1, value, arraysize(value) - 1 }

std::vector<HpackStaticEntry> HpackStaticTableVector() {
  static const HpackStaticEntry kHpackStaticTable[] = {
      STATIC_ENTRY(":authority", ""),                    // 1
      STATIC_ENTRY(":method", "GET"),                    // 2
      STATIC_ENTRY(":method", "POST"),                   // 3
      STATIC_ENTRY(":path", "/"),                        // 4
      STATIC_ENTRY(":path", "/index.html"),              // 5
      STATIC_ENTRY(":scheme", "http"),                   // 6
      STATIC_ENTRY(":scheme", "https"),                  // 7
      STATIC_ENTRY(":status", "200"),                    // 8
      STATIC_ENTRY(":status", "204"),                    // 9
      STATIC_ENTRY(":status", "206"),                    // 10
      STATIC_ENTRY(":status", "304"),                    // 11
      STATIC_ENTRY(":status", "400"),                    // 12
      STATIC_ENTRY(":status", "404"),                    // 13
      STATIC_ENTRY(":status", "500"),                    // 14
      STATIC_ENTRY("accept-charset", ""),                // 15
      STATIC_ENTRY("accept-encoding", "gzip, deflate"),  // 16
      STATIC_ENTRY("accept-language", ""),               // 17
      STATIC_ENTRY("accept-ranges", ""),                 // 18
      STATIC_ENTRY("accept", ""),                        // 19
      STATIC_ENTRY("access-control-allow-origin", ""),   // 20
      STATIC_ENTRY("age", ""),                           // 21
      STATIC_ENTRY("allow", ""),                         // 22
      STATIC_ENTRY("authorization", ""),                 // 23
      STATIC_ENTRY("cache-control", ""),                 // 24
      STATIC_ENTRY("content-disposition", ""),           // 25
      STATIC_ENTRY("content-encoding", ""),              // 26
      STATIC_ENTRY("content-language", ""),              // 27
      STATIC_ENTRY("content-length", ""),                // 28
      STATIC_ENTRY("content-location", ""),              // 29
      STATIC_ENTRY("content-range", ""),                 // 30
      STATIC_ENTRY("content-type", ""),                  // 31
      STATIC_ENTRY("cookie", ""),                        // 32
      STATIC_ENTRY("date", ""),                          // 33
      STATIC_ENTRY("etag", ""),                          // 34
      STATIC_ENTRY("expect", ""),                        // 35
      STATIC_ENTRY("expires", ""),                       // 36
      STATIC_ENTRY("from", ""),                          // 37
      STATIC_ENTRY("host", ""),                          // 38
      STATIC_ENTRY("if-match", ""),                      // 39
      STATIC_ENTRY("if-modified-since", ""),             // 40
      STATIC_ENTRY("if-none-match", ""),                 // 41
      STATIC_ENTRY("if-range", ""),                      // 42
      STATIC_ENTRY("if-unmodified-since", ""),           // 43
      STATIC_ENTRY("last-modified", ""),                 // 44
      STATIC_ENTRY("link", ""),                          // 45
      STATIC_ENTRY("location", ""),                      // 46
      STATIC_ENTRY("max-forwards", ""),                  // 47
      STATIC_ENTRY("proxy-authenticate", ""),            // 48
      STATIC_ENTRY("proxy-authorization", ""),           // 49
      STATIC_ENTRY("range", ""),                         // 50
      STATIC_ENTRY("referer", ""),                       // 51
      STATIC_ENTRY("refresh", ""),                       // 52
      STATIC_ENTRY("retry-after", ""),                   // 53
      STATIC_ENTRY("server", ""),                        // 54
      STATIC_ENTRY("set-cookie", ""),                    // 55
      STATIC_ENTRY("strict-transport-security", ""),     // 56
      STATIC_ENTRY("transfer-encoding", ""),             // 57
      STATIC_ENTRY("user-agent", ""),                    // 58
      STATIC_ENTRY("vary", ""),                          // 59
      STATIC_ENTRY("via", ""),                           // 60
      STATIC_ENTRY("www-authenticate", ""),              // 61
  };
  return std::vector<HpackStaticEntry>(
      kHpackStaticTable, kHpackStaticTable + arraysize(kHpackStaticTable));
}

#undef STATIC_ENTRY

const HpackHuffmanTable& ObtainHpackHuffmanTable() {
  return *SharedHpackHuffmanTable::GetInstance()->table;
}

const HpackStaticTable& ObtainHpackStaticTable() {
  return *SharedHpackStaticTable::GetInstance()->table;
}

}  // namespace net