74 lines
2.6 KiB
C
74 lines
2.6 KiB
C
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
|
|
/*
|
|
* lsquic_conn_public.h -- Connection's "public interface"
|
|
*
|
|
* This structure is used to bundle things in connection that stream
|
|
* needs access to into a single object. This way, the space per
|
|
* stream object is one pointer instead of four or five.
|
|
*/
|
|
|
|
#ifndef LSQUIC_CONN_PUBLIC_H
|
|
#define LSQUIC_CONN_PUBLIC_H 1
|
|
|
|
struct lsquic_conn;
|
|
struct lsquic_engine_public;
|
|
struct lsquic_mm;
|
|
struct lsquic_hash;
|
|
struct headers_stream;
|
|
struct lsquic_send_ctl;
|
|
#if LSQUIC_CONN_STATS
|
|
struct conn_stats;
|
|
#endif
|
|
struct qpack_enc_hdl;
|
|
struct qpack_dec_hdl;
|
|
struct network_path;
|
|
|
|
struct lsquic_conn_public {
|
|
struct lsquic_streams_tailq sending_streams, /* Send RST_STREAM, BLOCKED, and WUF frames */
|
|
read_streams,
|
|
write_streams, /* Send STREAM frames */
|
|
service_streams;
|
|
struct lsquic_hash *all_streams;
|
|
struct lsquic_cfcw cfcw;
|
|
struct lsquic_conn_cap conn_cap;
|
|
struct lsquic_rtt_stats rtt_stats;
|
|
struct lsquic_engine_public *enpub;
|
|
struct malo *packet_out_malo;
|
|
struct lsquic_conn *lconn;
|
|
struct lsquic_mm *mm;
|
|
union {
|
|
struct {
|
|
struct headers_stream *hs;
|
|
} gquic;
|
|
struct {
|
|
struct qpack_enc_hdl *qeh;
|
|
struct qpack_dec_hdl *qdh;
|
|
struct hcso_writer *hcso;
|
|
struct lsquic_hash *promises;
|
|
} ietf;
|
|
} u;
|
|
enum {
|
|
CP_STREAM_UNBLOCKED = 1 << 0, /* Set when a stream becomes unblocked */
|
|
} cp_flags;
|
|
struct lsquic_send_ctl *send_ctl;
|
|
#if LSQUIC_CONN_STATS
|
|
struct conn_stats *conn_stats;
|
|
#endif
|
|
const struct network_path *path;
|
|
#if LSQUIC_EXTRA_CHECKS
|
|
unsigned long stream_frame_bytes;
|
|
unsigned wtp_level; /* wtp: Write To Packets */
|
|
#endif
|
|
/* "unsigned" is wide enough: these values are only used for amplification
|
|
* limit before initial path is validated.
|
|
*/
|
|
unsigned bytes_in; /* successfully processed */
|
|
unsigned bytes_out;
|
|
/* Used for no-progress timeout */
|
|
lsquic_time_t last_tick, last_prog;
|
|
unsigned max_peer_ack_usec;
|
|
uint8_t n_special_streams;
|
|
};
|
|
|
|
#endif
|