| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_SPDY_HPACK_CONSTANTS_H_ | 5 #ifndef NET_SPDY_HPACK_CONSTANTS_H_ |
| 6 #define NET_SPDY_HPACK_CONSTANTS_H_ | 6 #define NET_SPDY_HPACK_CONSTANTS_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "net/base/net_export.h" | 11 #include "net/base/net_export.h" |
| 12 | 12 |
| 13 // All section references below are to | 13 // All section references below are to |
| 14 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-06 | 14 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07 |
| 15 | 15 |
| 16 namespace net { | 16 namespace net { |
| 17 | 17 |
| 18 // An HpackPrefix signifies |bits| stored in the top |bit_size| bits | 18 // An HpackPrefix signifies |bits| stored in the top |bit_size| bits |
| 19 // of an octet. | 19 // of an octet. |
| 20 struct HpackPrefix { | 20 struct HpackPrefix { |
| 21 uint8 bits; | 21 uint8 bits; |
| 22 size_t bit_size; | 22 size_t bit_size; |
| 23 }; | 23 }; |
| 24 | 24 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 // Largest string literal an HpackDecoder/HpackEncoder will attempt to process | 36 // Largest string literal an HpackDecoder/HpackEncoder will attempt to process |
| 37 // before returning an error. | 37 // before returning an error. |
| 38 const uint32 kDefaultMaxStringLiteralSize = 16 * 1024; | 38 const uint32 kDefaultMaxStringLiteralSize = 16 * 1024; |
| 39 | 39 |
| 40 // Maximum amount of encoded header buffer HpackDecoder will retain before | 40 // Maximum amount of encoded header buffer HpackDecoder will retain before |
| 41 // returning an error. | 41 // returning an error. |
| 42 // TODO(jgraettinger): Remove with SpdyHeadersHandlerInterface switch. | 42 // TODO(jgraettinger): Remove with SpdyHeadersHandlerInterface switch. |
| 43 const uint32 kMaxDecodeBufferSize = 32 * 1024; | 43 const uint32 kMaxDecodeBufferSize = 32 * 1024; |
| 44 | 44 |
| 45 // The marker for a string literal that is stored unmodified (i.e., | 45 // 4.1.2: Flag for a string literal that is stored unmodified (i.e., |
| 46 // without Huffman encoding) (from 4.1.2). | 46 // without Huffman encoding). |
| 47 const HpackPrefix kStringLiteralIdentityEncoded = { 0x0, 1 }; | 47 const HpackPrefix kStringLiteralIdentityEncoded = { 0x0, 1 }; |
| 48 | 48 |
| 49 // The marker for a string literal that is stored with Huffman | 49 // 4.1.2: Flag for a Huffman-coded string literal. |
| 50 // encoding (from 4.1.2). | |
| 51 const HpackPrefix kStringLiteralHuffmanEncoded = { 0x1, 1 }; | 50 const HpackPrefix kStringLiteralHuffmanEncoded = { 0x1, 1 }; |
| 52 | 51 |
| 53 // The opcode for an encoding context update (from 4.2). | 52 // 4.2: Opcode for an indexed header field. |
| 54 // This is an indexed header representation with special index zero, | |
| 55 // and as such this opcode must be tested prior to |kIndexedOpcode|. | |
| 56 const HpackPrefix kEncodingContextOpcode = { 0x80, 8 }; | |
| 57 | |
| 58 // Follows an |kEncodingContextOpcode| to indicate the reference set should be | |
| 59 // cleared. (Section 4.4). | |
| 60 const HpackPrefix kEncodingContextEmptyReferenceSet = { 0x80, 8 }; | |
| 61 | |
| 62 // Follows an |kEncodingContextOpcode| to indicate the encoder is using a new | |
| 63 // maximum headers table size. (Section 4.4). | |
| 64 const HpackPrefix kEncodingContextNewMaximumSize = { 0x0, 1 }; | |
| 65 | |
| 66 // The opcode for an indexed header field (from 4.2). | |
| 67 const HpackPrefix kIndexedOpcode = { 0x1, 1 }; | 53 const HpackPrefix kIndexedOpcode = { 0x1, 1 }; |
| 68 | 54 |
| 69 // The opcode for a literal header field without indexing (from | 55 // 4.3.1: Opcode for a literal header field with incremental indexing. |
| 70 // 4.3.1). | 56 const HpackPrefix kLiteralIncrementalIndexOpcode = { 0x1, 2 }; |
| 71 const HpackPrefix kLiteralNoIndexOpcode = { 0x01, 2 }; | |
| 72 | 57 |
| 73 // The opcode for a literal header field with incremental indexing | 58 // 4.3.2: Opcode for a literal header field without indexing. |
| 74 // (from 4.3.2). | 59 const HpackPrefix kLiteralNoIndexOpcode = { 0x0, 4 }; |
| 75 const HpackPrefix kLiteralIncrementalIndexOpcode = { 0x00, 2 }; | 60 |
| 61 // 4.3.3: Opcode for a literal header field which is never indexed. |
| 62 const HpackPrefix kLiteralNeverIndexOpcode = { 0x1, 4 }; |
| 63 |
| 64 // 4.4: Opcode for an encoding context update. |
| 65 const HpackPrefix kEncodingContextOpcode = { 0x1, 3 }; |
| 66 |
| 67 // 4.4: Flag following an |kEncodingContextOpcode|, which indicates |
| 68 // the reference set should be cleared. |
| 69 const HpackPrefix kEncodingContextEmptyReferenceSet = { 0x10, 5 }; |
| 70 |
| 71 // 4.4: Flag following an |kEncodingContextOpcode|, which indicates |
| 72 // the encoder is using a new maximum headers table size. Begins a |
| 73 // varint-encoded table size with a 4-bit prefix. |
| 74 const HpackPrefix kEncodingContextNewMaximumSize = { 0x0, 1 }; |
| 76 | 75 |
| 77 // Returns symbol code table from "Appendix C. Huffman Codes". | 76 // Returns symbol code table from "Appendix C. Huffman Codes". |
| 78 NET_EXPORT_PRIVATE std::vector<HpackHuffmanSymbol> HpackHuffmanCode(); | 77 NET_EXPORT_PRIVATE std::vector<HpackHuffmanSymbol> HpackHuffmanCode(); |
| 79 | 78 |
| 80 // Returns a HpackHuffmanTable instance initialized with |kHpackHuffmanCode|. | 79 // Returns a HpackHuffmanTable instance initialized with |kHpackHuffmanCode|. |
| 81 // The instance is read-only, has static lifetime, and is safe to share amoung | 80 // The instance is read-only, has static lifetime, and is safe to share amoung |
| 82 // threads. This function is thread-safe. | 81 // threads. This function is thread-safe. |
| 83 NET_EXPORT_PRIVATE const HpackHuffmanTable& ObtainHpackHuffmanTable(); | 82 NET_EXPORT_PRIVATE const HpackHuffmanTable& ObtainHpackHuffmanTable(); |
| 84 | 83 |
| 85 } // namespace net | 84 } // namespace net |
| 86 | 85 |
| 87 #endif // NET_SPDY_HPACK_CONSTANTS_H_ | 86 #endif // NET_SPDY_HPACK_CONSTANTS_H_ |
| OLD | NEW |