aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/internal/quic_tserver.h7
-rw-r--r--ssl/quic/quic_tserver.c13
2 files changed, 20 insertions, 0 deletions
diff --git a/include/internal/quic_tserver.h b/include/internal/quic_tserver.h
index 744c34472e..a040a761fc 100644
--- a/include/internal/quic_tserver.h
+++ b/include/internal/quic_tserver.h
@@ -150,6 +150,13 @@ int ossl_quic_tserver_stream_has_peer_reset_stream(QUIC_TSERVER *srv,
*/
int ossl_quic_tserver_set_new_local_cid(QUIC_TSERVER *srv,
const QUIC_CONN_ID *conn_id);
+
+/*
+ * Returns the stream ID of the next incoming stream, or UINT64_MAX if there
+ * currently is none.
+ */
+uint64_t ossl_quic_tserver_pop_incoming_stream(QUIC_TSERVER *srv);
+
# endif
#endif
diff --git a/ssl/quic/quic_tserver.c b/ssl/quic/quic_tserver.c
index 8e15587bec..6788851f29 100644
--- a/ssl/quic/quic_tserver.c
+++ b/ssl/quic/quic_tserver.c
@@ -404,3 +404,16 @@ int ossl_quic_tserver_set_new_local_cid(QUIC_TSERVER *srv,
/* Replace existing local connection ID in the QUIC_CHANNEL */
return ossl_quic_channel_replace_local_cid(srv->ch, conn_id);
}
+
+uint64_t ossl_quic_tserver_pop_incoming_stream(QUIC_TSERVER *srv)
+{
+ QUIC_STREAM_MAP *qsm = ossl_quic_channel_get_qsm(srv->ch);
+ QUIC_STREAM *qs = ossl_quic_stream_map_peek_accept_queue(qsm);
+
+ if (qs == NULL)
+ return UINT64_MAX;
+
+ ossl_quic_stream_map_remove_from_accept_queue(qsm, qs, ossl_time_zero());
+
+ return qs->id;
+}