int quic_lstnr_dgram_dispatch(unsigned char *buf, size_t len, void *owner,
struct sockaddr_storage *saddr,
struct quic_dgram *new_dgram, struct list *dgrams);
-int qc_send_app_pkts(struct quic_conn *qc, struct list *frms);
+int qc_send_app_pkts(struct quic_conn *qc, int old_data, struct list *frms);
void qc_notify_close(struct quic_conn *qc);
}
if (!LIST_ISEMPTY(frms))
- qc_send_app_pkts(qcc->conn->handle.qc, frms);
+ qc_send_app_pkts(qcc->conn->handle.qc, 0, frms);
/* If there is frames left, check if the transport layer has send some
* data or is blocked.
}
/* Sends application level packets from <qc> QUIC connection */
-int qc_send_app_pkts(struct quic_conn *qc, struct list *frms)
+int qc_send_app_pkts(struct quic_conn *qc, int old_data, struct list *frms)
{
int ret;
struct qring *qr;
/* Never happens */
return 1;
+ if (old_data)
+ qc->flags |= QUIC_FL_CONN_RETRANS_OLD_DATA;
ret = qc_prep_app_pkts(qc, qr, frms);
if (ret == -1)
goto err;
goto err;
out:
+ qc->flags &= ~QUIC_FL_CONN_RETRANS_OLD_DATA;
MT_LIST_APPEND(qc->tx.qring_list, &qr->mt_list);
return 1;
err:
+ qc->flags &= ~QUIC_FL_CONN_RETRANS_OLD_DATA;
MT_LIST_APPEND(qc->tx.qring_list, &qr->mt_list);
TRACE_DEVEL("leaving in error", QUIC_EV_CONN_IO_CB, qc);
return 0;
!(qc->flags & QUIC_FL_CONN_IMMEDIATE_CLOSE))
goto out;
- if (!qc_send_app_pkts(qc, &qel->pktns->tx.frms))
+ if (!qc_send_app_pkts(qc, 0, &qel->pktns->tx.frms))
goto err;
out: