1 /* 2 * nghttp2 - HTTP/2 C Library 3 * 4 * Copyright (c) 2014 Tatsuhiro Tsujikawa 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining 7 * a copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sublicense, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be 15 * included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 #ifndef NGHTTP2_OPTION_H 26 #define NGHTTP2_OPTION_H 27 28 #ifdef HAVE_CONFIG_H 29 # include <config.h> 30 #endif /* HAVE_CONFIG_H */ 31 32 #include <nghttp2/nghttp2.h> 33 34 /** 35 * Configuration options 36 */ 37 typedef enum { 38 /** 39 * This option prevents the library from sending WINDOW_UPDATE for a 40 * connection automatically. If this option is set to nonzero, the 41 * library won't send WINDOW_UPDATE for DATA until application calls 42 * nghttp2_session_consume() to indicate the amount of consumed 43 * DATA. By default, this option is set to zero. 44 */ 45 NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE = 1, 46 /** 47 * This option sets the SETTINGS_MAX_CONCURRENT_STREAMS value of 48 * remote endpoint as if it is received in SETTINGS frame. Without 49 * specifying this option, before the local endpoint receives 50 * SETTINGS_MAX_CONCURRENT_STREAMS in SETTINGS frame from remote 51 * endpoint, SETTINGS_MAX_CONCURRENT_STREAMS is unlimited. This may 52 * cause problem if local endpoint submits lots of requests 53 * initially and sending them at once to the remote peer may lead to 54 * the rejection of some requests. Specifying this option to the 55 * sensible value, say 100, may avoid this kind of issue. This value 56 * will be overwritten if the local endpoint receives 57 * SETTINGS_MAX_CONCURRENT_STREAMS from the remote endpoint. 58 */ 59 NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS = 1 << 1, 60 NGHTTP2_OPT_NO_RECV_CLIENT_MAGIC = 1 << 2, 61 NGHTTP2_OPT_NO_HTTP_MESSAGING = 1 << 3, 62 NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS = 1 << 4, 63 NGHTTP2_OPT_USER_RECV_EXT_TYPES = 1 << 5, 64 NGHTTP2_OPT_NO_AUTO_PING_ACK = 1 << 6, 65 NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES = 1 << 7, 66 NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH = 1 << 8, 67 NGHTTP2_OPT_MAX_DEFLATE_DYNAMIC_TABLE_SIZE = 1 << 9, 68 NGHTTP2_OPT_NO_CLOSED_STREAMS = 1 << 10, 69 NGHTTP2_OPT_MAX_OUTBOUND_ACK = 1 << 11, 70 NGHTTP2_OPT_MAX_SETTINGS = 1 << 12, 71 NGHTTP2_OPT_SERVER_FALLBACK_RFC7540_PRIORITIES = 1 << 13, 72 NGHTTP2_OPT_NO_RFC9113_LEADING_AND_TRAILING_WS_VALIDATION = 1 << 14, 73 } nghttp2_option_flag; 74 75 /** 76 * Struct to store option values for nghttp2_session. 77 */ 78 struct nghttp2_option { 79 /** 80 * NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH 81 */ 82 size_t max_send_header_block_length; 83 /** 84 * NGHTTP2_OPT_MAX_DEFLATE_DYNAMIC_TABLE_SIZE 85 */ 86 size_t max_deflate_dynamic_table_size; 87 /** 88 * NGHTTP2_OPT_MAX_OUTBOUND_ACK 89 */ 90 size_t max_outbound_ack; 91 /** 92 * NGHTTP2_OPT_MAX_SETTINGS 93 */ 94 size_t max_settings; 95 /** 96 * Bitwise OR of nghttp2_option_flag to determine that which fields 97 * are specified. 98 */ 99 uint32_t opt_set_mask; 100 /** 101 * NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS 102 */ 103 uint32_t peer_max_concurrent_streams; 104 /** 105 * NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS 106 */ 107 uint32_t max_reserved_remote_streams; 108 /** 109 * NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES 110 */ 111 uint32_t builtin_recv_ext_types; 112 /** 113 * NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE 114 */ 115 int no_auto_window_update; 116 /** 117 * NGHTTP2_OPT_NO_RECV_CLIENT_MAGIC 118 */ 119 int no_recv_client_magic; 120 /** 121 * NGHTTP2_OPT_NO_HTTP_MESSAGING 122 */ 123 int no_http_messaging; 124 /** 125 * NGHTTP2_OPT_NO_AUTO_PING_ACK 126 */ 127 int no_auto_ping_ack; 128 /** 129 * NGHTTP2_OPT_NO_CLOSED_STREAMS 130 */ 131 int no_closed_streams; 132 /** 133 * NGHTTP2_OPT_SERVER_FALLBACK_RFC7540_PRIORITIES 134 */ 135 int server_fallback_rfc7540_priorities; 136 /** 137 * NGHTTP2_OPT_NO_RFC9113_LEADING_AND_TRAILING_WS_VALIDATION 138 */ 139 int no_rfc9113_leading_and_trailing_ws_validation; 140 /** 141 * NGHTTP2_OPT_USER_RECV_EXT_TYPES 142 */ 143 uint8_t user_recv_ext_types[32]; 144 }; 145 146 #endif /* NGHTTP2_OPTION_H */ 147