1 /*
2  * Copyright (c) Facebook, Inc. and its affiliates.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
9 #pragma once
10 
11 #include <cstdint>
12 #include <utility>
13 
14 namespace proxygen {
15 
16 // Will never be valid HTTP/2 which only has 16 bits
17 #define SPDY_SETTINGS_MASK (1 << 16)
18 #define HQ_SETTINGS_MASK (((uint64_t)1) << 32)
19 
20 enum class SettingsId : uint64_t {
21   // From HTTP/2
22   HEADER_TABLE_SIZE = 1,
23   ENABLE_PUSH = 2,
24   MAX_CONCURRENT_STREAMS = 3,
25   INITIAL_WINDOW_SIZE = 4,
26   MAX_FRAME_SIZE = 5,
27   MAX_HEADER_LIST_SIZE = 6,
28 
29   ENABLE_CONNECT_PROTOCOL = 8,
30 
31   THRIFT_CHANNEL_ID_DEPRECATED = 100,
32 
33   // 0xf000 and 0xffff being reserved for Experimental Use
34   ENABLE_EX_HEADERS = 0xfbfb,
35   THRIFT_CHANNEL_ID = 0xf100,
36 
37   // For secondary authentication in HTTP/2
38   SETTINGS_HTTP_CERT_AUTH = 0xff00,
39 
40   // From SPDY, mostly unused
41   _SPDY_UPLOAD_BANDWIDTH = SPDY_SETTINGS_MASK | 1,
42   _SPDY_DOWNLOAD_BANDWIDTH = SPDY_SETTINGS_MASK | 2,
43   _SPDY_ROUND_TRIP_TIME = SPDY_SETTINGS_MASK | 3,
44   //  MAX_CONCURRENT_STREAMS = 4,
45   _SPDY_CURRENT_CWND = SPDY_SETTINGS_MASK | 5,
46   _SPDY_DOWNLOAD_RETRANS_RATE = SPDY_SETTINGS_MASK | 6,
47   //  INITIAL_WINDOW_SIZE = 7,
48   _SPDY_CLIENT_CERTIFICATE_VECTOR_SIZE = SPDY_SETTINGS_MASK | 8,
49 
50   // From HQ
51   //_HQ_HEADER_TABLE_SIZE = HQ_SETTINGS_MASK | 1, -- use HEADER_TABLE_SIZE
52   //_HQ_MAX_HEADER_LIST_SIZE = HQ_SETTINGS_MASK | 6, -- use MAX_HEADER_LIST_SIZE
53   _HQ_QPACK_BLOCKED_STREAMS = HQ_SETTINGS_MASK | 7,
54   _HQ_DATAGRAM = HQ_SETTINGS_MASK | 0x0276,
55 };
56 
57 using SettingPair = std::pair<SettingsId, uint32_t>;
58 
59 } // namespace proxygen
60