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