blob: e10ca6da032ce9dba008dfe093664c9ff6723b98 [file] [log] [blame]
#ifndef _HAPROXY_QUIC_STREAM_T_H_
#define _HAPROXY_QUIC_STREAM_T_H_
#ifdef USE_QUIC
#include <import/ebtree-t.h>
#include <haproxy/buf-t.h>
#include <haproxy/list-t.h>
/* A QUIC STREAM buffer used for Tx.
*
* Currently, no offset is associated with an offset. The qc_stream_desc must
* store them in order and keep the offset of the oldest buffer. The buffers
* can be freed in strict order.
*/
struct qc_stream_buf {
struct buffer buf; /* STREAM payload */
struct list list; /* element for qc_stream_desc list */
};
/* QUIC STREAM descriptor.
*
* This structure is the low-level counterpart of the QUIC STREAM at the MUX
* layer. It is stored in the quic-conn and provides facility for Tx buffering.
*
* Once the MUX has finished to transfer data on a STREAM, it must release its
* QUIC STREAM descriptor. The descriptor will be kept by the quic_conn until
* all acknowledgement has been received.
*/
struct qc_stream_desc {
struct eb64_node by_id; /* node for quic_conn tree */
struct quic_conn *qc;
struct list buf_list; /* buffers waiting for ACK, oldest offset first */
struct qc_stream_buf *buf; /* current buffer used by the MUX */
uint64_t buf_offset; /* base offset of current buffer */
uint64_t ack_offset; /* last acknowledged offset */
struct eb_root acked_frms; /* ACK frames tree for non-contiguous ACK ranges */
int release; /* set to 1 when the MUX has finished to use this stream */
void *ctx; /* MUX specific context */
};
#endif /* USE_QUIC */
#endif /* _HAPROXY_QUIC_STREAM_T_H_ */