Packages
hackney
3.0.2
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/lsquic/src/liblsquic/lsquic_qenc_hdl.h
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_qenc_hdl.h -- QPACK encoder streams handler
*
* The handler owns two unidirectional streams: a) locally-initiated QPACK
* encoder stream, to which it writes; and b) peer-initiated QPACK decoder
* stream, from which it reads.
*/
#ifndef LSQUIC_QENC_HDL_H
#define LSQUIC_QENC_HDL_H 1
struct lsquic_conn;
struct lsquic_stream;
struct lsquic_stream_if;
struct qpack_exp_record;
struct qpack_enc_hdl
{
struct lsquic_conn *qeh_conn;
enum {
QEH_INITIALIZED = 1 << 0,
QEH_HAVE_SETTINGS = 1 << 1,
} qeh_flags;
unsigned qeh_max_prefix_size;
struct lsqpack_enc qeh_encoder;
struct lsquic_stream *qeh_enc_sm_out;
struct frab_list qeh_fral;
struct lsquic_stream *qeh_dec_sm_in;
struct qpack_exp_record *qeh_exp_rec;
size_t qeh_tsu_sz;
unsigned char qeh_tsu_buf[LSQPACK_LONGEST_SDTC];
};
void
lsquic_qeh_init (struct qpack_enc_hdl *, struct lsquic_conn *);
int
lsquic_qeh_settings (struct qpack_enc_hdl *, unsigned max_table_size,
unsigned dyn_table_size, unsigned max_risked_streams, int server);
void
lsquic_qeh_cleanup (struct qpack_enc_hdl *);
#define lsquic_qeh_has_dec_stream(qeh) ((qeh)->qeh_dec_sm_in != NULL)
enum qwh_status {
QWH_FULL, /* All bytes written to encoder stream. This is also returned
* if there were no bytes to write.
*/
QWH_PARTIAL,/* Not all bytes are written to the encoder stream. In this
* case, `completion_offset' is set to the value of the
* encoder stream offset when the necessary bytes will have
* been written.
*/
QWH_ENOBUF, /* Not enough room in `buf' to write the full header block */
QWH_ERR, /* Some other error */
};
enum qwh_status
lsquic_qeh_write_headers (struct qpack_enc_hdl *, lsquic_stream_id_t stream_id,
unsigned seqno, const struct lsquic_http_headers *, unsigned char *buf,
size_t *prefix_sz, size_t *headers_sz, uint64_t *completion_offset,
enum lsqpack_enc_header_flags *hflags);
uint64_t
lsquic_qeh_enc_off (struct qpack_enc_hdl *);
size_t
lsquic_qeh_write_avail (struct qpack_enc_hdl *);
size_t
lsquic_qeh_max_prefix_size (const struct qpack_enc_hdl *);
extern const struct lsquic_stream_if *const lsquic_qeh_enc_sm_out_if;
extern const struct lsquic_stream_if *const lsquic_qeh_dec_sm_in_if;
#endif