changeset 8262:66f59c67adf4 quic

Skip unknown transport parameters.
author Vladimir Homutov <vl@nginx.com>
date Mon, 23 Mar 2020 12:57:24 +0300
parents 55a3a9c50af2
children 1295b293d09a
files src/event/ngx_event_quic_transport.c
diffstat 1 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_quic_transport.c
+++ b/src/event/ngx_event_quic_transport.c
@@ -1227,7 +1227,7 @@ ngx_quic_parse_transport_param(u_char *p
     case NGX_QUIC_TP_STATELESS_RESET_TOKEN:
     case NGX_QUIC_TP_PREFERRED_ADDRESS:
         // TODO
-        return NGX_ERROR;
+        return NGX_DECLINED;
     }
 
     switch (id) {
@@ -1259,7 +1259,7 @@ ngx_quic_parse_transport_param(u_char *p
         break;
 
     default:
-        return NGX_ERROR;
+        return NGX_DECLINED;
     }
 
     switch (id) {
@@ -1320,6 +1320,7 @@ ngx_int_t
 ngx_quic_parse_transport_params(u_char *p, u_char *end, ngx_quic_tp_t *tp,
     ngx_log_t *log)
 {
+    ngx_int_t  rc;
 
 #if (quic_version < 0xff00001b)
 
@@ -1348,12 +1349,19 @@ ngx_quic_parse_transport_params(u_char *
             return NGX_ERROR;
         }
 
-        if (ngx_quic_parse_transport_param(p, p + len, id, tp) != NGX_OK) {
+        rc = ngx_quic_parse_transport_param(p, p + len, id, tp);
+
+        if (rc == NGX_ERROR) {
             ngx_log_error(NGX_LOG_INFO, log, 0,
                           "failed to parse transport param id 0x%xi data", id);
             return NGX_ERROR;
         }
 
+        if (rc == NGX_DECLINED) {
+            ngx_log_error(NGX_LOG_INFO, log, 0,
+                          "unknown transport param id 0x%xi, skipped", id);
+        }
+
         p += len;
     };
 
@@ -1376,12 +1384,19 @@ ngx_quic_parse_transport_params(u_char *
             return NGX_ERROR;
         }
 
-        if (ngx_quic_parse_transport_param(p, p + len, id, tp) != NGX_OK) {
+        rc = ngx_quic_parse_transport_param(p, p + len, id, tp);
+
+        if (rc == NGX_ERROR) {
             ngx_log_error(NGX_LOG_INFO, log, 0,
                           "failed to parse transport param id 0x%xi data", id);
             return NGX_ERROR;
         }
 
+        if (rc == NGX_DECLINED) {
+            ngx_log_error(NGX_LOG_INFO, log, 0,
+                          "unknown transport param id 0x%xi,skipped", id);
+        }
+
         p += len;
 
     }