summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Landau <hlandau@openssl.org>2024-03-28 08:58:50 +0000
committerTomas Mraz <tomas@openssl.org>2024-04-10 15:48:25 +0200
commit26dd6ba070fdc2566c1a51d29e57e55c9ec7c78b (patch)
treecf09c02f2b761363f9bc1b23294ddeadc44c7163
parent60f69680b280bc847819afa8421cdeddb98db87f (diff)
QUIC QSM: Add function to determine if data is waiting
Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24040) (cherry picked from commit 3c2bc702eb9287b84e8584ad427e72da0ab21ec1)
-rw-r--r--include/internal/quic_stream_map.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/include/internal/quic_stream_map.h b/include/internal/quic_stream_map.h
index 5c1e1b35b9..55a395de16 100644
--- a/include/internal/quic_stream_map.h
+++ b/include/internal/quic_stream_map.h
@@ -504,6 +504,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
* ===============
*