17#ifndef PROTOCORE_H2_FRAME_H
18#define PROTOCORE_H2_FRAME_H
22#if PROTOCORE_ENABLE_HTTP2
27#define H2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
28#define H2_PREFACE_LEN 24
29#define H2_FRAME_HEADER_LEN 9
36#define H2_PRIORITY 0x2
37#define H2_RST_STREAM 0x3
38#define H2_SETTINGS 0x4
39#define H2_PUSH_PROMISE 0x5
42#define H2_WINDOW_UPDATE 0x8
43#define H2_CONTINUATION 0x9
46#define H2_FLAG_END_STREAM 0x01
47#define H2_FLAG_ACK 0x01
48#define H2_FLAG_END_HEADERS 0x04
49#define H2_FLAG_PADDED 0x08
50#define H2_FLAG_PRIORITY 0x20
53#define H2_SETTINGS_HEADER_TABLE_SIZE 0x1
54#define H2_SETTINGS_ENABLE_PUSH 0x2
55#define H2_SETTINGS_MAX_CONCURRENT_STREAMS 0x3
56#define H2_SETTINGS_INITIAL_WINDOW_SIZE 0x4
57#define H2_SETTINGS_MAX_FRAME_SIZE 0x5
58#define H2_SETTINGS_MAX_HEADER_LIST_SIZE 0x6
61#define H2_NO_ERROR 0x0
62#define H2_PROTOCOL_ERROR 0x1
63#define H2_INTERNAL_ERROR 0x2
64#define H2_FLOW_CONTROL_ERROR 0x3
65#define H2_SETTINGS_TIMEOUT 0x4
66#define H2_STREAM_CLOSED 0x5
67#define H2_FRAME_SIZE_ERROR 0x6
68#define H2_REFUSED_STREAM 0x7
70#define H2_COMPRESSION_ERROR 0x9
71#define H2_CONNECT_ERROR 0xa
72#define H2_ENHANCE_YOUR_CALM 0xb
73#define H2_INADEQUATE_SECURITY 0xc
74#define H2_HTTP_1_1_REQUIRED 0xd
88 uint32_t header_table_size;
90 uint32_t max_concurrent_streams;
91 uint32_t initial_window_size;
92 uint32_t max_frame_size;
93 uint32_t max_header_list_size;
117 const uint8_t *payload;
120} H2FrameSettingsArgs;
128 const uint32_t *vals;
130} H2FrameBuildSettingsArgs;
162 uint32_t last_stream_id;
171 const uint8_t *opaque;
180 const uint8_t *block;
234 H2FrameParseArgs parse_args;
235 H2FrameWriteArgs write_args;
236 H2FrameSettingsArgs settings_args;
237 H2FrameBuildSettingsArgs build_settings_args;
238 H2FrameAckArgs ack_args;
239 H2FrameWindowArgs window_args;
240 H2FrameRstArgs rst_args;
241 H2FrameGoawayArgs goaway_args;
242 H2FramePingArgs ping_args;
243 H2FrameHeadersArgs headers_args;
244 H2FrameDataArgs data_args;
247 H2FrameHeader header;
251extern H2FrameVars H2FrameV;
256 void (*
const parse_header)(uint8_t *work);
257 void (*
const write_header)(uint8_t *work);
258 void (*
const settings_defaults)(uint8_t *work);
259 void (*
const parse_settings)(uint8_t *work);
260 void (*
const build_settings)(uint8_t *work);
261 void (*
const build_settings_ack)(uint8_t *work);
262 void (*
const build_window_update)(uint8_t *work);
263 void (*
const build_rst_stream)(uint8_t *work);
264 void (*
const build_goaway)(uint8_t *work);
265 void (*
const build_ping_ack)(uint8_t *work);
266 void (*
const build_headers)(uint8_t *work);
267 void (*
const build_data)(uint8_t *work);
272void protocore_h2_frame_parse_header(uint8_t *work);
273void protocore_h2_frame_write_header(uint8_t *work);
274void protocore_h2_frame_settings_defaults(uint8_t *work);
275void protocore_h2_frame_parse_settings(uint8_t *work);
276void protocore_h2_frame_build_settings(uint8_t *work);
277void protocore_h2_frame_build_settings_ack(uint8_t *work);
278void protocore_h2_frame_build_window_update(uint8_t *work);
279void protocore_h2_frame_build_rst_stream(uint8_t *work);
280void protocore_h2_frame_build_goaway(uint8_t *work);
281void protocore_h2_frame_build_ping_ack(uint8_t *work);
282void protocore_h2_frame_build_headers(uint8_t *work);
283void protocore_h2_frame_build_data(uint8_t *work);
289static const H2FrameNs H2Frame __attribute__((unused)) = {
290 .parse_header = protocore_h2_frame_parse_header,
291 .write_header = protocore_h2_frame_write_header,
292 .settings_defaults = protocore_h2_frame_settings_defaults,
293 .parse_settings = protocore_h2_frame_parse_settings,
294 .build_settings = protocore_h2_frame_build_settings,
295 .build_settings_ack = protocore_h2_frame_build_settings_ack,
296 .build_window_update = protocore_h2_frame_build_window_update,
297 .build_rst_stream = protocore_h2_frame_build_rst_stream,
298 .build_goaway = protocore_h2_frame_build_goaway,
299 .build_ping_ack = protocore_h2_frame_build_ping_ack,
300 .build_headers = protocore_h2_frame_build_headers,
301 .build_data = protocore_h2_frame_build_data,
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS