Skip to content

http.enc

HTTP 压缩面(P4-B):gzip/deflate 封装 + Accept-Encoding 协商 形态(与 http/parse.ct 头注同源): ① 零 use 纯模块(不 import std.net/http.parse —— 加载器菱形 use 误报 E5020 规避 + 消费方双 use 即菱形;同 message.ct ②);唯一次级 use = 本目录 binddeflate.ct(extern 白名单表,tls.ct→tls/bind 同款 子模块形;同包加载器不判环,tests/http corpus 双模块实证)。 ② 分工(登记,任务书 DECISION 面):C 垫片 ctron_deflate.c 只出三件无状态 原语 —— raw deflate 压缩 / raw inflate(出参 cap 必填 = 炸弹护栏)/ CRC-32(miniz mz_crc32)。gzip 容器组框(RFC 1952:10 字节头 + FLG 遍历 + crc32/isize 尾)在本文件纯 Ctron —— 组框逻辑纯层可测;crc32 取垫片 (miniz 16 项 nibble 表)而非纯层重写:单实现防漂移(任务书两案取 「垫片组框」的折中:组框逻辑仍在纯层,唯 crc32 一原语复用 miniz)。 deflate 无容器(raw);zlib 容器(RFC 1950)本波不实现 —— RFC 9110 §8.4.1.2 "deflate" 名义的 zlib/raw 歧义,本实现取 raw 口径(nginx 等 常见服务端行为),消费端兼容面注记登记。 ③ 缓冲口径:&I64[] 字节道零拷贝进出(parse.ct 同款);输出道 cap 由调用方 给定,解压面 cap 即炸弹护栏(RFC 9110 §8.4.1 安全注:解压输出必须设 上限;本 API 无无上限解压面)。rc:>0 = 字节数;<0 = 失败码(-1 参数/ -2 容量护栏/-3 损坏/-4 crc 不符/-5 isize 不符);0 不可达。 ④ 发射面纪律:无闭包、无方法调用、无 if/match 表达式(语句形),while 体 仅标量局部((f)/(g));Option 消费用 match 形助手(C13a)。 ⑤ level 语义(zlib 档,登记):0 = 存储块(zlib 语义);1..9 = 探针档递进 (miniz s_tdefl_num_probes);缺省档常量 = 6(库默认面)。越域 rc -1。 ⑥ 协商面(纯 Str,无 lane):规则登记见 negotiate 头注。

pub fn

Signature Returns Description
enc_level_default() I64 ---- level 缺省档(库默认;zlib 常规取 6)----
deflate_compress(in: &[I64], in_n: I64, out: &[I64], cap: I64, level: I64) I64 压缩:in[0..in_n) → out[0..cap),返回写出字节数。level 见头注⑤。
deflate_decompress(in: &[I64], in_n: I64, out: &[I64], cap: I64) I64 解压(护栏必填):in[0..in_n) → out[0..cap),返回解压字节数。
-2 = 输出超护栏(炸弹面;夹具断言此码),-3 = 数据损坏。
crc32_update(crc: I64, in: &[I64], off: I64, n: I64) I64 续算:crc 传上次返回值(首调 0),对 in[off..off+n) 求新值。
crc32(in: &[I64], n: I64) I64 整段便捷形。
gzip_compress(in: &[I64], in_n: I64, out: &[I64], cap: I64, level: I64) I64 gzip 成员压缩:输出 = 10 字节头 + raw deflate + crc32/isize 尾。
头定值:FLG=0(无 FEXTRA/FNAME/FCOMMENT/FHCRC)、MTIME=0(无时间戳——输出
字节级可复现,登记)、XFL=0(档位不做 XFL 影射,登记)、OS=255(unknown,
RFC 9529 §9.1.5)。返回总字节数;容量不足 -2(先验下限 18 字节)。
gzip_decompress(in: &[I64], in_n: I64, out: &[I64], cap: I64) I64 gzip 成员解压:遍历头(RFC 1952 §2.3:FEXTRA/FNAME/FCOMMENT/FHCRC 逐项跳,
FLG 保留位 5..7 置位即拒)→ raw inflate(护栏 = cap)→ 校验尾 CRC32/ISIZE。
返回解压字节数;-1 参数/短流;-2 护栏不足(炸弹面);-3 损坏(魔数/CM/FLG/
deflate);-4 CRC32 不符;-5 ISIZE 不符。
注:FHCRC(头 CRC16)不校验(跳过;登记 —— 尾 CRC32 恒校验,流完整性由之
承担;需要头校验的后继任务补)。
注:单成员口径 —— 拼接成员(RFC 1952 §2.2 多成员串)不级联解,尾校验不符
-4 拒(实证;级联面后继任务按需补)。
content_coding_identity_ok(accept_enc: Str) Bool identity 是否仍可接受(RFC 9110 §12.5.3 规则 2:未编码表示默认可接受,
除非被显式 identity;q=0,或被 *;q=0 且无更具体 identity 条目排除)。
content_coding_negotiate(accept_enc: Str, have: Str) Str 协商主入口:返回应施加的 coding(have 中的原形 token);"" = identity
(胜出或回退;identity 被拒时调用方以 content_coding_identity_ok
区分)。q 最高者胜,并列取 have 序;q ≤ 0 不可接受。