mirror of
https://github.com/nginx/nginx.git
synced 2025-06-22 13:51:12 +08:00
Initial parsing of STREAM frames.
This commit is contained in:
parent
0d10672137
commit
6bf6635d86
@ -104,7 +104,14 @@ do { \
|
||||
#define NGX_QUIC_FT_STOP_SENDING 0x05
|
||||
#define NGX_QUIC_FT_CRYPTO 0x06
|
||||
#define NGX_QUIC_FT_NEW_TOKEN 0x07
|
||||
#define NGX_QUIC_FT_STREAM 0x08 // - 0x0f
|
||||
#define NGX_QUIC_FT_STREAM 0x08
|
||||
#define NGX_QUIC_FT_STREAM1 0x09
|
||||
#define NGX_QUIC_FT_STREAM2 0x0A
|
||||
#define NGX_QUIC_FT_STREAM3 0x0B
|
||||
#define NGX_QUIC_FT_STREAM4 0x0C
|
||||
#define NGX_QUIC_FT_STREAM5 0x0D
|
||||
#define NGX_QUIC_FT_STREAM6 0x0E
|
||||
#define NGX_QUIC_FT_STREAM7 0x0F
|
||||
#define NGX_QUIC_FT_MAX_DATA 0x10
|
||||
#define NGX_QUIC_FT_MAX_STREAM_DATA 0x11
|
||||
#define NGX_QUIC_FT_MAX_STREAMS 0x12
|
||||
@ -175,6 +182,14 @@ typedef struct {
|
||||
} ngx_quic_ncid_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint64_t stream_id;
|
||||
uint64_t offset;
|
||||
uint64_t length;
|
||||
u_char *data;
|
||||
} ngx_quic_stream_frame_t;
|
||||
|
||||
|
||||
struct ngx_quic_frame_s {
|
||||
ngx_uint_t type;
|
||||
ngx_quic_level_t level;
|
||||
@ -183,6 +198,7 @@ struct ngx_quic_frame_s {
|
||||
ngx_quic_crypto_frame_t crypto;
|
||||
ngx_quic_ack_frame_t ack;
|
||||
ngx_quic_ncid_t ncid;
|
||||
ngx_quic_stream_frame_t stream;
|
||||
// more frames
|
||||
} u;
|
||||
|
||||
@ -1485,6 +1501,37 @@ ngx_quic_read_frame(ngx_connection_t *c, u_char *start, u_char *end,
|
||||
return NGX_ERROR;
|
||||
break;
|
||||
|
||||
case NGX_QUIC_FT_STREAM:
|
||||
case NGX_QUIC_FT_STREAM1:
|
||||
case NGX_QUIC_FT_STREAM2:
|
||||
case NGX_QUIC_FT_STREAM3:
|
||||
case NGX_QUIC_FT_STREAM4:
|
||||
case NGX_QUIC_FT_STREAM5:
|
||||
case NGX_QUIC_FT_STREAM6:
|
||||
case NGX_QUIC_FT_STREAM7:
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"STREAM frame, type: 0x%xi", frame->type);
|
||||
|
||||
frame->u.stream.stream_id = ngx_quic_parse_int(&p);
|
||||
if (frame->type & 0x04) {
|
||||
frame->u.stream.offset = ngx_quic_parse_int(&p);
|
||||
} else {
|
||||
frame->u.stream.offset = 0;
|
||||
}
|
||||
|
||||
if (frame->type & 0x02) {
|
||||
frame->u.stream.length = ngx_quic_parse_int(&p);
|
||||
} else {
|
||||
frame->u.stream.length = end - p; /* up to packet end */
|
||||
}
|
||||
|
||||
frame->u.stream.data = p;
|
||||
|
||||
p += frame->u.stream.length;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"unknown frame type %xi", frame->type);
|
||||
@ -1672,6 +1719,26 @@ ngx_quic_payload_handler(ngx_connection_t *c, ngx_quic_header_t *pkt)
|
||||
frame.u.ncid.len);
|
||||
continue;
|
||||
|
||||
case NGX_QUIC_FT_STREAM:
|
||||
case NGX_QUIC_FT_STREAM1:
|
||||
case NGX_QUIC_FT_STREAM2:
|
||||
case NGX_QUIC_FT_STREAM3:
|
||||
case NGX_QUIC_FT_STREAM4:
|
||||
case NGX_QUIC_FT_STREAM5:
|
||||
case NGX_QUIC_FT_STREAM6:
|
||||
case NGX_QUIC_FT_STREAM7:
|
||||
|
||||
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"STREAM frame 0x%xi id 0x%xi off 0x%xi len 0x%xi",
|
||||
frame.type,
|
||||
frame.u.stream.stream_id,
|
||||
frame.u.stream.offset,
|
||||
frame.u.stream.length);
|
||||
|
||||
ngx_quic_hexdump0(c->log, "STREAM.data",
|
||||
frame.u.stream.data, frame.u.stream.length);
|
||||
break;
|
||||
|
||||
default:
|
||||
ngx_log_error(NGX_LOG_INFO, c->log, 0,
|
||||
"unexpected frame type 0x%xd in packet", frame.type);
|
||||
|
Loading…
Reference in New Issue
Block a user