summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Landau <hlandau@openssl.org>2023-04-18 19:30:56 +0100
committerHugo Landau <hlandau@openssl.org>2023-05-12 14:47:13 +0100
commitf0e22d1be8a66106932f6f7c069087372ff33789 (patch)
tree6d9961d49e6c8909f1f5796b1f5d50c29b4ca193
parent228940168529ba7c10b86934849b19818f79f74e (diff)
downloadopenssl-new-f0e22d1be8a66106932f6f7c069087372ff33789.tar.gz
QUIC TSERVER: Allow STOP_SENDING/RESET_STREAM to be queried
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/20765)
-rw-r--r--include/internal/quic_tserver.h16
-rw-r--r--ssl/quic/quic_tserver.c34
2 files changed, 50 insertions, 0 deletions
diff --git a/include/internal/quic_tserver.h b/include/internal/quic_tserver.h
index 662b1c0979..a42bbaa684 100644
--- a/include/internal/quic_tserver.h
+++ b/include/internal/quic_tserver.h
@@ -129,6 +129,22 @@ int ossl_quic_tserver_stream_new(QUIC_TSERVER *srv,
BIO *ossl_quic_tserver_get0_rbio(QUIC_TSERVER *srv);
+/*
+ * Returns 1 if the peer has sent a STOP_SENDING frame for a stream.
+ * app_error_code is written if this returns 1.
+ */
+int ossl_quic_tserver_stream_has_peer_stop_sending(QUIC_TSERVER *srv,
+ uint64_t stream_id,
+ uint64_t *app_error_code);
+
+/*
+ * Returns 1 if the peer has sent a RESET_STREAM frame for a stream.
+ * app_error_code is written if this returns 1.
+ */
+int ossl_quic_tserver_stream_has_peer_reset_stream(QUIC_TSERVER *srv,
+ uint64_t stream_id,
+ uint64_t *app_error_code);
+
# endif
#endif
diff --git a/ssl/quic/quic_tserver.c b/ssl/quic/quic_tserver.c
index 46d39c9d90..cd24d5c59e 100644
--- a/ssl/quic/quic_tserver.c
+++ b/ssl/quic/quic_tserver.c
@@ -363,3 +363,37 @@ BIO *ossl_quic_tserver_get0_rbio(QUIC_TSERVER *srv)
{
return srv->args.net_rbio;
}
+
+int ossl_quic_tserver_stream_has_peer_stop_sending(QUIC_TSERVER *srv,
+ uint64_t stream_id,
+ uint64_t *app_error_code)
+{
+ QUIC_STREAM *qs;
+
+ qs = ossl_quic_stream_map_get_by_id(ossl_quic_channel_get_qsm(srv->ch),
+ stream_id);
+ if (qs == NULL)
+ return 0;
+
+ if (qs->peer_stop_sending && app_error_code != NULL)
+ *app_error_code = qs->peer_stop_sending_aec;
+
+ return qs->peer_stop_sending;
+}
+
+int ossl_quic_tserver_stream_has_peer_reset_stream(QUIC_TSERVER *srv,
+ uint64_t stream_id,
+ uint64_t *app_error_code)
+{
+ QUIC_STREAM *qs;
+
+ qs = ossl_quic_stream_map_get_by_id(ossl_quic_channel_get_qsm(srv->ch),
+ stream_id);
+ if (qs == NULL)
+ return 0;
+
+ if (qs->peer_reset_stream && app_error_code != NULL)
+ *app_error_code = qs->peer_reset_stream_aec;
+
+ return qs->peer_reset_stream;
+}