summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/internal/quic_wire.h3
-rw-r--r--ssl/quic/quic_wire.c12
2 files changed, 15 insertions, 0 deletions
diff --git a/include/internal/quic_wire.h b/include/internal/quic_wire.h
index a514d08d3d..e9ff8e6f35 100644
--- a/include/internal/quic_wire.h
+++ b/include/internal/quic_wire.h
@@ -159,6 +159,9 @@ typedef struct ossl_quic_frame_ack_st {
unsigned int ecn_present : 1;
} OSSL_QUIC_FRAME_ACK;
+/* Returns 1 if the given frame contains the given PN. */
+int ossl_quic_frame_ack_contains_pn(const OSSL_QUIC_FRAME_ACK *ack, QUIC_PN pn);
+
/* QUIC Frame: STREAM */
typedef struct ossl_quic_frame_stream_st {
uint64_t stream_id; /* Stream ID */
diff --git a/ssl/quic/quic_wire.c b/ssl/quic/quic_wire.c
index 7df32c77b2..937d16e1c8 100644
--- a/ssl/quic/quic_wire.c
+++ b/ssl/quic/quic_wire.c
@@ -15,6 +15,18 @@
OSSL_SAFE_MATH_UNSIGNED(uint64_t, uint64_t)
+int ossl_quic_frame_ack_contains_pn(const OSSL_QUIC_FRAME_ACK *ack, QUIC_PN pn)
+{
+ size_t i;
+
+ for (i = 0; i < ack->num_ack_ranges; ++i)
+ if (pn >= ack->ack_ranges[i].start
+ && pn <= ack->ack_ranges[i].end)
+ return 1;
+
+ return 0;
+}
+
/*
* QUIC Wire Format Encoding
* =========================