summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorHugo Landau <hlandau@openssl.org>2023-05-23 12:23:06 +0100
committerPauli <pauli@openssl.org>2023-06-16 09:26:28 +1000
commit8f9c9213a1ba034de3140a0d0c0c3b1e46afe457 (patch)
tree820c91213307e5068aca8179b61a8d203031e410 /ssl
parent007f9e99ea92989d304584803e693fc90fb6af94 (diff)
QUIC TXP: Allow callbacks on ACK transmission
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/21029)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/quic/quic_txp.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/ssl/quic/quic_txp.c b/ssl/quic/quic_txp.c
index 08f3d7f7b6..7c5e4295f3 100644
--- a/ssl/quic/quic_txp.c
+++ b/ssl/quic/quic_txp.c
@@ -75,6 +75,11 @@ struct ossl_quic_tx_packetiser_st {
void *msg_callback_arg;
SSL *msg_callback_ssl;
+ /* Callbacks. */
+ void (*ack_tx_cb)(const OSSL_QUIC_FRAME_ACK *ack,
+ uint32_t pn_space,
+ void *arg);
+ void *ack_tx_cb_arg;
};
/*
@@ -474,6 +479,16 @@ int ossl_quic_tx_packetiser_set_peer(OSSL_QUIC_TX_PACKETISER *txp,
return 1;
}
+void ossl_quic_tx_packetiser_set_ack_tx_cb(OSSL_QUIC_TX_PACKETISER *txp,
+ void (*cb)(const OSSL_QUIC_FRAME_ACK *ack,
+ uint32_t pn_space,
+ void *arg),
+ void *cb_arg)
+{
+ txp->ack_tx_cb = cb;
+ txp->ack_tx_cb_arg = cb_arg;
+}
+
int ossl_quic_tx_packetiser_discard_enc_level(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t enc_level)
{
@@ -1247,6 +1262,9 @@ static int txp_generate_pre_token(OSSL_QUIC_TX_PACKETISER *txp,
if (ack->num_ack_ranges > 0)
tpkt->ackm_pkt.largest_acked = ack->ack_ranges[0].end;
+
+ if (txp->ack_tx_cb != NULL)
+ txp->ack_tx_cb(&ack2, pn_space, txp->ack_tx_cb_arg);
} else {
tx_helper_rollback(h);
}