changeset 8236:d3b26c3bea22 quic

Added parsing of STREAMS BLOCKED frames. While there, added hex prefix for debug to avoid frame type confusion.
author Vladimir Homutov <vl@nginx.com>
date Thu, 19 Mar 2020 11:15:43 +0300
parents 552d6868091b
children ff540f13d95d
files src/event/ngx_event_quic.c src/event/ngx_event_quic_transport.c src/event/ngx_event_quic_transport.h
diffstat 3 files changed, 27 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c	Wed Mar 18 23:07:40 2020 +0300
+++ b/src/event/ngx_event_quic.c	Thu Mar 19 11:15:43 2020 +0300
@@ -722,7 +722,7 @@
         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 @@
                            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);
--- a/src/event/ngx_event_quic_transport.c	Wed Mar 18 23:07:40 2020 +0300
+++ b/src/event/ngx_event_quic_transport.c	Thu Mar 19 11:15:43 2020 +0300
@@ -435,6 +435,16 @@
         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;
     }
--- a/src/event/ngx_event_quic_transport.h	Wed Mar 18 23:07:40 2020 +0300
+++ b/src/event/ngx_event_quic_transport.h	Thu Mar 19 11:15:43 2020 +0300
@@ -129,6 +129,12 @@
 } 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 @@
         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
 };