Line data Source code
1 1 : /*
2 : * Copyright (c) 2023, Emna Rekik
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief HTTP2 frame information.
10 : */
11 :
12 : #ifndef ZEPHYR_INCLUDE_NET_HTTP_SERVER_FRAME_H_
13 : #define ZEPHYR_INCLUDE_NET_HTTP_SERVER_FRAME_H_
14 :
15 : #include <stdint.h>
16 :
17 : #ifdef __cplusplus
18 : extern "C" {
19 : #endif
20 :
21 : /** HTTP2 frame types */
22 1 : enum http2_frame_type {
23 : /** Data frame */
24 : HTTP2_DATA_FRAME = 0x00,
25 : /** Headers frame */
26 : HTTP2_HEADERS_FRAME = 0x01,
27 : /** Priority frame */
28 : HTTP2_PRIORITY_FRAME = 0x02,
29 : /** Reset stream frame */
30 : HTTP2_RST_STREAM_FRAME = 0x03,
31 : /** Settings frame */
32 : HTTP2_SETTINGS_FRAME = 0x04,
33 : /** Push promise frame */
34 : HTTP2_PUSH_PROMISE_FRAME = 0x05,
35 : /** Ping frame */
36 : HTTP2_PING_FRAME = 0x06,
37 : /** Goaway frame */
38 : HTTP2_GOAWAY_FRAME = 0x07,
39 : /** Window update frame */
40 : HTTP2_WINDOW_UPDATE_FRAME = 0x08,
41 : /** Continuation frame */
42 : HTTP2_CONTINUATION_FRAME = 0x09
43 : };
44 :
45 : /** @cond INTERNAL_HIDDEN */
46 :
47 : #define HTTP2_FLAG_SETTINGS_ACK 0x01
48 : #define HTTP2_FLAG_END_HEADERS 0x04
49 : #define HTTP2_FLAG_END_STREAM 0x01
50 : #define HTTP2_FLAG_PADDED 0x08
51 : #define HTTP2_FLAG_PRIORITY 0x20
52 :
53 : #define HTTP2_FRAME_HEADER_SIZE 9
54 : #define HTTP2_FRAME_LENGTH_OFFSET 0
55 : #define HTTP2_FRAME_TYPE_OFFSET 3
56 : #define HTTP2_FRAME_FLAGS_OFFSET 4
57 : #define HTTP2_FRAME_STREAM_ID_OFFSET 5
58 : #define HTTP2_FRAME_STREAM_ID_MASK 0x7FFFFFFF
59 :
60 : #define HTTP2_HEADERS_FRAME_PRIORITY_LEN 5
61 : #define HTTP2_PRIORITY_FRAME_LEN 5
62 : #define HTTP2_RST_STREAM_FRAME_LEN 4
63 :
64 : /** @endcond */
65 :
66 : /** HTTP2 settings field */
67 1 : struct http2_settings_field {
68 1 : uint16_t id; /**< Field id */
69 1 : uint32_t value; /**< Field value */
70 : } __packed;
71 :
72 : /** @brief HTTP2 settings */
73 1 : enum http2_settings {
74 : /** Header table size */
75 : HTTP2_SETTINGS_HEADER_TABLE_SIZE = 1,
76 : /** Enable push */
77 : HTTP2_SETTINGS_ENABLE_PUSH = 2,
78 : /** Maximum number of concurrent streams */
79 : HTTP2_SETTINGS_MAX_CONCURRENT_STREAMS = 3,
80 : /** Initial window size */
81 : HTTP2_SETTINGS_INITIAL_WINDOW_SIZE = 4,
82 : /** Max frame size */
83 : HTTP2_SETTINGS_MAX_FRAME_SIZE = 5,
84 : /** Max header list size */
85 : HTTP2_SETTINGS_MAX_HEADER_LIST_SIZE = 6,
86 : };
87 :
88 : #ifdef __cplusplus
89 : }
90 : #endif
91 :
92 : #endif
|