104 lines
3.0 KiB
C
104 lines
3.0 KiB
C
/* Copyright (c) 2017 - 2021 LiteSpeed Technologies Inc. See LICENSE. */
|
|
/*
|
|
* lsquic_hq.h -- HTTP/3 (originally "HTTP over QUIC" or HQ) types
|
|
*/
|
|
|
|
#ifndef LSQUIC_HQ_H
|
|
#define LSQUIC_HQ_H 1
|
|
|
|
struct lsquic_ext_http_prio;
|
|
|
|
/* [draft-ietf-quic-http-27] Section 11.2.1 */
|
|
enum hq_frame_type
|
|
{
|
|
HQFT_DATA = 0,
|
|
HQFT_HEADERS = 1,
|
|
HQFT_CANCEL_PUSH = 3,
|
|
HQFT_SETTINGS = 4,
|
|
HQFT_PUSH_PROMISE = 5,
|
|
HQFT_GOAWAY = 7,
|
|
HQFT_MAX_PUSH_ID = 0xD,
|
|
/* These made me expand shf_frame_type to 4 bytes from 1. If at some
|
|
* point we have to support a frame that is wider than 4 byte, it will
|
|
* be time to bite the bullet and use our own enum for these types
|
|
* (just like we do for transport parameters). A simpler alternative
|
|
* would be to drop the enum and use #define's, but it would stink...
|
|
*/
|
|
HQFT_PRIORITY_UPDATE_STREAM= 0xF0700,
|
|
HQFT_PRIORITY_UPDATE_PUSH = 0xF0701,
|
|
/* This frame is made up and its type is never written to stream.
|
|
* Nevertheless, just to be on the safe side, give it a value as
|
|
* described in [draft-ietf-quic-http-20] Section 4.2.10.
|
|
*/
|
|
HQFT_PUSH_PREAMBLE = 0x1F * 3 + 0x21,
|
|
};
|
|
|
|
|
|
enum hq_setting_id
|
|
{
|
|
HQSID_QPACK_MAX_TABLE_CAPACITY = 1,
|
|
HQSID_MAX_HEADER_LIST_SIZE = 6,
|
|
HQSID_QPACK_BLOCKED_STREAMS = 7,
|
|
};
|
|
|
|
/* As of 12/18/2018: */
|
|
#define HQ_DF_QPACK_MAX_TABLE_CAPACITY 0
|
|
#define HQ_DF_MAX_HEADER_LIST_SIZE 0
|
|
#define HQ_DF_QPACK_BLOCKED_STREAMS 0
|
|
|
|
|
|
/* [draft-ietf-quic-http-19] Section 10.6,
|
|
* [draft-ietf-quic-qpack-07] Section 8.2
|
|
*/
|
|
enum hq_uni_stream_type
|
|
{
|
|
HQUST_CONTROL = 0,
|
|
HQUST_PUSH = 1,
|
|
HQUST_QPACK_ENC = 2,
|
|
HQUST_QPACK_DEC = 3,
|
|
};
|
|
|
|
|
|
/* [draft-ietf-quic-http-23] Section 8.1 and
|
|
* [draft-ietf-quic-qpack-08], Section 8.3
|
|
*/
|
|
enum http_error_code
|
|
{
|
|
HEC_NO_ERROR = 0x100,
|
|
HEC_GENERAL_PROTOCOL_ERROR = 0x101,
|
|
HEC_INTERNAL_ERROR = 0x102,
|
|
HEC_STREAM_CREATION_ERROR = 0x103,
|
|
HEC_CLOSED_CRITICAL_STREAM = 0x104,
|
|
HEC_FRAME_UNEXPECTED = 0x105,
|
|
HEC_FRAME_ERROR = 0x106,
|
|
HEC_EXCESSIVE_LOAD = 0x107,
|
|
HEC_ID_ERROR = 0x108,
|
|
HEC_SETTINGS_ERROR = 0x109,
|
|
HEC_MISSING_SETTINGS = 0x10A,
|
|
HEC_REQUEST_REJECTED = 0x10B,
|
|
HEC_REQUEST_CANCELLED = 0x10C,
|
|
HEC_REQUEST_INCOMPLETE = 0x10D,
|
|
HEC_MESSAGE_ERROR = 0x10E,
|
|
HEC_CONNECT_ERROR = 0x10F,
|
|
HEC_VERSION_FALLBACK = 0x110,
|
|
HEC_QPACK_DECOMPRESSION_FAILED = 0x200,
|
|
HEC_QPACK_ENCODER_STREAM_ERROR = 0x201,
|
|
HEC_QPACK_DECODER_STREAM_ERROR = 0x202,
|
|
};
|
|
|
|
|
|
enum ppc_flags
|
|
{
|
|
PPC_URG_NAME = 1 << 0,
|
|
PPC_INC_NAME = 1 << 1,
|
|
PPC_URG_SET = 1 << 2, /* 'urgency' is set */
|
|
PPC_INC_SET = 1 << 3, /* 'incremental' is set */
|
|
};
|
|
|
|
|
|
int
|
|
lsquic_http_parse_pfv (const char *, size_t, enum ppc_flags * /* optional */,
|
|
struct lsquic_ext_http_prio *, char *str, size_t);
|
|
|
|
#endif
|