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_qdec_hdl.h
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_qdec_hdl.h -- QPACK decoder streams handler
*
* The handler owns two unidirectional streams: a) peer-initiated QPACK
* encoder stream, from which it reads; and b) locally-initiated QPACK
* decoder stream, to which it writes.
*/
#ifndef LSQUIC_QDEC_HDL_H
#define LSQUIC_QDEC_HDL_H 1
struct lsquic_conn;
struct lsquic_stream;
struct lsquic_stream_if;
struct lsquic_engine_public;
struct qpack_exp_record;
struct qpack_dec_hdl
{
struct lsquic_conn *qdh_conn;
enum {
QDH_INITIALIZED = 1 << 0,
QDH_PUSH_PROMISE = 1 << 1,
QDH_SAVE_UA = 1 << 2,
QDH_SERVER = 1 << 3,
} qdh_flags;
struct lsqpack_dec qdh_decoder;
struct lsquic_stream *qdh_enc_sm_in;
struct frab_list qdh_fral;
struct lsquic_stream *qdh_dec_sm_out;
const struct lsquic_engine_public
*qdh_enpub;
struct http1x_ctor_ctx qdh_h1x_ctor_ctx;
void *qdh_hsi_ctx;
void (*qdh_on_dec_sent_func)(void *);
void *qdh_on_dec_sent_ctx;
struct qpack_exp_record *qdh_exp_rec;
char *qdh_ua;
};
int
lsquic_qdh_init (struct qpack_dec_hdl *, struct lsquic_conn *,
int is_server, const struct lsquic_engine_public *,
unsigned dyn_table_size, unsigned max_risked_streams);
void
lsquic_qdh_cleanup (struct qpack_dec_hdl *);
#define lsquic_qdh_has_enc_stream(qdh) ((qdh)->qdh_enc_sm_in != NULL)
enum header_in_status
{
HIS_DONE,
HIS_NEED,
HIS_BLOCKED,
HIS_ERROR,
};
enum lsqpack_read_header_status
lsquic_qdh_header_in_begin (struct qpack_dec_hdl *, struct lsquic_stream *,
uint64_t size, const unsigned char **, size_t);
enum lsqpack_read_header_status
lsquic_qdh_header_in_continue (struct qpack_dec_hdl *, struct lsquic_stream *,
const unsigned char **, size_t);
void
lsquic_qdh_cancel_stream (struct qpack_dec_hdl *,
struct lsquic_stream *);
void
lsquic_qdh_cancel_stream_id (struct qpack_dec_hdl *, lsquic_stream_id_t);
int
lsquic_qdh_arm_if_unsent (struct qpack_dec_hdl *, void (*)(void *), void *);
const char *
lsquic_qdh_get_ua (const struct qpack_dec_hdl *);
extern const struct lsquic_stream_if *const lsquic_qdh_enc_sm_in_if;
extern const struct lsquic_stream_if *const lsquic_qdh_dec_sm_out_if;
#endif