1#ifndef NEFORCE_NETWORK_HTTP_HTTP2_CONNECTION_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP2_CONNECTION_HPP__
24NEFORCE_BEGIN_NAMESPACE__
49 const byte_t*
data,
size_t data_len,
bool end_stream)>;
66 bool preface_received_ =
false;
76 uint32_t local_stream_window_ = 65535;
78 stream_handler stream_handler_;
79 close_handler close_handler_;
82 struct pending_stream {
86 bool end_stream =
false;
87 bool waiting_continuation =
false;
93 size_t data_len,
bool end_stream);
102 void handle_continuation_frame(
uint8_t flags,
uint32_t stream_id,
const byte_t* payload,
size_t len);
103 void handle_priority_frame(
uint32_t stream_id,
const byte_t* payload,
size_t len);
104 void handle_push_promise_frame(
uint32_t stream_id,
const byte_t* payload,
size_t len);
105 void handle_settings_frame(
uint8_t flags,
const byte_t* payload,
size_t len);
106 void handle_ping_frame(
uint8_t flags,
const byte_t* payload,
size_t len);
107 void handle_goaway_frame(
const byte_t* payload,
size_t len);
108 void handle_rst_stream_frame(
uint32_t stream_id,
const byte_t* payload);
109 void handle_window_update_frame(
uint32_t stream_id,
const byte_t* payload);
120 http2_connection(
const http2_connection&) =
delete;
121 http2_connection& operator=(
const http2_connection&) =
delete;
138 bool end_stream =
true);
169 size_t data_len,
bool end_stream);
199 bool is_closed() const noexcept {
return closed_; }
200 uint32_t last_stream_id() const noexcept {
return last_stream_id_; }
208NEFORCE_END_NAMESPACE__
const http2_settings & remote_settings() const noexcept
获取远程设置
http2_settings & local_settings() noexcept
获取本地设置
void set_router(http_router *router)
设置路由器(启用自动请求分发)
void send_rst_stream(uint32_t stream_id, http2_error error)
发送 RST_STREAM
void send_response(uint32_t stream_id, const vector< hpack_header_field > &headers, const string &body={}, bool end_stream=true)
发送 HTTP 响应(HEADERS + DATA)
void set_stream_handler(stream_handler handler)
设置流处理器(收到完整请求时回调)
void handle_upgrade_request(uint32_t stream_id, const vector< hpack_header_field > &headers, const byte_t *data, size_t data_len, bool end_stream)
h2c 升级请求注入(RFC 7540 §3.2)
void send_push_promise(uint32_t stream_id, uint32_t promised_stream_id, const vector< hpack_header_field > &request_headers)
发送 PUSH_PROMISE(Server Push)
void set_close_handler(close_handler handler)
设置关闭回调
void send_goaway(http2_error error=http2_error::NO_ERROR)
发送 GOAWAY 并关闭连接
vector< byte_t > byte_vector
字节向量类型别名
unsigned char byte_t
字节类型,定义为无符号字符
unsigned int uint32_t
32位无符号整数类型
unsigned char uint8_t
8位无符号整数类型
http2_frame_type
HTTP/2 帧类型(RFC 7540 §6)
http2_error
HTTP/2 错误码(RFC 7540 §7)
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
HTTP/2 协议帧、HPACK 编解码器与流控制
enable_shared_from_this() noexcept=default