]> git.kaiwu.me - nginx.git/commitdiff
Added parsing of RESET_STREAM and STOP_SENDING frames
authorVladimir Homutov <vl@nginx.com>
Wed, 18 Mar 2020 13:35:11 +0000 (16:35 +0300)
committerVladimir Homutov <vl@nginx.com>
Wed, 18 Mar 2020 13:35:11 +0000 (16:35 +0300)
src/event/ngx_event_quic.c
src/event/ngx_event_quic_transport.c
src/event/ngx_event_quic_transport.h

index 0fb45da30d501bba5a04d940700e806521b1e8b2..7f732ba8b8ef7368f296d89bf02e57f375dd93ef 100644 (file)
@@ -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);
index 1f49c10f4739b4ed2128ff0b73449992dcce8e10..0e51714bd033aecc5e409c51a2028f2b513f0d62 100644 (file)
@@ -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;
     }
index 549cc975722e75ccd015bc988528afe9f43322d2..76dac324dbe62906a35e1a42799268e3486d8527 100644 (file)
@@ -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
 };