aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVladimir Homutov <vl@nginx.com>2020-03-18 16:35:11 +0300
committerVladimir Homutov <vl@nginx.com>2020-03-18 16:35:11 +0300
commit50f919cec4a81d8c37d754e0be72283c92954800 (patch)
treed92b1497f6cabbb4310d6f03bcf13ac32ae20efb /src
parent04d037b239440bf7a2f422eb4b7c4e4e7652939e (diff)
downloadnginx-50f919cec4a81d8c37d754e0be72283c92954800.tar.gz
nginx-50f919cec4a81d8c37d754e0be72283c92954800.zip
Added parsing of RESET_STREAM and STOP_SENDING frames
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_quic.c17
-rw-r--r--src/event/ngx_event_quic_transport.c11
-rw-r--r--src/event/ngx_event_quic_transport.h15
3 files changed, 43 insertions, 0 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index 0fb45da30..7f732ba8b 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -808,6 +808,23 @@ ngx_quic_payload_handler(ngx_connection_t *c, ngx_quic_header_t *pkt)
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
index 1f49c10f4..0e51714bd 100644
--- 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_char *end, ngx_quic_frame_t *frame)
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
index 549cc9757..76dac324d 100644
--- 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
};