73 lines
2.4 KiB
C
73 lines
2.4 KiB
C
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
|
|
/*
|
|
* lsquic_hcsi_reader.h -- HTTP Control Stream Incoming (HCSI) reader
|
|
*/
|
|
|
|
#ifndef LSQUIC_HCSI_READER_H
|
|
#define LSQUIC_HCSI_READER_H 1
|
|
|
|
struct lsquic_conn;
|
|
|
|
|
|
struct hcsi_callbacks
|
|
{
|
|
void (*on_cancel_push)(void *ctx, uint64_t push_id);
|
|
void (*on_max_push_id)(void *ctx, uint64_t push_id);
|
|
/* Gets called at the *end* of the SETTING frame */
|
|
void (*on_settings_frame)(void *ctx);
|
|
void (*on_setting)(void *ctx, uint64_t setting_id, uint64_t value);
|
|
void (*on_goaway)(void *ctx, uint64_t stream_id);
|
|
void (*on_frame_error)(void *ctx, unsigned code, uint64_t frame_type);
|
|
void (*on_priority_update)(void *ctx, enum hq_frame_type, uint64_t id,
|
|
const char *, size_t);
|
|
};
|
|
|
|
|
|
struct hcsi_reader
|
|
{
|
|
enum {
|
|
HR_READ_FRAME_BEGIN,
|
|
HR_READ_FRAME_CONTINUE,
|
|
HR_SKIPPING,
|
|
HR_READ_SETTING_BEGIN,
|
|
HR_READ_SETTING_CONTINUE,
|
|
HR_READ_PRIORITY_UPDATE,
|
|
HR_READ_VARINT,
|
|
HR_READ_VARINT_CONTINUE,
|
|
HR_ERROR,
|
|
} hr_state:8;
|
|
enum {
|
|
HR_FLAG_RCVD_SETTING = 1,
|
|
} hr_flag:8;
|
|
unsigned hr_nread; /* Used for PRIORITY_UPDATE and SETTINGS frames */
|
|
struct lsquic_conn *hr_conn;
|
|
uint64_t hr_frame_type;
|
|
uint64_t hr_frame_length;
|
|
union
|
|
{
|
|
struct varint_read_state vint_state;
|
|
struct varint_read2_state vint2_state;
|
|
struct {
|
|
/* We just need the offset to rest of prio_state to read Priority
|
|
* Field Value.
|
|
*/
|
|
struct varint_read_state UNUSED;
|
|
char buf[
|
|
sizeof(struct varint_read2_state)
|
|
- sizeof(struct varint_read_state)];
|
|
} prio_state;
|
|
} hr_u;
|
|
const struct hcsi_callbacks *hr_cb;
|
|
void *hr_ctx;
|
|
};
|
|
|
|
|
|
void
|
|
lsquic_hcsi_reader_init (struct hcsi_reader *, struct lsquic_conn *,
|
|
const struct hcsi_callbacks *, void *cb_ctx);
|
|
|
|
int
|
|
lsquic_hcsi_reader_feed (struct hcsi_reader *, const void *buf, size_t bufsz);
|
|
|
|
#endif
|