From fa10ff62270a9f2209c5786225274ca35155ae02 Mon Sep 17 00:00:00 2001 From: Hugo Landau Date: Thu, 28 Mar 2024 08:58:50 +0000 Subject: QUIC QSM: Add function to determine if data is waiting Reviewed-by: Neil Horman Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/24039) --- include/internal/quic_stream_map.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/include/internal/quic_stream_map.h b/include/internal/quic_stream_map.h index ae7490619b..30ae1e5f98 100644 --- a/include/internal/quic_stream_map.h +++ b/include/internal/quic_stream_map.h @@ -503,6 +503,40 @@ static ossl_inline ossl_unused int ossl_quic_stream_recv_get_final_size(const QU } } +/* + * Determines the number of bytes available still to be read, and whether a FIN + * has yet to be read. + */ +static ossl_inline ossl_unused int ossl_quic_stream_recv_pending(const QUIC_STREAM *s) +{ + size_t avail; + int fin = 0; + + switch (s->recv_state) { + default: + case QUIC_RSTREAM_STATE_NONE: + return 0; + + case QUIC_RSTREAM_STATE_RECV: + case QUIC_RSTREAM_STATE_SIZE_KNOWN: + case QUIC_RSTREAM_STATE_DATA_RECVD: + if (!ossl_quic_rstream_available(s->rstream, &avail, &fin)) + avail = 0; + + if (avail == 0 && fin) + avail = 1; + + return avail; + + case QUIC_RSTREAM_STATE_RESET_RECVD: + return 1; + + case QUIC_RSTREAM_STATE_DATA_READ: + case QUIC_RSTREAM_STATE_RESET_READ: + return 0; + } +} + /* * QUIC Stream Map * =============== -- cgit v1.2.3