Mercurial > hg > nginx
changeset 8558:0f37b4ef3cd9 quic
QUIC: keep the entire packet size in pkt->len.
Previously pkt->len kept the length of the packet remainder starting from
pkt->raw->pos.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Fri, 25 Sep 2020 21:46:55 +0300 |
parents | 2727d402e5a5 |
children | a89a58c642ef |
files | src/event/ngx_event_quic.c src/event/ngx_event_quic_protection.c src/event/ngx_event_quic_transport.c |
diffstat | 3 files changed, 7 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c Fri Sep 18 15:53:37 2020 +0300 +++ b/src/event/ngx_event_quic.c Fri Sep 25 21:46:55 2020 +0300 @@ -1676,7 +1676,7 @@ */ /* b->pos is at header end, adjust by actual packet length */ - b->pos += pkt.len; + b->pos = pkt.data + pkt.len; p = ngx_quic_skip_zero_padding(b); }
--- a/src/event/ngx_event_quic_protection.c Fri Sep 18 15:53:37 2020 +0300 +++ b/src/event/ngx_event_quic_protection.c Fri Sep 25 21:46:55 2020 +0300 @@ -997,6 +997,7 @@ uint64_t *largest_pn) { u_char clearflags, *p, *sample; + size_t len; uint8_t badflags; uint64_t pn, lpn; ngx_int_t pnl, rc, key_phase; @@ -1012,6 +1013,7 @@ secret = pkt->secret; p = pkt->raw->pos; + len = pkt->data + pkt->len - p; /* draft-ietf-quic-tls-23#section-5.4.2: * the Packet Number field is assumed to be 4 bytes long @@ -1019,7 +1021,7 @@ * AES-Based and ChaCha20-Based header protections sample 16 bytes */ - if (pkt->len < EVP_GCM_TLS_TAG_LEN + 4) { + if (len < EVP_GCM_TLS_TAG_LEN + 4) { return NGX_DECLINED; } @@ -1062,7 +1064,7 @@ /* packet protection */ in.data = p; - in.len = pkt->len - pnl; + in.len = len - pnl; if (ngx_quic_long_pkt(pkt->flags)) { badflags = clearflags & NGX_QUIC_PKT_LONG_RESERVED_BIT;
--- a/src/event/ngx_event_quic_transport.c Fri Sep 18 15:53:37 2020 +0300 +++ b/src/event/ngx_event_quic_transport.c Fri Sep 25 21:46:55 2020 +0300 @@ -511,7 +511,6 @@ } pkt->raw->pos = p; - pkt->len = end - p; return NGX_OK; } @@ -561,7 +560,7 @@ } pkt->raw->pos = p; - pkt->len = varint; + pkt->len = p + varint - pkt->data; #ifdef NGX_QUIC_DEBUG_PACKETS ngx_quic_hexdump(pkt->log, "quic DCID", pkt->dcid.data, pkt->dcid.len); @@ -600,7 +599,7 @@ } pkt->raw->pos = p; - pkt->len = plen; + pkt->len = p + plen - pkt->data; return NGX_OK; }