Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
kcenon::network::protocols::http2::frame_header Struct Reference

HTTP/2 frame header (9 bytes) More...

#include <frame.h>

Collaboration diagram for kcenon::network::protocols::http2::frame_header:
Collaboration graph

Public Member Functions

auto serialize () const -> std::vector< uint8_t >
 Serialize frame header to bytes.
 

Static Public Member Functions

static auto parse (std::span< const uint8_t > data) -> Result< frame_header >
 Parse frame header from raw bytes.
 

Public Attributes

uint32_t length
 Payload length (24 bits)
 
frame_type type
 Frame type.
 
uint8_t flags
 Frame flags.
 
uint32_t stream_id
 Stream identifier (31 bits, MSB reserved)
 

Detailed Description

HTTP/2 frame header (9 bytes)

Definition at line 53 of file frame.h.

Member Function Documentation

◆ parse()

auto kcenon::network::protocols::http2::frame_header::parse ( std::span< const uint8_t > data) -> Result<frame_header>
static

Parse frame header from raw bytes.

Parameters
dataRaw byte data (at least 9 bytes)
Returns
Result containing parsed header or error

Definition at line 52 of file frame.cpp.

53 {
54 if (data.size() < frame_header_size)
55 {
56 return error_info(1, "Insufficient data for frame header", "http2");
57 }
58
59 frame_header header;
60 header.length = read_uint24_be(data.subspan(0, 3));
61 header.type = static_cast<frame_type>(data[3]);
62 header.flags = data[4];
63 header.stream_id = read_uint32_be(data.subspan(5, 4)) & stream_id_mask;
64
65 if (header.length > max_frame_size)
66 {
67 return error_info(2, "Frame size exceeds maximum allowed", "http2");
68 }
69
70 return header;
71 }
frame_type
HTTP/2 frame types (RFC 7540 Section 6)
Definition frame.h:22
simple_error error_info

References kcenon::network::protocols::http2::data, flags, length, kcenon::network::protocols::http2::max_frame_size, stream_id, and type.

Referenced by kcenon::network::protocols::http2::frame::parse(), kcenon::network::protocols::http2::http2_client::read_frame(), and kcenon::network::protocols::http2::http2_server_connection::read_frame_header().

Here is the caller graph for this function:

◆ serialize()

auto kcenon::network::protocols::http2::frame_header::serialize ( ) const -> std::vector<uint8_t>

Serialize frame header to bytes.

Returns
9-byte vector containing serialized header

Definition at line 73 of file frame.cpp.

74 {
75 std::vector<uint8_t> result(frame_header_size);
76
77 auto length_bytes = write_uint24_be(length);
78 std::copy(length_bytes.begin(), length_bytes.end(), result.begin());
79
80 result[3] = static_cast<uint8_t>(type);
81 result[4] = flags;
82
83 auto stream_id_bytes = write_uint32_be(stream_id & stream_id_mask);
84 std::copy(stream_id_bytes.begin(), stream_id_bytes.end(), result.begin() + 5);
85
86 return result;
87 }
uint32_t stream_id
Stream identifier (31 bits, MSB reserved)
Definition frame.h:58
uint32_t length
Payload length (24 bits)
Definition frame.h:55

References flags, length, stream_id, and type.

Referenced by kcenon::network::protocols::http2::frame::serialize().

Here is the caller graph for this function:

Member Data Documentation

◆ flags

◆ length

◆ stream_id

◆ type


The documentation for this struct was generated from the following files: