mirror of
https://github.com/openssl/openssl.git
synced 2025-02-23 14:42:15 +08:00
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)
This commit is contained in:
parent
007f9e99ea
commit
8f9c9213a1
@ -184,6 +184,17 @@ void ossl_quic_tx_packetiser_set_msg_callback_arg(OSSL_QUIC_TX_PACKETISER *txp,
|
||||
*/
|
||||
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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user