# HG changeset patch # User Vladimir Homutov # Date 1584538511 -10800 # Node ID 78540e2160d0aed45b6436034d7474c52c27cdbc # Parent 31f7c697b6d987ce1a63cbad05a94a7bb18fe59f Added parsing of RESET_STREAM and STOP_SENDING frames diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -808,6 +808,23 @@ ngx_quic_payload_handler(ngx_connection_ ack_this = 1; break; + case NGX_QUIC_FT_RESET_STREAM: + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, + "RESET STREAM frame" + " { id 0x%xi error_code 0x%xi final_size 0x%xi }", + frame.u.reset_stream.id, + frame.u.reset_stream.error_code, + frame.u.reset_stream.final_size); + break; + + case NGX_QUIC_FT_STOP_SENDING: + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, + "STOP SENDING frame" + " { id 0x%xi error_code 0x%xi}", + frame.u.stop_sending.id, + frame.u.stop_sending.error_code); + break; + default: ngx_log_error(NGX_LOG_INFO, c->log, 0, "unsupported frame type 0x%xd in packet", frame.type); diff --git a/src/event/ngx_event_quic_transport.c b/src/event/ngx_event_quic_transport.c --- a/src/event/ngx_event_quic_transport.c +++ b/src/event/ngx_event_quic_transport.c @@ -423,6 +423,17 @@ ngx_quic_parse_frame(u_char *start, u_ch break; + case NGX_QUIC_FT_RESET_STREAM: + frame->u.reset_stream.id = ngx_quic_parse_int(&p); + frame->u.reset_stream.error_code = ngx_quic_parse_int(&p); + frame->u.reset_stream.final_size = ngx_quic_parse_int(&p); + break; + + case NGX_QUIC_FT_STOP_SENDING: + frame->u.stop_sending.id = ngx_quic_parse_int(&p); + frame->u.stop_sending.error_code = ngx_quic_parse_int(&p); + break; + default: return NGX_ERROR; } diff --git a/src/event/ngx_event_quic_transport.h b/src/event/ngx_event_quic_transport.h --- a/src/event/ngx_event_quic_transport.h +++ b/src/event/ngx_event_quic_transport.h @@ -116,6 +116,19 @@ typedef struct { } ngx_quic_close_frame_t; +typedef struct { + uint64_t id; + uint64_t error_code; + uint64_t final_size; +} ngx_quic_reset_stream_frame_t; + + +typedef struct { + uint64_t id; + uint64_t error_code; +} ngx_quic_stop_sending_frame_t; + + typedef struct ngx_quic_frame_s ngx_quic_frame_t; struct ngx_quic_frame_s { @@ -128,6 +141,8 @@ struct ngx_quic_frame_s { ngx_quic_new_conn_id_frame_t ncid; ngx_quic_stream_frame_t stream; ngx_quic_close_frame_t close; + ngx_quic_reset_stream_frame_t reset_stream; + ngx_quic_stop_sending_frame_t stop_sending; } u; u_char info[128]; // for debug };