QUIC TXP: Add a function to query if the TXP wants to generate a packet

For use by QUIC CSM.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19703)
This commit is contained in:
Hugo Landau 2022-10-31 16:03:03 +00:00
parent b2c94b9399
commit 04e5226f65
2 changed files with 32 additions and 0 deletions

View File

@ -86,6 +86,19 @@ void ossl_quic_tx_packetiser_free(OSSL_QUIC_TX_PACKETISER *txp);
int ossl_quic_tx_packetiser_generate(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t archetype);
/*
* Returns 1 if one or more packets would be generated if
* ossl_quic_tx_packetiser_generate were called.
*
* If TX_PACKETISER_BYPASS_CC is set in flags, congestion control is
* ignored for the purposes of making this determination.
*/
#define TX_PACKETISER_BYPASS_CC (1U << 0)
int ossl_quic_tx_packetiser_has_pending(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t archetype,
uint32_t flags);
/*
* Set the token used in Initial packets. The callback is called when the buffer
* is no longer needed; for example, when the TXP is freed or when this function

View File

@ -460,6 +460,25 @@ void ossl_quic_tx_packetiser_schedule_ack_eliciting(OSSL_QUIC_TX_PACKETISER *txp
#define TXP_ERR_SPACE 2 /* Not enough room for another packet */
#define TXP_ERR_INPUT 3 /* Invalid/malformed input */
int ossl_quic_tx_packetiser_has_pending(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t archetype,
uint32_t flags)
{
uint32_t enc_level;
int bypass_cc = ((flags & TX_PACKETISER_BYPASS_CC) != 0);
if (!bypass_cc && !txp->args.cc_method->can_send(txp->args.cc_data))
return 0;
for (enc_level = QUIC_ENC_LEVEL_INITIAL;
enc_level < QUIC_ENC_LEVEL_NUM;
++enc_level)
if (txp_el_pending(txp, enc_level, archetype))
return 1;
return 0;
}
/*
* Generates a datagram by polling the various ELs to determine if they want to
* generate any frames, and generating a datagram which coalesces packets for