altsvc: Reduce bitfield size
This commit is contained in:
parent
b924ef5fff
commit
6638ca9333
|
@ -24,6 +24,8 @@
|
||||||
*/
|
*/
|
||||||
#include "nghttp2_option.h"
|
#include "nghttp2_option.h"
|
||||||
|
|
||||||
|
#include "nghttp2_session.h"
|
||||||
|
|
||||||
int nghttp2_option_new(nghttp2_option **option_ptr) {
|
int nghttp2_option_new(nghttp2_option **option_ptr) {
|
||||||
*option_ptr = calloc(1, sizeof(nghttp2_option));
|
*option_ptr = calloc(1, sizeof(nghttp2_option));
|
||||||
|
|
||||||
|
@ -79,12 +81,14 @@ void nghttp2_option_set_user_recv_extension_type(nghttp2_option *option,
|
||||||
|
|
||||||
void nghttp2_option_set_builtin_recv_extension_type(nghttp2_option *option,
|
void nghttp2_option_set_builtin_recv_extension_type(nghttp2_option *option,
|
||||||
uint8_t type) {
|
uint8_t type) {
|
||||||
if (type < 10) {
|
switch (type) {
|
||||||
|
case NGHTTP2_ALTSVC:
|
||||||
|
option->opt_set_mask |= NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES;
|
||||||
|
option->builtin_recv_ext_types |= NGHTTP2_TYPEMASK_ALTSVC;
|
||||||
|
return;
|
||||||
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
option->opt_set_mask |= NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES;
|
|
||||||
set_ext_type(option->builtin_recv_ext_types, type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nghttp2_option_set_no_auto_ping_ack(nghttp2_option *option, int val) {
|
void nghttp2_option_set_no_auto_ping_ack(nghttp2_option *option, int val) {
|
||||||
|
|
|
@ -82,6 +82,10 @@ struct nghttp2_option {
|
||||||
* NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS
|
* NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS
|
||||||
*/
|
*/
|
||||||
uint32_t max_reserved_remote_streams;
|
uint32_t max_reserved_remote_streams;
|
||||||
|
/**
|
||||||
|
* NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES
|
||||||
|
*/
|
||||||
|
uint32_t builtin_recv_ext_types;
|
||||||
/**
|
/**
|
||||||
* NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE
|
* NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE
|
||||||
*/
|
*/
|
||||||
|
@ -102,10 +106,6 @@ struct nghttp2_option {
|
||||||
* NGHTTP2_OPT_USER_RECV_EXT_TYPES
|
* NGHTTP2_OPT_USER_RECV_EXT_TYPES
|
||||||
*/
|
*/
|
||||||
uint8_t user_recv_ext_types[32];
|
uint8_t user_recv_ext_types[32];
|
||||||
/**
|
|
||||||
* NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES
|
|
||||||
*/
|
|
||||||
uint8_t builtin_recv_ext_types[32];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* NGHTTP2_OPTION_H */
|
#endif /* NGHTTP2_OPTION_H */
|
||||||
|
|
|
@ -323,10 +323,12 @@ static void session_inbound_frame_reset(nghttp2_session *session) {
|
||||||
if (check_ext_type_set(session->user_recv_ext_types,
|
if (check_ext_type_set(session->user_recv_ext_types,
|
||||||
iframe->frame.hd.type)) {
|
iframe->frame.hd.type)) {
|
||||||
nghttp2_frame_extension_free(&iframe->frame.ext);
|
nghttp2_frame_extension_free(&iframe->frame.ext);
|
||||||
} else if (check_ext_type_set(session->builtin_recv_ext_types,
|
} else {
|
||||||
iframe->frame.hd.type)) {
|
|
||||||
switch (iframe->frame.hd.type) {
|
switch (iframe->frame.hd.type) {
|
||||||
case NGHTTP2_ALTSVC:
|
case NGHTTP2_ALTSVC:
|
||||||
|
if ((session->builtin_recv_ext_types & NGHTTP2_TYPEMASK_ALTSVC) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
nghttp2_frame_altsvc_free(&iframe->frame.ext, mem);
|
nghttp2_frame_altsvc_free(&iframe->frame.ext, mem);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -492,9 +494,7 @@ static int session_new(nghttp2_session **session_ptr,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (option->opt_set_mask & NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES) {
|
if (option->opt_set_mask & NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES) {
|
||||||
memcpy((*session_ptr)->builtin_recv_ext_types,
|
(*session_ptr)->builtin_recv_ext_types = option->builtin_recv_ext_types;
|
||||||
option->builtin_recv_ext_types,
|
|
||||||
sizeof((*session_ptr)->builtin_recv_ext_types));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((option->opt_set_mask & NGHTTP2_OPT_NO_AUTO_PING_ACK) &&
|
if ((option->opt_set_mask & NGHTTP2_OPT_NO_AUTO_PING_ACK) &&
|
||||||
|
@ -5556,10 +5556,16 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
|
||||||
iframe->state = NGHTTP2_IB_READ_EXTENSION_PAYLOAD;
|
iframe->state = NGHTTP2_IB_READ_EXTENSION_PAYLOAD;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
} else if (check_ext_type_set(session->builtin_recv_ext_types,
|
} else {
|
||||||
iframe->frame.hd.type)) {
|
|
||||||
switch (iframe->frame.hd.type) {
|
switch (iframe->frame.hd.type) {
|
||||||
case NGHTTP2_ALTSVC:
|
case NGHTTP2_ALTSVC:
|
||||||
|
if ((session->builtin_recv_ext_types & NGHTTP2_TYPEMASK_ALTSVC) ==
|
||||||
|
0) {
|
||||||
|
busy = 1;
|
||||||
|
iframe->state = NGHTTP2_IB_IGN_PAYLOAD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
DEBUGF(fprintf(stderr, "recv: ALTSVC\n"));
|
DEBUGF(fprintf(stderr, "recv: ALTSVC\n"));
|
||||||
|
|
||||||
iframe->frame.hd.flags = NGHTTP2_FLAG_NONE;
|
iframe->frame.hd.flags = NGHTTP2_FLAG_NONE;
|
||||||
|
@ -5590,12 +5596,6 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
busy = 1;
|
|
||||||
|
|
||||||
iframe->state = NGHTTP2_IB_IGN_PAYLOAD;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,15 @@ typedef enum {
|
||||||
NGHTTP2_OPTMASK_NO_AUTO_PING_ACK = 1 << 3
|
NGHTTP2_OPTMASK_NO_AUTO_PING_ACK = 1 << 3
|
||||||
} nghttp2_optmask;
|
} nghttp2_optmask;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bitmask for built-in type to enable the default handling for that
|
||||||
|
* type of the frame.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NGHTTP2_TYPEMASK_NONE = 0,
|
||||||
|
NGHTTP2_TYPEMASK_ALTSVC = 1 << 0
|
||||||
|
} nghttp2_typemask;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NGHTTP2_OB_POP_ITEM,
|
NGHTTP2_OB_POP_ITEM,
|
||||||
NGHTTP2_OB_SEND_DATA,
|
NGHTTP2_OB_SEND_DATA,
|
||||||
|
@ -295,6 +304,9 @@ struct nghttp2_session {
|
||||||
/* Unacked local SETTINGS_MAX_CONCURRENT_STREAMS value. We use this
|
/* Unacked local SETTINGS_MAX_CONCURRENT_STREAMS value. We use this
|
||||||
to refuse the incoming stream if it exceeds this value. */
|
to refuse the incoming stream if it exceeds this value. */
|
||||||
uint32_t pending_local_max_concurrent_stream;
|
uint32_t pending_local_max_concurrent_stream;
|
||||||
|
/* The bitwose OR of zero or more of nghttp2_typemask to indicate
|
||||||
|
that the default handling of extension frame is enabled. */
|
||||||
|
uint32_t builtin_recv_ext_types;
|
||||||
/* Unacked local ENABLE_PUSH value. We use this to refuse
|
/* Unacked local ENABLE_PUSH value. We use this to refuse
|
||||||
PUSH_PROMISE before SETTINGS ACK is received. */
|
PUSH_PROMISE before SETTINGS ACK is received. */
|
||||||
uint8_t pending_enable_push;
|
uint8_t pending_enable_push;
|
||||||
|
@ -314,7 +326,6 @@ struct nghttp2_session {
|
||||||
bit is set, it indicates that incoming frame with that type is
|
bit is set, it indicates that incoming frame with that type is
|
||||||
passed to user defined callbacks, otherwise they are ignored. */
|
passed to user defined callbacks, otherwise they are ignored. */
|
||||||
uint8_t user_recv_ext_types[32];
|
uint8_t user_recv_ext_types[32];
|
||||||
uint8_t builtin_recv_ext_types[32];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Struct used when updating initial window size of each active
|
/* Struct used when updating initial window size of each active
|
||||||
|
|
Loading…
Reference in New Issue