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

Base class for HTTP/2 frames. More...

#include <frame.h>

Inheritance diagram for kcenon::network::protocols::http2::frame:
Inheritance graph
Collaboration diagram for kcenon::network::protocols::http2::frame:
Collaboration graph

Public Member Functions

 frame ()=default
 Default constructor.
 
 frame (const frame_header &hdr, std::vector< uint8_t > payload)
 Construct frame with header and payload.
 
auto serialize () const -> std::vector< uint8_t >
 Serialize frame to bytes.
 
auto header () const -> const frame_header &
 Get frame header.
 
auto payload () const -> std::span< const uint8_t >
 Get frame payload.
 
virtual ~frame ()=default
 Virtual destructor.
 

Static Public Member Functions

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

Protected Attributes

frame_header header_
 Frame header.
 
std::vector< uint8_t > payload_
 Frame payload.
 

Detailed Description

Base class for HTTP/2 frames.

Represents a generic HTTP/2 frame with header and payload. Specific frame types inherit from this base class.

Definition at line 81 of file frame.h.

Constructor & Destructor Documentation

◆ frame() [1/2]

kcenon::network::protocols::http2::frame::frame ( )
default

Default constructor.

◆ frame() [2/2]

kcenon::network::protocols::http2::frame::frame ( const frame_header & hdr,
std::vector< uint8_t > payload )

Construct frame with header and payload.

Parameters
hdrFrame header
payloadFrame payload data

Definition at line 89 of file frame.cpp.

90 : header_(hdr), payload_(std::move(payload))
91 {
92 }
std::vector< uint8_t > payload_
Frame payload.
Definition frame.h:128
frame_header header_
Frame header.
Definition frame.h:127
auto payload() const -> std::span< const uint8_t >
Get frame payload.
Definition frame.cpp:185

◆ ~frame()

virtual kcenon::network::protocols::http2::frame::~frame ( )
virtualdefault

Virtual destructor.

Member Function Documentation

◆ header()

auto kcenon::network::protocols::http2::frame::header ( ) const -> const frame_header&

Get frame header.

Returns
Const reference to frame header

Definition at line 180 of file frame.cpp.

181 {
182 return header_;
183 }

References header_.

◆ parse()

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

Parse frame from raw bytes.

Parameters
dataRaw byte data (header + payload)
Returns
Result containing parsed frame or error

Definition at line 94 of file frame.cpp.

95 {
96 auto header_result = frame_header::parse(data);
97 if (header_result.is_err())
98 {
99 return header_result.error();
100 }
101
102 const auto& header = header_result.value();
103
104 if (data.size() < frame_header_size + header.length)
105 {
106 return error_info(3, "Insufficient data for frame payload", "http2");
107 }
108
109 auto payload_span = data.subspan(frame_header_size, header.length);
110 std::vector<uint8_t> payload(payload_span.begin(), payload_span.end());
111
112 std::unique_ptr<frame> result_frame;
113
114 switch (header.type)
115 {
116 case frame_type::data:
117 {
118 auto parsed = data_frame::parse(header, payload);
119 if (parsed.is_err()) return parsed.error();
120 result_frame = std::move(parsed.value());
121 break;
122 }
124 {
125 auto parsed = headers_frame::parse(header, payload);
126 if (parsed.is_err()) return parsed.error();
127 result_frame = std::move(parsed.value());
128 break;
129 }
131 {
132 auto parsed = settings_frame::parse(header, payload);
133 if (parsed.is_err()) return parsed.error();
134 result_frame = std::move(parsed.value());
135 break;
136 }
138 {
139 auto parsed = rst_stream_frame::parse(header, payload);
140 if (parsed.is_err()) return parsed.error();
141 result_frame = std::move(parsed.value());
142 break;
143 }
144 case frame_type::ping:
145 {
146 auto parsed = ping_frame::parse(header, payload);
147 if (parsed.is_err()) return parsed.error();
148 result_frame = std::move(parsed.value());
149 break;
150 }
152 {
153 auto parsed = goaway_frame::parse(header, payload);
154 if (parsed.is_err()) return parsed.error();
155 result_frame = std::move(parsed.value());
156 break;
157 }
159 {
161 if (parsed.is_err()) return parsed.error();
162 result_frame = std::move(parsed.value());
163 break;
164 }
165 default:
166 result_frame = std::make_unique<frame>(header, std::move(payload));
167 break;
168 }
169
170 return std::move(result_frame);
171 }
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< data_frame > >
Parse DATA frame from raw bytes.
Definition frame.cpp:213
auto header() const -> const frame_header &
Get frame header.
Definition frame.cpp:180
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< goaway_frame > >
Parse GOAWAY frame from raw bytes.
Definition frame.cpp:516
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< headers_frame > >
Parse HEADERS frame from raw bytes.
Definition frame.cpp:294
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< ping_frame > >
Parse PING frame from raw bytes.
Definition frame.cpp:466
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< rst_stream_frame > >
Parse RST_STREAM frame from raw bytes.
Definition frame.cpp:433
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< settings_frame > >
Parse SETTINGS frame from raw bytes.
Definition frame.cpp:375
static auto parse(const frame_header &hdr, std::span< const uint8_t > payload) -> Result< std::unique_ptr< window_update_frame > >
Parse WINDOW_UPDATE frame from raw bytes.
Definition frame.cpp:570
simple_error error_info
static auto parse(std::span< const uint8_t > data) -> Result< frame_header >
Parse frame header from raw bytes.
Definition frame.cpp:52

References kcenon::network::protocols::http2::data, kcenon::network::protocols::http2::goaway, kcenon::network::protocols::http2::headers, kcenon::network::protocols::http2::data_frame::parse(), kcenon::network::protocols::http2::frame_header::parse(), kcenon::network::protocols::http2::goaway_frame::parse(), kcenon::network::protocols::http2::headers_frame::parse(), kcenon::network::protocols::http2::ping_frame::parse(), kcenon::network::protocols::http2::rst_stream_frame::parse(), kcenon::network::protocols::http2::settings_frame::parse(), kcenon::network::protocols::http2::window_update_frame::parse(), kcenon::network::protocols::http2::ping, kcenon::network::protocols::http2::rst_stream, kcenon::network::protocols::http2::settings, and kcenon::network::protocols::http2::window_update.

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ payload()

auto kcenon::network::protocols::http2::frame::payload ( ) const -> std::span<const uint8_t>

Get frame payload.

Returns
Span of payload bytes

Definition at line 185 of file frame.cpp.

186 {
187 return payload_;
188 }

References payload_.

◆ serialize()

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

Serialize frame to bytes.

Returns
Byte vector containing serialized frame (header + payload)

Definition at line 173 of file frame.cpp.

174 {
175 auto result = header_.serialize();
176 result.insert(result.end(), payload_.begin(), payload_.end());
177 return result;
178 }
auto serialize() const -> std::vector< uint8_t >
Serialize frame header to bytes.
Definition frame.cpp:73

References header_, payload_, and kcenon::network::protocols::http2::frame_header::serialize().

Here is the call graph for this function:

Member Data Documentation

◆ header_

◆ payload_


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