# HG changeset patch # User Vladimir Homutov # Date 1584605743 -10800 # Node ID d3b26c3bea227d8351aca131fcd051a7c9c41c7b # Parent 552d6868091b8d76614a437f2f0ef20780c60ed1 Added parsing of STREAMS BLOCKED frames. While there, added hex prefix for debug to avoid frame type confusion. 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 @@ -722,7 +722,7 @@ ngx_quic_payload_handler(ngx_connection_ len = ngx_quic_parse_frame(p, end, &frame); if (len < 0) { ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, - "failed to parse frame type %xi", frame.type); + "failed to parse frame type 0x%xi", frame.type); return NGX_ERROR; } @@ -840,6 +840,15 @@ ngx_quic_payload_handler(ngx_connection_ frame.u.stop_sending.error_code); break; + case NGX_QUIC_FT_STREAMS_BLOCKED: + case NGX_QUIC_FT_STREAMS_BLOCKED2: + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, + "STREAMS BLOCKED frame" + " { limit %i bidi: %d }", + frame.u.streams_blocked.limit, + frame.u.streams_blocked.bidi); + 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 @@ -435,6 +435,16 @@ ngx_quic_parse_frame(u_char *start, u_ch frame->u.stop_sending.error_code = ngx_quic_parse_int(&p); break; + case NGX_QUIC_FT_STREAMS_BLOCKED: + frame->u.streams_blocked.limit = ngx_quic_parse_int(&p); + frame->u.streams_blocked.bidi = 1; + break; + + case NGX_QUIC_FT_STREAMS_BLOCKED2: + frame->u.streams_blocked.limit = ngx_quic_parse_int(&p); + frame->u.streams_blocked.bidi = 0; + 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 @@ -129,6 +129,12 @@ typedef struct { } ngx_quic_stop_sending_frame_t; +typedef struct { + uint64_t limit; + ngx_uint_t bidi; /* unsigned: bidi:1 */ +} ngx_quic_streams_blocked_frame_t; + + typedef struct ngx_quic_frame_s ngx_quic_frame_t; struct ngx_quic_frame_s { @@ -143,6 +149,7 @@ struct ngx_quic_frame_s { ngx_quic_close_frame_t close; ngx_quic_reset_stream_frame_t reset_stream; ngx_quic_stop_sending_frame_t stop_sending; + ngx_quic_streams_blocked_frame_t streams_blocked; } u; u_char info[128]; // for debug };