Files
node/src/node_http2_state.h
Joyee Cheung 1b7531cdeb src: rename binding_data_name to type_name in BindingData
Previously, this was a per-class string constant for BindingData
which is used as keys for identifying these objects in the binding
data map. These are just type names of the BindingData.
This patch renames the variable to type_name so that
we can generalize this constant for other BaseObjects and use
it for debugging and logging the types of other BaseObjects.

PR-URL: https://github.com/nodejs/node/pull/37112
Refs: https://github.com/nodejs/node/pull/36943
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
2021-02-08 14:00:31 +08:00

150 lines
4.7 KiB
C++

#ifndef SRC_NODE_HTTP2_STATE_H_
#define SRC_NODE_HTTP2_STATE_H_
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#include "aliased_buffer.h"
struct nghttp2_rcbuf;
namespace node {
namespace http2 {
enum Http2SettingsIndex {
IDX_SETTINGS_HEADER_TABLE_SIZE,
IDX_SETTINGS_ENABLE_PUSH,
IDX_SETTINGS_INITIAL_WINDOW_SIZE,
IDX_SETTINGS_MAX_FRAME_SIZE,
IDX_SETTINGS_MAX_CONCURRENT_STREAMS,
IDX_SETTINGS_MAX_HEADER_LIST_SIZE,
IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL,
IDX_SETTINGS_COUNT
};
enum Http2SessionStateIndex {
IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE,
IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH,
IDX_SESSION_STATE_NEXT_STREAM_ID,
IDX_SESSION_STATE_LOCAL_WINDOW_SIZE,
IDX_SESSION_STATE_LAST_PROC_STREAM_ID,
IDX_SESSION_STATE_REMOTE_WINDOW_SIZE,
IDX_SESSION_STATE_OUTBOUND_QUEUE_SIZE,
IDX_SESSION_STATE_HD_DEFLATE_DYNAMIC_TABLE_SIZE,
IDX_SESSION_STATE_HD_INFLATE_DYNAMIC_TABLE_SIZE,
IDX_SESSION_STATE_COUNT
};
enum Http2StreamStateIndex {
IDX_STREAM_STATE,
IDX_STREAM_STATE_WEIGHT,
IDX_STREAM_STATE_SUM_DEPENDENCY_WEIGHT,
IDX_STREAM_STATE_LOCAL_CLOSE,
IDX_STREAM_STATE_REMOTE_CLOSE,
IDX_STREAM_STATE_LOCAL_WINDOW_SIZE,
IDX_STREAM_STATE_COUNT
};
enum Http2OptionsIndex {
IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE,
IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS,
IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH,
IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS,
IDX_OPTIONS_PADDING_STRATEGY,
IDX_OPTIONS_MAX_HEADER_LIST_PAIRS,
IDX_OPTIONS_MAX_OUTSTANDING_PINGS,
IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS,
IDX_OPTIONS_MAX_SESSION_MEMORY,
IDX_OPTIONS_MAX_SETTINGS,
IDX_OPTIONS_FLAGS
};
enum Http2StreamStatisticsIndex {
IDX_STREAM_STATS_ID,
IDX_STREAM_STATS_TIMETOFIRSTBYTE,
IDX_STREAM_STATS_TIMETOFIRSTHEADER,
IDX_STREAM_STATS_TIMETOFIRSTBYTESENT,
IDX_STREAM_STATS_SENTBYTES,
IDX_STREAM_STATS_RECEIVEDBYTES,
IDX_STREAM_STATS_COUNT
};
enum Http2SessionStatisticsIndex {
IDX_SESSION_STATS_TYPE,
IDX_SESSION_STATS_PINGRTT,
IDX_SESSION_STATS_FRAMESRECEIVED,
IDX_SESSION_STATS_FRAMESSENT,
IDX_SESSION_STATS_STREAMCOUNT,
IDX_SESSION_STATS_STREAMAVERAGEDURATION,
IDX_SESSION_STATS_DATA_SENT,
IDX_SESSION_STATS_DATA_RECEIVED,
IDX_SESSION_STATS_MAX_CONCURRENT_STREAMS,
IDX_SESSION_STATS_COUNT
};
class Http2State : public BaseObject {
public:
Http2State(Environment* env, v8::Local<v8::Object> obj)
: BaseObject(env, obj),
root_buffer(env->isolate(), sizeof(http2_state_internal)),
session_state_buffer(
env->isolate(),
offsetof(http2_state_internal, session_state_buffer),
IDX_SESSION_STATE_COUNT,
root_buffer),
stream_state_buffer(
env->isolate(),
offsetof(http2_state_internal, stream_state_buffer),
IDX_STREAM_STATE_COUNT,
root_buffer),
stream_stats_buffer(
env->isolate(),
offsetof(http2_state_internal, stream_stats_buffer),
IDX_STREAM_STATS_COUNT,
root_buffer),
session_stats_buffer(
env->isolate(),
offsetof(http2_state_internal, session_stats_buffer),
IDX_SESSION_STATS_COUNT,
root_buffer),
options_buffer(env->isolate(),
offsetof(http2_state_internal, options_buffer),
IDX_OPTIONS_FLAGS + 1,
root_buffer),
settings_buffer(env->isolate(),
offsetof(http2_state_internal, settings_buffer),
IDX_SETTINGS_COUNT + 1,
root_buffer) {}
AliasedUint8Array root_buffer;
AliasedFloat64Array session_state_buffer;
AliasedFloat64Array stream_state_buffer;
AliasedFloat64Array stream_stats_buffer;
AliasedFloat64Array session_stats_buffer;
AliasedUint32Array options_buffer;
AliasedUint32Array settings_buffer;
void MemoryInfo(MemoryTracker* tracker) const override;
SET_SELF_SIZE(Http2State)
SET_MEMORY_INFO_NAME(Http2State)
static constexpr FastStringKey type_name { "http2" };
private:
struct http2_state_internal {
// doubles first so that they are always sizeof(double)-aligned
double session_state_buffer[IDX_SESSION_STATE_COUNT];
double stream_state_buffer[IDX_STREAM_STATE_COUNT];
double stream_stats_buffer[IDX_STREAM_STATS_COUNT];
double session_stats_buffer[IDX_SESSION_STATS_COUNT];
uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1];
uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1];
};
};
} // namespace http2
} // namespace node
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#endif // SRC_NODE_HTTP2_STATE_H_