aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Homutov <vl@nginx.com>2020-03-19 11:15:43 +0300
committerVladimir Homutov <vl@nginx.com>2020-03-19 11:15:43 +0300
commit33d8317dd5fa0b25f27a64a54e1ae099023fb1dd (patch)
treee661089aa7936e84517bc8a753c702cc4ae56365
parent6aa611c314f87afc0242736c98383e3836800588 (diff)
downloadnginx-33d8317dd5fa0b25f27a64a54e1ae099023fb1dd.tar.gz
nginx-33d8317dd5fa0b25f27a64a54e1ae099023fb1dd.zip
Added parsing of STREAMS BLOCKED frames.
While there, added hex prefix for debug to avoid frame type confusion.
-rw-r--r--src/event/ngx_event_quic.c11
-rw-r--r--src/event/ngx_event_quic_transport.c10
-rw-r--r--src/event/ngx_event_quic_transport.h7
3 files changed, 27 insertions, 1 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index 44ddcc81d..c16c19ad1 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -722,7 +722,7 @@ ngx_quic_payload_handler(ngx_connection_t *c, ngx_quic_header_t *pkt)
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_t *c, ngx_quic_header_t *pkt)
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
index 35013461f..cd971fb36 100644
--- 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_char *end, ngx_quic_frame_t *frame)
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
index 76dac324d..d09dbfedb 100644
--- 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
};