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.
5 #ifndef NET_SPDY_HPACK_CONSTANTS_H_
6 #define NET_SPDY_HPACK_CONSTANTS_H_
10 #include "base/basictypes.h"
11 #include "net/base/net_export.h"
13 // All section references below are to
14 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08
18 // An HpackPrefix signifies |bits| stored in the top |bit_size| bits
25 // Represents a symbol and its Huffman code (stored in most-significant bits).
26 struct HpackHuffmanSymbol
{
32 class HpackHuffmanTable
;
34 const uint32 kDefaultHeaderTableSizeSetting
= 4096;
36 // Largest string literal an HpackDecoder/HpackEncoder will attempt to process
37 // before returning an error.
38 const uint32 kDefaultMaxStringLiteralSize
= 16 * 1024;
40 // Maximum amount of encoded header buffer HpackDecoder will retain before
41 // returning an error.
42 // TODO(jgraettinger): Remove with SpdyHeadersHandlerInterface switch.
43 const uint32 kMaxDecodeBufferSize
= 32 * 1024;
45 // 6.2: Flag for a string literal that is stored unmodified (i.e.,
46 // without Huffman encoding).
47 const HpackPrefix kStringLiteralIdentityEncoded
= { 0x0, 1 };
49 // 6.2: Flag for a Huffman-coded string literal.
50 const HpackPrefix kStringLiteralHuffmanEncoded
= { 0x1, 1 };
52 // 7.1: Opcode for an indexed header field.
53 const HpackPrefix kIndexedOpcode
= { 0x1, 1 };
55 // 7.2.1: Opcode for a literal header field with incremental indexing.
56 const HpackPrefix kLiteralIncrementalIndexOpcode
= { 0x1, 2 };
58 // 7.2.2: Opcode for a literal header field without indexing.
59 const HpackPrefix kLiteralNoIndexOpcode
= { 0x0, 4 };
61 // 7.2.3: Opcode for a literal header field which is never indexed.
62 const HpackPrefix kLiteralNeverIndexOpcode
= { 0x1, 4 };
64 // 7.3: Opcode for maximum header table size update. Begins a varint-encoded
65 // table size with a 5-bit prefix.
66 const HpackPrefix kHeaderTableSizeUpdateOpcode
= { 0x1, 3 };
68 // Returns symbol code table from "Appendix C. Huffman Codes".
69 NET_EXPORT_PRIVATE
std::vector
<HpackHuffmanSymbol
> HpackHuffmanCode();
71 // Returns a HpackHuffmanTable instance initialized with |kHpackHuffmanCode|.
72 // The instance is read-only, has static lifetime, and is safe to share amoung
73 // threads. This function is thread-safe.
74 NET_EXPORT_PRIVATE
const HpackHuffmanTable
& ObtainHpackHuffmanTable();
78 #endif // NET_SPDY_HPACK_CONSTANTS_H_