summaryrefslogtreecommitdiff
path: root/ssl/quic/quic_txp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ssl/quic/quic_txp.c')
-rw-r--r--ssl/quic/quic_txp.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/ssl/quic/quic_txp.c b/ssl/quic/quic_txp.c
index 10a1a5f18e..a1341d8b13 100644
--- a/ssl/quic/quic_txp.c
+++ b/ssl/quic/quic_txp.c
@@ -310,6 +310,8 @@ static QUIC_SSTREAM *get_sstream_by_id(uint64_t stream_id, uint32_t pn_space,
void *arg);
static void on_regen_notify(uint64_t frame_type, uint64_t stream_id,
QUIC_TXPIM_PKT *pkt, void *arg);
+static void on_confirm_notify(uint64_t frame_type, uint64_t stream_id,
+ QUIC_TXPIM_PKT *pkt, void *arg);
static void on_sstream_updated(uint64_t stream_id, void *arg);
static int sstream_is_pending(QUIC_SSTREAM *sstream);
static int txp_el_pending(OSSL_QUIC_TX_PACKETISER *txp, uint32_t enc_level,
@@ -369,6 +371,7 @@ OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETIS
txp->args.cfq, txp->args.ackm, txp->args.txpim,
get_sstream_by_id, txp,
on_regen_notify, txp,
+ on_confirm_notify, txp,
on_sstream_updated, txp)) {
OPENSSL_free(txp);
return NULL;
@@ -1129,6 +1132,42 @@ static void on_regen_notify(uint64_t frame_type, uint64_t stream_id,
}
}
+static void on_confirm_notify(uint64_t frame_type, uint64_t stream_id,
+ QUIC_TXPIM_PKT *pkt, void *arg)
+{
+ OSSL_QUIC_TX_PACKETISER *txp = arg;
+
+ switch (frame_type) {
+ case OSSL_QUIC_FRAME_TYPE_STOP_SENDING:
+ {
+ QUIC_STREAM *s
+ = ossl_quic_stream_map_get_by_id(txp->args.qsm, stream_id);
+
+ if (s == NULL)
+ return;
+
+ s->acked_stop_sending = 1;
+ ossl_quic_stream_map_update_state(txp->args.qsm, s);
+ }
+ break;
+ case OSSL_QUIC_FRAME_TYPE_RESET_STREAM:
+ {
+ QUIC_STREAM *s
+ = ossl_quic_stream_map_get_by_id(txp->args.qsm, stream_id);
+
+ if (s == NULL)
+ return;
+
+ s->acked_reset_stream = 1;
+ ossl_quic_stream_map_update_state(txp->args.qsm, s);
+ }
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
static void on_sstream_updated(uint64_t stream_id, void *arg)
{
OSSL_QUIC_TX_PACKETISER *txp = arg;