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