changeset 8559:a89a58c642ef quic

QUIC: simplified packet header parsing. Now flags are processed in ngx_quic_input(), and raw->pos points to the first byte after the flags. Redundant checks from ngx_quic_parse_short_header() and ngx_quic_parse_long_header() are removed.
author Vladimir Homutov <vl@nginx.com>
date Fri, 25 Sep 2020 21:47:28 +0300
parents 0f37b4ef3cd9
children d0d3fc0697a0
files src/event/ngx_event_quic.c src/event/ngx_event_quic_transport.c
diffstat 2 files changed, 3 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -1623,6 +1623,7 @@ ngx_quic_input(ngx_connection_t *c, ngx_
         pkt.len = b->last - p;
         pkt.log = c->log;
         pkt.flags = p[0];
+        pkt.raw->pos++;
 
         if (c->quic->in_retry) {
             rc = ngx_quic_retry_input(c, &pkt);
--- a/src/event/ngx_event_quic_transport.c
+++ b/src/event/ngx_event_quic_transport.c
@@ -250,21 +250,9 @@ ngx_quic_parse_long_header(ngx_quic_head
     u_char   *p, *end;
     uint8_t   idlen;
 
-    p = pkt->data;
+    p = pkt->raw->pos;
     end = pkt->data + pkt->len;
 
-    p = ngx_quic_read_uint8(p, end, &pkt->flags);
-    if (p == NULL) {
-        ngx_log_error(NGX_LOG_INFO, pkt->log, 0,
-                      "quic packet is too small to read flags");
-        return NGX_ERROR;
-    }
-
-    if (!ngx_quic_long_pkt(pkt->flags)) {
-        ngx_log_error(NGX_LOG_INFO, pkt->log, 0, "quic not a long packet");
-        return NGX_ERROR;
-    }
-
     p = ngx_quic_read_uint32(p, end, &pkt->version);
     if (p == NULL) {
         ngx_log_error(NGX_LOG_INFO, pkt->log, 0,
@@ -473,21 +461,9 @@ ngx_quic_parse_short_header(ngx_quic_hea
 {
     u_char  *p, *end;
 
-    p = pkt->data;
+    p = pkt->raw->pos;
     end = pkt->data + pkt->len;
 
-    p = ngx_quic_read_uint8(p, end, &pkt->flags);
-    if (p == NULL) {
-        ngx_log_error(NGX_LOG_INFO, pkt->log, 0,
-                      "quic packet is too small to read flags");
-        return NGX_ERROR;
-    }
-
-    if (!ngx_quic_short_pkt(pkt->flags)) {
-        ngx_log_error(NGX_LOG_INFO, pkt->log, 0, "quic not a short packet");
-        return NGX_ERROR;
-    }
-
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pkt->log, 0,
                    "quic short packet flags:%xd", pkt->flags);