*/
QUIC_PN ossl_quic_tx_packetiser_get_next_pn(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t pn_space);
+
+/*
+ * Sets a callback which is called whenever TXP sends an ACK frame. The callee
+ * must not modify the ACK frame data. Can be used to snoop on PNs being ACKed.
+ */
+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);
+
# endif
#endif
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;
};
/*
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)
{
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);
}