struct list send_list = LIST_HEAD_INIT(send_list);
enum quic_tx_err ret = QUIC_TX_ERR_NONE;
int max_dgram = 0, sent;
+ struct quic_enc_level *qel = objt_listener(qc->target) ? qc->ael :
+ qc->eel ? qc->eel : qc->ael;
TRACE_ENTER(QUIC_EV_CONN_TXPKT, qc);
BUG_ON(qc->mux_state != QC_MUX_READY); /* Only MUX can uses this function so it must be ready. */
return QUIC_TX_ERR_FATAL;
}
+ /* The QUIC client may need to send Initial CRYPTO data before early data. */
+ if (objt_server(qc->target) && qel == qc->eel && qel_need_sending(qc->iel, qc))
+ qel_register_send(&send_list, qc->iel, &qc->iel->pktns->tx.frms);
+
/* Try to send post handshake frames first unless on 0-RTT. */
if ((qc->flags & QUIC_FL_CONN_NEED_POST_HANDSHAKE_FRMS) &&
qc->state >= QUIC_HS_ST_COMPLETE) {
}
TRACE_STATE("preparing data (from MUX)", QUIC_EV_CONN_TXPKT, qc);
- qel_register_send(&send_list, qc->ael, frms);
+ qel_register_send(&send_list, qel, frms);
sent = qc_send(qc, 0, &send_list, max_dgram);
if (pacer && qc->path->cc.algo->check_app_limited)