Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/nodejs/src/node_http2_state.h
1 #ifndef SRC_NODE_HTTP2_STATE_H_ 2 #define SRC_NODE_HTTP2_STATE_H_ 3 4 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 5 6 #include "aliased_buffer.h" 7 8 struct nghttp2_rcbuf; 9 10 namespace node { 11 namespace http2 { 12 13 enum Http2SettingsIndex { 14 IDX_SETTINGS_HEADER_TABLE_SIZE, 15 IDX_SETTINGS_ENABLE_PUSH, 16 IDX_SETTINGS_INITIAL_WINDOW_SIZE, 17 IDX_SETTINGS_MAX_FRAME_SIZE, 18 IDX_SETTINGS_MAX_CONCURRENT_STREAMS, 19 IDX_SETTINGS_MAX_HEADER_LIST_SIZE, 20 IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL, 21 IDX_SETTINGS_COUNT 22 }; 23 24 // number of max additional settings, thus settings not implemented by nghttp2 25 const size_t MAX_ADDITIONAL_SETTINGS = 10; 26 27 enum Http2SessionStateIndex { 28 IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE, 29 IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH, 30 IDX_SESSION_STATE_NEXT_STREAM_ID, 31 IDX_SESSION_STATE_LOCAL_WINDOW_SIZE, 32 IDX_SESSION_STATE_LAST_PROC_STREAM_ID, 33 IDX_SESSION_STATE_REMOTE_WINDOW_SIZE, 34 IDX_SESSION_STATE_OUTBOUND_QUEUE_SIZE, 35 IDX_SESSION_STATE_HD_DEFLATE_DYNAMIC_TABLE_SIZE, 36 IDX_SESSION_STATE_HD_INFLATE_DYNAMIC_TABLE_SIZE, 37 IDX_SESSION_STATE_COUNT 38 }; 39 40 enum Http2StreamStateIndex { 41 IDX_STREAM_STATE, 42 IDX_STREAM_STATE_WEIGHT, 43 IDX_STREAM_STATE_SUM_DEPENDENCY_WEIGHT, 44 IDX_STREAM_STATE_LOCAL_CLOSE, 45 IDX_STREAM_STATE_REMOTE_CLOSE, 46 IDX_STREAM_STATE_LOCAL_WINDOW_SIZE, 47 IDX_STREAM_STATE_COUNT 48 }; 49 50 enum Http2OptionsIndex { 51 IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE, 52 IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS, 53 IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH, 54 IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS, 55 IDX_OPTIONS_PADDING_STRATEGY, 56 IDX_OPTIONS_MAX_HEADER_LIST_PAIRS, 57 IDX_OPTIONS_MAX_OUTSTANDING_PINGS, 58 IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS, 59 IDX_OPTIONS_MAX_SESSION_MEMORY, 60 IDX_OPTIONS_MAX_SETTINGS, 61 IDX_OPTIONS_STREAM_RESET_RATE, 62 IDX_OPTIONS_STREAM_RESET_BURST, 63 IDX_OPTIONS_STRICT_HTTP_FIELD_WHITESPACE_VALIDATION, 64 IDX_OPTIONS_FLAGS 65 }; 66 67 enum Http2StreamStatisticsIndex { 68 IDX_STREAM_STATS_ID, 69 IDX_STREAM_STATS_TIMETOFIRSTBYTE, 70 IDX_STREAM_STATS_TIMETOFIRSTHEADER, 71 IDX_STREAM_STATS_TIMETOFIRSTBYTESENT, 72 IDX_STREAM_STATS_SENTBYTES, 73 IDX_STREAM_STATS_RECEIVEDBYTES, 74 IDX_STREAM_STATS_COUNT 75 }; 76 77 enum Http2SessionStatisticsIndex { 78 IDX_SESSION_STATS_TYPE, 79 IDX_SESSION_STATS_PINGRTT, 80 IDX_SESSION_STATS_FRAMESRECEIVED, 81 IDX_SESSION_STATS_FRAMESSENT, 82 IDX_SESSION_STATS_STREAMCOUNT, 83 IDX_SESSION_STATS_STREAMAVERAGEDURATION, 84 IDX_SESSION_STATS_DATA_SENT, 85 IDX_SESSION_STATS_DATA_RECEIVED, 86 IDX_SESSION_STATS_MAX_CONCURRENT_STREAMS, 87 IDX_SESSION_STATS_COUNT 88 }; 89 90 class Http2State : public BaseObject { 91 public: 92 Http2State(Realm* realm, v8::Local<v8::Object> obj) 93 : BaseObject(realm, obj), 94 root_buffer(realm->isolate(), sizeof(http2_state_internal)), 95 session_state_buffer( 96 realm->isolate(), 97 offsetof(http2_state_internal, session_state_buffer), 98 IDX_SESSION_STATE_COUNT, 99 root_buffer), 100 stream_state_buffer(realm->isolate(), 101 offsetof(http2_state_internal, stream_state_buffer), 102 IDX_STREAM_STATE_COUNT, 103 root_buffer), 104 stream_stats_buffer(realm->isolate(), 105 offsetof(http2_state_internal, stream_stats_buffer), 106 IDX_STREAM_STATS_COUNT, 107 root_buffer), 108 session_stats_buffer( 109 realm->isolate(), 110 offsetof(http2_state_internal, session_stats_buffer), 111 IDX_SESSION_STATS_COUNT, 112 root_buffer), 113 options_buffer(realm->isolate(), 114 offsetof(http2_state_internal, options_buffer), 115 IDX_OPTIONS_FLAGS + 1, 116 root_buffer), 117 settings_buffer( 118 realm->isolate(), 119 offsetof(http2_state_internal, settings_buffer), 120 IDX_SETTINGS_COUNT + 1 + 1 + 2 * MAX_ADDITIONAL_SETTINGS, 121 root_buffer) {} 122 123 AliasedUint8Array root_buffer; 124 AliasedFloat64Array session_state_buffer; 125 AliasedFloat64Array stream_state_buffer; 126 AliasedFloat64Array stream_stats_buffer; 127 AliasedFloat64Array session_stats_buffer; 128 AliasedUint32Array options_buffer; 129 AliasedUint32Array settings_buffer; 130 131 void MemoryInfo(MemoryTracker* tracker) const override; 132 SET_SELF_SIZE(Http2State) 133 SET_MEMORY_INFO_NAME(Http2State) 134 135 SET_BINDING_ID(http2_binding_data) 136 137 private: 138 struct http2_state_internal { 139 // doubles first so that they are always sizeof(double)-aligned 140 double session_state_buffer[IDX_SESSION_STATE_COUNT]; 141 double stream_state_buffer[IDX_STREAM_STATE_COUNT]; 142 double stream_stats_buffer[IDX_STREAM_STATS_COUNT]; 143 double session_stats_buffer[IDX_SESSION_STATS_COUNT]; 144 uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1]; 145 // first + 1: number of actual nghttp2 supported settings 146 // second + 1: number of additional settings not supported by nghttp2 147 // 2 * MAX_ADDITIONAL_SETTINGS: settings id and value for each 148 // additional setting 149 uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1 + 1 + 150 2 * MAX_ADDITIONAL_SETTINGS]; 151 }; 152 }; 153 154 } // namespace http2 155 } // namespace node 156 157 #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 158 159 #endif // SRC_NODE_HTTP2_STATE_H_