]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Modify qc_do_build_hdshk_pkt() to accept any packet type
authorFrédéric Lécaille <flecaille@haproxy.com>
Tue, 3 Aug 2021 14:03:09 +0000 (16:03 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 23 Sep 2021 13:27:25 +0000 (15:27 +0200)
With this patch qc_do_build_hdshk_pkt() is also able to build Application level
packet type. Its name should be consequently renamed (to come).

src/xprt_quic.c

index 623a12e32a9337e28a5c0a8206d3f38720e1d508..8cf3bcbc46de68d926e73d73d7677dd5f69f26a8 100644 (file)
@@ -3672,7 +3672,6 @@ static int qc_do_build_hdshk_pkt(unsigned char *pos, const unsigned char *end,
        size_t len, len_frms, token_fields_len, padding_len;
        struct quic_frame frm = { .type = QUIC_FT_CRYPTO, };
        struct quic_frame ack_frm = { .type = QUIC_FT_ACK, };
-       struct quic_crypto *crypto = &frm.crypto;
        size_t ack_frm_len;
        int64_t largest_acked_pn;
        int add_ping_frm;
@@ -3703,11 +3702,14 @@ static int qc_do_build_hdshk_pkt(unsigned char *pos, const unsigned char *end,
                goto err;
        }
 
-       largest_acked_pn = qel->pktns->tx.largest_acked_pn;
+       largest_acked_pn = HA_ATOMIC_LOAD(&qel->pktns->tx.largest_acked_pn);
        /* packet number length */
        *pn_len = quic_packet_number_length(pn, largest_acked_pn);
 
-       quic_build_packet_long_header(&pos, end, pkt_type, *pn_len, conn);
+       if (pkt_type == QUIC_PACKET_TYPE_SHORT)
+               quic_build_packet_short_header(&pos, end, *pn_len, conn);
+       else
+               quic_build_packet_long_header(&pos, end, pkt_type, *pn_len, conn);
 
        /* Encode the token length (0) for an Initial packet. */
        if (pkt_type == QUIC_PACKET_TYPE_INITIAL)
@@ -3770,7 +3772,8 @@ static int qc_do_build_hdshk_pkt(unsigned char *pos, const unsigned char *end,
                len = len_frms;
        else
                len += QUIC_TLS_TAG_LEN;
-       quic_enc_int(&pos, end, len);
+       if (pkt_type != QUIC_PACKET_TYPE_SHORT)
+               quic_enc_int(&pos, end, len);
 
        /* Packet number field address. */
        *buf_pn = pos;