diff options
author | Hugo Landau <hlandau@openssl.org> | 2024-03-28 08:58:50 +0000 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2024-04-10 15:48:25 +0200 |
commit | 26dd6ba070fdc2566c1a51d29e57e55c9ec7c78b (patch) | |
tree | cf09c02f2b761363f9bc1b23294ddeadc44c7163 /include | |
parent | 60f69680b280bc847819afa8421cdeddb98db87f (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)
Diffstat (limited to 'include')
-rw-r--r-- | include/internal/quic_stream_map.h | 34 |
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 * =============== * |