* TX_PACKETISER_RES_NO_PKT if no packets were sent (e.g. because nothing wants
* to send anything), and TX_PACKETISER_RES_SENT_PKT if packets were sent.
*
- * If an ACK-eliciting packet was sent, 1 is written to *sent_ack_eliciting,
- * otherwise *sent_ack_eliciting is unchanged.
+ * *status is filled with status information about the generated packet, if any.
+ * See QUIC_TXP_STATUS for details.
*/
#define TX_PACKETISER_RES_FAILURE 0
#define TX_PACKETISER_RES_NO_PKT 1
#define TX_PACKETISER_RES_SENT_PKT 2
+
+typedef struct quic_txp_status_st {
+ int sent_ack_eliciting; /* Was an ACK-eliciting packet sent? */
+} QUIC_TXP_STATUS;
+
int ossl_quic_tx_packetiser_generate(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t archetype,
- int *sent_ack_eliciting);
+ QUIC_TXP_STATUS *status);
/*
* Returns 1 if one or more packets would be generated if
/* Try to generate packets and if possible, flush them to the network. */
static int ch_tx(QUIC_CHANNEL *ch)
{
- int sent_ack_eliciting = 0;
+ QUIC_TXP_STATUS status;
if (ch->state == QUIC_CHANNEL_STATE_TERMINATING_CLOSING) {
/*
*/
switch (ossl_quic_tx_packetiser_generate(ch->txp,
TX_PACKETISER_ARCHETYPE_NORMAL,
- &sent_ack_eliciting)) {
+ &status)) {
case TX_PACKETISER_RES_SENT_PKT:
ch->have_sent_any_pkt = 1; /* Packet was sent */
* sending an ack-eliciting packet if no other ack-eliciting packets
* have been sent since last receiving and processing a packet.'
*/
- if (sent_ack_eliciting && !ch->have_sent_ack_eliciting_since_rx) {
+ if (status.sent_ack_eliciting && !ch->have_sent_ack_eliciting_since_rx) {
ch_update_idle(ch);
ch->have_sent_ack_eliciting_since_rx = 1;
}
int is_last_in_dgram,
int dgram_contains_initial,
int chosen_for_conn_close,
- int *sent_ack_eliciting);
+ QUIC_TXP_STATUS *status);
static size_t txp_determine_pn_len(OSSL_QUIC_TX_PACKETISER *txp);
static int txp_determine_ppl_from_pl(OSSL_QUIC_TX_PACKETISER *txp,
size_t pl,
size_t pkt_overhead,
QUIC_PKT_HDR *phdr,
int chosen_for_conn_close,
- int *sent_ack_eliciting);
+ QUIC_TXP_STATUS *status);
OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETISER_ARGS *args)
{
*/
int ossl_quic_tx_packetiser_generate(OSSL_QUIC_TX_PACKETISER *txp,
uint32_t archetype,
- int *sent_ack_eliciting)
+ QUIC_TXP_STATUS *status)
{
uint32_t enc_level, conn_close_enc_level = QUIC_ENC_LEVEL_NUM;
int have_pkt_for_el[QUIC_ENC_LEVEL_NUM], is_last_in_dgram, cc_can_send;
size_t num_el_in_dgram = 0, pkts_done = 0;
int rc;
+ status->sent_ack_eliciting = 0;
+
/*
* If CC says we cannot send we still may be able to send any queued probes.
*/
is_last_in_dgram,
have_pkt_for_el[QUIC_ENC_LEVEL_INITIAL],
enc_level == conn_close_enc_level,
- sent_ack_eliciting);
+ status);
if (rc != TXP_ERR_SUCCESS) {
/*
int is_last_in_dgram,
int dgram_contains_initial,
int chosen_for_conn_close,
- int *sent_ack_eliciting)
+ QUIC_TXP_STATUS *status)
{
int must_pad = dgram_contains_initial && is_last_in_dgram;
size_t min_dpl, min_pl, min_ppl, cmpl, cmppl, running_total;
return txp_generate_for_el_actual(txp, enc_level, archetype, min_ppl, cmppl,
pkt_overhead, &phdr,
chosen_for_conn_close,
- sent_ack_eliciting);
+ status);
}
/* Determine how many bytes we should use for the encoded PN. */
size_t pkt_overhead,
QUIC_PKT_HDR *phdr,
int chosen_for_conn_close,
- int *sent_ack_eliciting)
+ QUIC_TXP_STATUS *status)
{
int rc = TXP_ERR_SUCCESS;
struct archetype_data a;
--probe_info->pto[pn_space];
}
- if (have_ack_eliciting)
- *sent_ack_eliciting = 1;
+ status->sent_ack_eliciting = 1;
/* Done. */
tx_helper_cleanup(&h);
static int run_script(const struct script_op *script)
{
- int testresult = 0, have_helper = 0, sent_ack_eliciting = 0;
+ int testresult = 0, have_helper = 0;
+ QUIC_TXP_STATUS status;
struct helper h;
const struct script_op *op;
switch (op->opcode) {
case OPK_TXP_GENERATE:
if (!TEST_int_eq(ossl_quic_tx_packetiser_generate(h.txp, (int)op->arg0,
- &sent_ack_eliciting),
+ &status),
TX_PACKETISER_RES_SENT_PKT))
goto err;
break;
case OPK_TXP_GENERATE_NONE:
if (!TEST_int_eq(ossl_quic_tx_packetiser_generate(h.txp, (int)op->arg0,
- &sent_ack_eliciting),
+ &status),
TX_PACKETISER_RES_NO_PKT))
goto err;