http2: name padding buffer fields

PR-URL: https://github.com/nodejs/node/pull/14744
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen 2017-08-10 17:56:23 +02:00
parent e46ae99a2a
commit 5ea25d2ebe
No known key found for this signature in database
GPG Key ID: D8B9F5AEAE84E4CF
2 changed files with 28 additions and 11 deletions

View File

@ -73,7 +73,12 @@ const kType = Symbol('type');
const kDefaultSocketTimeout = 2 * 60 * 1000; const kDefaultSocketTimeout = 2 * 60 * 1000;
const kRenegTest = /TLS session renegotiation disabled for this socket/; const kRenegTest = /TLS session renegotiation disabled for this socket/;
const { paddingBuffer } = binding; const {
paddingBuffer,
PADDING_BUF_FRAME_LENGTH,
PADDING_BUF_MAX_PAYLOAD_LENGTH,
PADDING_BUF_RETURN_VALUE
} = binding;
const { const {
NGHTTP2_CANCEL, NGHTTP2_CANCEL,
@ -393,12 +398,13 @@ function onSelectPadding(fn) {
'bug in Node.js'); 'bug in Node.js');
return function getPadding() { return function getPadding() {
debug('fetching padding for frame'); debug('fetching padding for frame');
const frameLen = paddingBuffer[0]; const frameLen = paddingBuffer[PADDING_BUF_FRAME_LENGTH];
const maxFramePayloadLen = paddingBuffer[1]; const maxFramePayloadLen = paddingBuffer[PADDING_BUF_MAX_PAYLOAD_LENGTH];
paddingBuffer[2] = Math.min(maxFramePayloadLen, paddingBuffer[PADDING_BUF_RETURN_VALUE] =
Math.max(frameLen, Math.min(maxFramePayloadLen,
fn(frameLen, Math.max(frameLen,
maxFramePayloadLen) | 0)); fn(frameLen,
maxFramePayloadLen) | 0));
}; };
} }

View File

@ -59,8 +59,15 @@ enum Http2OptionsIndex {
IDX_OPTIONS_FLAGS IDX_OPTIONS_FLAGS
}; };
enum Http2PaddingBufferFields {
PADDING_BUF_FRAME_LENGTH,
PADDING_BUF_MAX_PAYLOAD_LENGTH,
PADDING_BUF_RETURN_VALUE,
PADDING_BUF_FIELD_COUNT
};
struct http2_state { struct http2_state {
uint32_t padding_buffer[3]; uint32_t padding_buffer[PADDING_BUF_FIELD_COUNT];
uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1]; uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1];
uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1]; uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1];
double session_state_buffer[IDX_SESSION_STATE_COUNT]; double session_state_buffer[IDX_SESSION_STATE_COUNT];
@ -120,10 +127,10 @@ ssize_t Http2Session::OnCallbackPadding(size_t frameLen,
if (object()->Has(context, env()->ongetpadding_string()).FromJust()) { if (object()->Has(context, env()->ongetpadding_string()).FromJust()) {
uint32_t* buffer = env()->http2_state_buffer()->padding_buffer; uint32_t* buffer = env()->http2_state_buffer()->padding_buffer;
buffer[0] = frameLen; buffer[PADDING_BUF_FRAME_LENGTH] = frameLen;
buffer[1] = maxPayloadLen; buffer[PADDING_BUF_MAX_PAYLOAD_LENGTH] = maxPayloadLen;
MakeCallback(env()->ongetpadding_string(), 0, nullptr); MakeCallback(env()->ongetpadding_string(), 0, nullptr);
uint32_t retval = buffer[2]; uint32_t retval = buffer[PADDING_BUF_RETURN_VALUE];
retval = retval <= maxPayloadLen ? retval : maxPayloadLen; retval = retval <= maxPayloadLen ? retval : maxPayloadLen;
retval = retval >= frameLen ? retval : frameLen; retval = retval >= frameLen ? retval : frameLen;
CHECK_GE(retval, frameLen); CHECK_GE(retval, frameLen);
@ -1167,6 +1174,10 @@ void Initialize(Local<Object> target,
SET_STATE_TYPEDARRAY("optionsBuffer", Uint32Array, options_buffer); SET_STATE_TYPEDARRAY("optionsBuffer", Uint32Array, options_buffer);
#undef SET_STATE_TYPEDARRAY #undef SET_STATE_TYPEDARRAY
NODE_DEFINE_CONSTANT(target, PADDING_BUF_FRAME_LENGTH);
NODE_DEFINE_CONSTANT(target, PADDING_BUF_MAX_PAYLOAD_LENGTH);
NODE_DEFINE_CONSTANT(target, PADDING_BUF_RETURN_VALUE);
// Method to fetch the nghttp2 string description of an nghttp2 error code // Method to fetch the nghttp2 string description of an nghttp2 error code
env->SetMethod(target, "nghttp2ErrorString", HttpErrorString); env->SetMethod(target, "nghttp2ErrorString", HttpErrorString);