1 // Copyright 2014 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package hpack 6 7 func pair(name, value string) HeaderField { 8 return HeaderField{Name: name, Value: value} 9 } 10 11 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B 12 var staticTable = [...]HeaderField{ 13 pair(":authority", ""), // index 1 (1-based) 14 pair(":method", "GET"), 15 pair(":method", "POST"), 16 pair(":path", "/"), 17 pair(":path", "/index.html"), 18 pair(":scheme", "http"), 19 pair(":scheme", "https"), 20 pair(":status", "200"), 21 pair(":status", "204"), 22 pair(":status", "206"), 23 pair(":status", "304"), 24 pair(":status", "400"), 25 pair(":status", "404"), 26 pair(":status", "500"), 27 pair("accept-charset", ""), 28 pair("accept-encoding", "gzip, deflate"), 29 pair("accept-language", ""), 30 pair("accept-ranges", ""), 31 pair("accept", ""), 32 pair("access-control-allow-origin", ""), 33 pair("age", ""), 34 pair("allow", ""), 35 pair("authorization", ""), 36 pair("cache-control", ""), 37 pair("content-disposition", ""), 38 pair("content-encoding", ""), 39 pair("content-language", ""), 40 pair("content-length", ""), 41 pair("content-location", ""), 42 pair("content-range", ""), 43 pair("content-type", ""), 44 pair("cookie", ""), 45 pair("date", ""), 46 pair("etag", ""), 47 pair("expect", ""), 48 pair("expires", ""), 49 pair("from", ""), 50 pair("host", ""), 51 pair("if-match", ""), 52 pair("if-modified-since", ""), 53 pair("if-none-match", ""), 54 pair("if-range", ""), 55 pair("if-unmodified-since", ""), 56 pair("last-modified", ""), 57 pair("link", ""), 58 pair("location", ""), 59 pair("max-forwards", ""), 60 pair("proxy-authenticate", ""), 61 pair("proxy-authorization", ""), 62 pair("range", ""), 63 pair("referer", ""), 64 pair("refresh", ""), 65 pair("retry-after", ""), 66 pair("server", ""), 67 pair("set-cookie", ""), 68 pair("strict-transport-security", ""), 69 pair("transfer-encoding", ""), 70 pair("user-agent", ""), 71 pair("vary", ""), 72 pair("via", ""), 73 pair("www-authenticate", ""), 74 } 75 76 var huffmanCodes = [256]uint32{ 77 0x1ff8, 78 0x7fffd8, 79 0xfffffe2, 80 0xfffffe3, 81 0xfffffe4, 82 0xfffffe5, 83 0xfffffe6, 84 0xfffffe7, 85 0xfffffe8, 86 0xffffea, 87 0x3ffffffc, 88 0xfffffe9, 89 0xfffffea, 90 0x3ffffffd, 91 0xfffffeb, 92 0xfffffec, 93 0xfffffed, 94 0xfffffee, 95 0xfffffef, 96 0xffffff0, 97 0xffffff1, 98 0xffffff2, 99 0x3ffffffe, 100 0xffffff3, 101 0xffffff4, 102 0xffffff5, 103 0xffffff6, 104 0xffffff7, 105 0xffffff8, 106 0xffffff9, 107 0xffffffa, 108 0xffffffb, 109 0x14, 110 0x3f8, 111 0x3f9, 112 0xffa, 113 0x1ff9, 114 0x15, 115 0xf8, 116 0x7fa, 117 0x3fa, 118 0x3fb, 119 0xf9, 120 0x7fb, 121 0xfa, 122 0x16, 123 0x17, 124 0x18, 125 0x0, 126 0x1, 127 0x2, 128 0x19, 129 0x1a, 130 0x1b, 131 0x1c, 132 0x1d, 133 0x1e, 134 0x1f, 135 0x5c, 136 0xfb, 137 0x7ffc, 138 0x20, 139 0xffb, 140 0x3fc, 141 0x1ffa, 142 0x21, 143 0x5d, 144 0x5e, 145 0x5f, 146 0x60, 147 0x61, 148 0x62, 149 0x63, 150 0x64, 151 0x65, 152 0x66, 153 0x67, 154 0x68, 155 0x69, 156 0x6a, 157 0x6b, 158 0x6c, 159 0x6d, 160 0x6e, 161 0x6f, 162 0x70, 163 0x71, 164 0x72, 165 0xfc, 166 0x73, 167 0xfd, 168 0x1ffb, 169 0x7fff0, 170 0x1ffc, 171 0x3ffc, 172 0x22, 173 0x7ffd, 174 0x3, 175 0x23, 176 0x4, 177 0x24, 178 0x5, 179 0x25, 180 0x26, 181 0x27, 182 0x6, 183 0x74, 184 0x75, 185 0x28, 186 0x29, 187 0x2a, 188 0x7, 189 0x2b, 190 0x76, 191 0x2c, 192 0x8, 193 0x9, 194 0x2d, 195 0x77, 196 0x78, 197 0x79, 198 0x7a, 199 0x7b, 200 0x7ffe, 201 0x7fc, 202 0x3ffd, 203 0x1ffd, 204 0xffffffc, 205 0xfffe6, 206 0x3fffd2, 207 0xfffe7, 208 0xfffe8, 209 0x3fffd3, 210 0x3fffd4, 211 0x3fffd5, 212 0x7fffd9, 213 0x3fffd6, 214 0x7fffda, 215 0x7fffdb, 216 0x7fffdc, 217 0x7fffdd, 218 0x7fffde, 219 0xffffeb, 220 0x7fffdf, 221 0xffffec, 222 0xffffed, 223 0x3fffd7, 224 0x7fffe0, 225 0xffffee, 226 0x7fffe1, 227 0x7fffe2, 228 0x7fffe3, 229 0x7fffe4, 230 0x1fffdc, 231 0x3fffd8, 232 0x7fffe5, 233 0x3fffd9, 234 0x7fffe6, 235 0x7fffe7, 236 0xffffef, 237 0x3fffda, 238 0x1fffdd, 239 0xfffe9, 240 0x3fffdb, 241 0x3fffdc, 242 0x7fffe8, 243 0x7fffe9, 244 0x1fffde, 245 0x7fffea, 246 0x3fffdd, 247 0x3fffde, 248 0xfffff0, 249 0x1fffdf, 250 0x3fffdf, 251 0x7fffeb, 252 0x7fffec, 253 0x1fffe0, 254 0x1fffe1, 255 0x3fffe0, 256 0x1fffe2, 257 0x7fffed, 258 0x3fffe1, 259 0x7fffee, 260 0x7fffef, 261 0xfffea, 262 0x3fffe2, 263 0x3fffe3, 264 0x3fffe4, 265 0x7ffff0, 266 0x3fffe5, 267 0x3fffe6, 268 0x7ffff1, 269 0x3ffffe0, 270 0x3ffffe1, 271 0xfffeb, 272 0x7fff1, 273 0x3fffe7, 274 0x7ffff2, 275 0x3fffe8, 276 0x1ffffec, 277 0x3ffffe2, 278 0x3ffffe3, 279 0x3ffffe4, 280 0x7ffffde, 281 0x7ffffdf, 282 0x3ffffe5, 283 0xfffff1, 284 0x1ffffed, 285 0x7fff2, 286 0x1fffe3, 287 0x3ffffe6, 288 0x7ffffe0, 289 0x7ffffe1, 290 0x3ffffe7, 291 0x7ffffe2, 292 0xfffff2, 293 0x1fffe4, 294 0x1fffe5, 295 0x3ffffe8, 296 0x3ffffe9, 297 0xffffffd, 298 0x7ffffe3, 299 0x7ffffe4, 300 0x7ffffe5, 301 0xfffec, 302 0xfffff3, 303 0xfffed, 304 0x1fffe6, 305 0x3fffe9, 306 0x1fffe7, 307 0x1fffe8, 308 0x7ffff3, 309 0x3fffea, 310 0x3fffeb, 311 0x1ffffee, 312 0x1ffffef, 313 0xfffff4, 314 0xfffff5, 315 0x3ffffea, 316 0x7ffff4, 317 0x3ffffeb, 318 0x7ffffe6, 319 0x3ffffec, 320 0x3ffffed, 321 0x7ffffe7, 322 0x7ffffe8, 323 0x7ffffe9, 324 0x7ffffea, 325 0x7ffffeb, 326 0xffffffe, 327 0x7ffffec, 328 0x7ffffed, 329 0x7ffffee, 330 0x7ffffef, 331 0x7fffff0, 332 0x3ffffee, 333 } 334 335 var huffmanCodeLen = [256]uint8{ 336 13, 23, 28, 28, 28, 28, 28, 28, 28, 24, 30, 28, 28, 30, 28, 28, 337 28, 28, 28, 28, 28, 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, 338 6, 10, 10, 12, 13, 6, 8, 11, 10, 10, 8, 11, 8, 6, 6, 6, 339 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 15, 6, 12, 10, 340 13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 341 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 13, 19, 13, 14, 6, 342 15, 5, 6, 5, 6, 5, 6, 6, 6, 5, 7, 7, 6, 6, 6, 5, 343 6, 7, 6, 5, 5, 6, 7, 7, 7, 7, 7, 15, 11, 14, 13, 28, 344 20, 22, 20, 20, 22, 22, 22, 23, 22, 23, 23, 23, 23, 23, 24, 23, 345 24, 24, 22, 23, 24, 23, 23, 23, 23, 21, 22, 23, 22, 23, 23, 24, 346 22, 21, 20, 22, 22, 23, 23, 21, 23, 22, 22, 24, 21, 22, 23, 23, 347 21, 21, 22, 21, 23, 22, 23, 23, 20, 22, 22, 22, 23, 22, 22, 23, 348 26, 26, 20, 19, 22, 23, 22, 25, 26, 26, 26, 27, 27, 26, 24, 25, 349 19, 21, 26, 27, 27, 26, 27, 24, 21, 21, 26, 26, 28, 27, 27, 27, 350 20, 24, 20, 21, 22, 21, 21, 23, 22, 22, 25, 25, 24, 24, 26, 23, 351 26, 27, 26, 26, 27, 27, 27, 27, 27, 28, 27, 27, 27, 27, 27, 26, 352 } 353