diff --git a/src/quic_conn.c b/src/quic_conn.c index c67ae6d54..529e99777 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -5158,40 +5158,38 @@ struct task *qc_process_timer(struct task *task, void *ctx, unsigned int state) if (qc->path->in_flight) { pktns = quic_pto_pktns(qc, qc->state >= QUIC_HS_ST_CONFIRMED, NULL); - if (qc_notify_send(qc)) { - pktns->tx.pto_probe = QUIC_MAX_NB_PTO_DGRAMS; + if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) { + if (qc_may_probe_ipktns(qc)) { + qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; + pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + TRACE_STATE("needs to probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc); + } + else { + TRACE_STATE("Cannot probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc); + } + if (qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].tx.in_flight) { + qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; + qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc); + } } - else { - if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) { + else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE]) { + TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc); + qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; + pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + if (qc->pktns[QUIC_TLS_PKTNS_INITIAL].tx.in_flight) { if (qc_may_probe_ipktns(qc)) { - qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; - pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + qc->pktns[QUIC_TLS_PKTNS_INITIAL].flags |= QUIC_FL_PKTNS_PROBE_NEEDED; TRACE_STATE("needs to probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc); } else { TRACE_STATE("Cannot probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc); } - if (qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].tx.in_flight) { - qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; - qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].flags |= QUIC_FL_PKTNS_PROBE_NEEDED; - TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc); - } } - else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE]) { - TRACE_STATE("needs to probe Handshake packet number space", QUIC_EV_CONN_TXPKT, qc); - qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; - pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED; - if (qc->pktns[QUIC_TLS_PKTNS_INITIAL].tx.in_flight) { - if (qc_may_probe_ipktns(qc)) { - qc->pktns[QUIC_TLS_PKTNS_INITIAL].flags |= QUIC_FL_PKTNS_PROBE_NEEDED; - TRACE_STATE("needs to probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc); - } - else { - TRACE_STATE("Cannot probe Initial packet number space", QUIC_EV_CONN_TXPKT, qc); - } - } - } - else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_01RTT]) { + } + else if (pktns == &qc->pktns[QUIC_TLS_PKTNS_01RTT]) { + /* Wake up upper layer if waiting to send new data. */ + if (!qc_notify_send(qc)) { TRACE_STATE("needs to probe 01RTT packet number space", QUIC_EV_CONN_TXPKT, qc); qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED;