Sese Framework
x.y.z
A cross-platform framework
|
HPACK 解压缩工具类 更多...
#include <HPackUtil.h>
Public 类型 | |
using | InputStream = io::InputStream |
工具指定输入流 | |
using | OutputStream = io::OutputStream |
工具指定输出流 | |
Public 成员函数 | |
HPackUtil ()=delete | |
Public 成员函数 继承自 sese::NotInstantiable | |
NotInstantiable ()=delete | |
virtual | ~NotInstantiable ()=default |
NotInstantiable (const NotInstantiable &)=delete | |
NotInstantiable & | operator= (const NotInstantiable &)=delete |
静态 Public 成员函数 | |
static uint32_t | decode (InputStream *src, size_t content_length, DynamicTable &table, Header &header, bool is_resp, bool has_pseudo=true, uint32_t limit=8192) noexcept |
static size_t | encode (OutputStream *dest, DynamicTable &table, Header &once_header, Header &indexed_header) noexcept |
静态 Private 成员函数 | |
static int | decodeInteger (uint8_t &buf, InputStream *src, uint32_t &dest, uint8_t n) noexcept |
static int | decodeString (InputStream *src, std::string &dest) noexcept |
static size_t | encodeIndexCase0 (OutputStream *dest, size_t index) noexcept |
static size_t | encodeIndexCase1 (OutputStream *dest, size_t index) noexcept |
static size_t | encodeIndexCase2 (OutputStream *dest, size_t index) noexcept |
static size_t | encodeIndexCase3 (OutputStream *dest, size_t index) noexcept |
static size_t | encodeString (OutputStream *dest, const std::string &str) noexcept |
static std::string | buildCookieString (const Cookie::Ptr &cookie) noexcept |
static bool | setHeader (Header &header, const std::string &key, const std::string &value) noexcept |
static bool | verifyHeader (Header &header, bool is_resp) noexcept |
静态 Private 属性 | |
static const std::string | REQ_PSEUDO_HEADER [4] {":method", ":scheme", ":authority", ":path"} |
static HuffmanDecoder | decoder {} |
static HuffmanEncoder | encoder {} |
HPACK 解压缩工具类
工具指定输入流
工具指定输出流
|
delete |
|
staticprivatenoexcept |
|
staticnoexcept |
尝试从流中解析 HPACK 压缩后的 HEADERS
src | 流来源 |
content_length | 需要解析的内容长度 |
table | 解析所用的动态表 |
header | 存放解析结果 |
is_resp | 指示当前是否为响应 |
has_pseudo | 需要验证最前面的伪字段 |
limit | 动态表大小限制 |
对应第 0 种情况
对应第 1 种情况
对应第 2 种和第 3 种情况
引用了 sese::net::http::GOAWAY_COMPRESSION_ERROR, sese::net::http::GOAWAY_PROTOCOL_ERROR, sese::net::http::HttpUtil::parseFromCookie() , 以及 sese::strcmpDoNotCase().
|
staticprivatenoexcept |
|
staticprivatenoexcept |
|
staticnoexcept |
尝试将 HEADERS 按照 HPACK 格式压缩
dest | 目的流 |
table | 压缩所用动态表 |
once_header | 非索引字段 |
indexed_header | 索引字段 |
对应第 0 种情况
对应第 1 种情况
添加动态表
对应第 0 种情况
对应第 1 种情况
添加动态表
添加动态表
第 0 种情况
第 2 种情况
第 0 种情况
第 2 种情况
此处未对 Cookies 进行压缩
|
staticprivatenoexcept |
|
staticprivatenoexcept |
|
staticprivatenoexcept |
|
staticprivatenoexcept |
|
staticprivatenoexcept |
需要 Huffman 压缩
不需要 Huffman 压缩
|
staticprivatenoexcept |
|
staticprivatenoexcept |
校验伪字段
header | 头部 |
is_resp | 是否为响应 |
|
staticprivate |
|
staticprivate |
|
staticprivate |