bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 1 | // Copyright (c) 2019 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 | #ifndef QUICHE_QUIC_CORE_HTTP_HTTP_CONSTANTS_H_ |
| 6 | #define QUICHE_QUIC_CORE_HTTP_HTTP_CONSTANTS_H_ |
| 7 | |
| 8 | #include <cstdint> |
bnc | f33be61 | 2021-01-22 11:20:51 -0800 | [diff] [blame] | 9 | #include <string> |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 10 | |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 11 | #include "absl/strings/string_view.h" |
QUICHE team | 5be974e | 2020-12-29 18:35:24 -0500 | [diff] [blame] | 12 | #include "quic/core/quic_types.h" |
vasilvv | 443fa2d | 2021-01-25 11:32:08 -0800 | [diff] [blame] | 13 | #include "quic/platform/api/quic_export.h" |
bnc | 63becfb | 2019-07-29 10:19:53 -0700 | [diff] [blame] | 14 | |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 15 | namespace quic { |
| 16 | |
| 17 | // Unidirectional stream types. |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 18 | enum : uint64_t { |
| 19 | // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#unidirectional-streams |
| 20 | kControlStream = 0x00, |
| 21 | kServerPushStream = 0x01, |
| 22 | // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#enc-dec-stream-def |
| 23 | kQpackEncoderStream = 0x02, |
| 24 | kQpackDecoderStream = 0x03, |
vasilvv | 316f376 | 2021-03-31 13:49:30 -0700 | [diff] [blame] | 25 | // https://ietf-wg-webtrans.github.io/draft-ietf-webtrans-http3/draft-ietf-webtrans-http3.html#name-unidirectional-streams |
| 26 | kWebTransportUnidirectionalStream = 0x54, |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 27 | }; |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 28 | |
renjietang | 241ba60 | 2020-04-29 13:29:46 -0700 | [diff] [blame] | 29 | // This includes control stream, QPACK encoder stream, and QPACK decoder stream. |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 30 | enum : QuicStreamCount { kHttp3StaticUnidirectionalStreamCount = 3 }; |
renjietang | 241ba60 | 2020-04-29 13:29:46 -0700 | [diff] [blame] | 31 | |
bnc | 63becfb | 2019-07-29 10:19:53 -0700 | [diff] [blame] | 32 | // HTTP/3 and QPACK settings identifiers. |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 33 | // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#settings-parameters |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 34 | // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#configuration |
bnc | 63becfb | 2019-07-29 10:19:53 -0700 | [diff] [blame] | 35 | enum Http3AndQpackSettingsIdentifiers : uint64_t { |
| 36 | // Same value as spdy::SETTINGS_HEADER_TABLE_SIZE. |
| 37 | SETTINGS_QPACK_MAX_TABLE_CAPACITY = 0x01, |
| 38 | // Same value as spdy::SETTINGS_MAX_HEADER_LIST_SIZE. |
renjietang | 4e9714d | 2020-09-21 15:25:23 -0700 | [diff] [blame] | 39 | SETTINGS_MAX_FIELD_SECTION_SIZE = 0x06, |
bnc | 63becfb | 2019-07-29 10:19:53 -0700 | [diff] [blame] | 40 | SETTINGS_QPACK_BLOCKED_STREAMS = 0x07, |
dschinazi | 388d7f9 | 2021-02-25 20:58:46 -0800 | [diff] [blame] | 41 | // draft-ietf-masque-h3-datagram. |
| 42 | SETTINGS_H3_DATAGRAM = 0x276, |
vasilvv | 52ca55d | 2021-03-02 13:17:59 -0800 | [diff] [blame] | 43 | // draft-ietf-webtrans-http3-00 |
| 44 | SETTINGS_WEBTRANS_DRAFT00 = 0x2b603742, |
bnc | 63becfb | 2019-07-29 10:19:53 -0700 | [diff] [blame] | 45 | }; |
| 46 | |
bnc | f33be61 | 2021-01-22 11:20:51 -0800 | [diff] [blame] | 47 | // Returns HTTP/3 SETTINGS identifier as a string. |
vasilvv | 443fa2d | 2021-01-25 11:32:08 -0800 | [diff] [blame] | 48 | QUIC_EXPORT std::string H3SettingsToString( |
| 49 | Http3AndQpackSettingsIdentifiers identifier); |
bnc | f33be61 | 2021-01-22 11:20:51 -0800 | [diff] [blame] | 50 | |
bnc | 63becfb | 2019-07-29 10:19:53 -0700 | [diff] [blame] | 51 | // Default maximum dynamic table capacity, communicated via |
| 52 | // SETTINGS_QPACK_MAX_TABLE_CAPACITY. |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 53 | enum : QuicByteCount { |
| 54 | kDefaultQpackMaxDynamicTableCapacity = 64 * 1024 // 64 KB |
| 55 | }; |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 56 | |
renjietang | 2253f4c | 2020-08-05 10:43:56 -0700 | [diff] [blame] | 57 | // Default limit on the size of uncompressed headers, |
| 58 | // communicated via SETTINGS_MAX_HEADER_LIST_SIZE. |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 59 | enum : QuicByteCount { |
| 60 | kDefaultMaxUncompressedHeaderSize = 16 * 1024 // 16 KB |
| 61 | }; |
renjietang | 2253f4c | 2020-08-05 10:43:56 -0700 | [diff] [blame] | 62 | |
bnc | 57b5f62 | 2019-08-21 14:07:44 -0700 | [diff] [blame] | 63 | // Default limit on number of blocked streams, communicated via |
| 64 | // SETTINGS_QPACK_BLOCKED_STREAMS. |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 65 | enum : uint64_t { kDefaultMaximumBlockedStreams = 100 }; |
bnc | 57b5f62 | 2019-08-21 14:07:44 -0700 | [diff] [blame] | 66 | |
dschinazi | 6e3b114 | 2021-03-01 13:34:16 -0800 | [diff] [blame] | 67 | ABSL_CONST_INIT QUIC_EXPORT_PRIVATE extern const absl::string_view |
vasilvv | a778b75 | 2021-03-01 11:07:02 -0800 | [diff] [blame] | 68 | kUserAgentHeaderName; |
bnc | f33be61 | 2021-01-22 11:20:51 -0800 | [diff] [blame] | 69 | |
bnc | 3fc60df | 2019-07-17 11:55:10 -0700 | [diff] [blame] | 70 | } // namespace quic |
| 71 | |
| 72 | #endif // QUICHE_QUIC_CORE_HTTP_HTTP_CONSTANTS_H_ |