Sese Framework  x.y.z
A cross-platform framework
载入中...
搜索中...
未找到
sese::net::http::HPackUtil类 参考final

HPACK 解压缩工具类 更多...

#include <HPackUtil.h>

类 sese::net::http::HPackUtil 继承关系图:
sese::NotInstantiable

Public 类型

using InputStream = io::InputStream
 工具指定输入流
 
using OutputStream = io::OutputStream
 工具指定输出流
 

Public 成员函数

 HPackUtil ()=delete
 
- Public 成员函数 继承自 sese::NotInstantiable
 NotInstantiable ()=delete
 
virtual ~NotInstantiable ()=default
 
 NotInstantiable (const NotInstantiable &)=delete
 
NotInstantiableoperator= (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 解压缩工具类

成员类型定义说明

◆ InputStream

◆ OutputStream

构造及析构函数说明

◆ HPackUtil()

sese::net::http::HPackUtil::HPackUtil ( )
delete

成员函数说明

◆ buildCookieString()

std::string HPackUtil::buildCookieString ( const Cookie::Ptr & cookie)
staticprivatenoexcept

◆ decode()

uint32_t HPackUtil::decode ( InputStream * src,
size_t content_length,
DynamicTable & table,
Header & header,
bool is_resp,
bool has_pseudo = true,
uint32_t limit = 8192 )
staticnoexcept

尝试从流中解析 HPACK 压缩后的 HEADERS

参数
src流来源
content_length需要解析的内容长度
table解析所用的动态表
header存放解析结果
is_resp指示当前是否为响应
has_pseudo需要验证最前面的伪字段
limit动态表大小限制
返回
解析成功返回0,否则返回错误码

对应第 0 种情况

对应第 1 种情况

对应第 2 种和第 3 种情况

引用了 sese::net::http::GOAWAY_COMPRESSION_ERROR, sese::net::http::GOAWAY_PROTOCOL_ERROR, sese::net::http::HttpUtil::parseFromCookie() , 以及 sese::strcmpDoNotCase().

◆ decodeInteger()

int HPackUtil::decodeInteger ( uint8_t & buf,
InputStream * src,
uint32_t & dest,
uint8_t n )
staticprivatenoexcept

◆ decodeString()

int HPackUtil::decodeString ( InputStream * src,
std::string & dest )
staticprivatenoexcept

◆ encode()

size_t HPackUtil::encode ( OutputStream * dest,
DynamicTable & table,
Header & once_header,
Header & indexed_header )
staticnoexcept

尝试将 HEADERS 按照 HPACK 格式压缩

参数
dest目的流
table压缩所用动态表
once_header非索引字段
indexed_header索引字段
返回
压缩产生的缓存大小

对应第 0 种情况

对应第 1 种情况

添加动态表

对应第 0 种情况

对应第 1 种情况

添加动态表

添加动态表

第 0 种情况

第 2 种情况

第 0 种情况

第 2 种情况

此处未对 Cookies 进行压缩

引用了 sese::net::http::PREDEFINED_HEADERS.

◆ encodeIndexCase0()

size_t HPackUtil::encodeIndexCase0 ( OutputStream * dest,
size_t index )
staticprivatenoexcept

◆ encodeIndexCase1()

size_t HPackUtil::encodeIndexCase1 ( OutputStream * dest,
size_t index )
staticprivatenoexcept

◆ encodeIndexCase2()

size_t HPackUtil::encodeIndexCase2 ( OutputStream * dest,
size_t index )
staticprivatenoexcept

◆ encodeIndexCase3()

size_t HPackUtil::encodeIndexCase3 ( OutputStream * dest,
size_t index )
staticprivatenoexcept

◆ encodeString()

size_t HPackUtil::encodeString ( OutputStream * dest,
const std::string & str )
staticprivatenoexcept

需要 Huffman 压缩

不需要 Huffman 压缩

◆ setHeader()

bool HPackUtil::setHeader ( Header & header,
const std::string & key,
const std::string & value )
staticprivatenoexcept

检查伪字段是否重复并设置头部值

参见
sese::net::http::HttpConverter
参数
header目标头
key
value
返回
是否设置成功

◆ verifyHeader()

bool HPackUtil::verifyHeader ( Header & header,
bool is_resp )
staticprivatenoexcept

校验伪字段

参数
header头部
is_resp是否为响应
返回
校验结果

类成员变量说明

◆ decoder

HuffmanDecoder HPackUtil::decoder {}
staticprivate

◆ encoder

HuffmanEncoder HPackUtil::encoder {}
staticprivate

◆ REQ_PSEUDO_HEADER

const std::string HPackUtil::REQ_PSEUDO_HEADER {":method", ":scheme", ":authority", ":path"}
staticprivate

该类的文档由以下文件生成: