Skip to content

About

为千千静听社区复刻版增加旧系统的 https 支持,主程序在 https://github.com/Sonic853/TTPlayer

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ttp_https.dll

独立 x86 HTTPS 请求库,支持 Windows XP SP3、Win7 到 Windows 11。 使用 Mbed TLS 4.2.0 + TF-PSA-Crypto 1.2.0,源码仍放在 mbedtlsmin 项目。 原 TLS DLL 和重建版新增的 portable_https 传输代码现已合并。

安装与回退

TTPlayerRebuild.exe
AddIn/
  ttp_https.dll

调用方按绝对路径加载组件,不搜索工作目录或 PATH 中的同名 DLL。

  • 重建歌词插件 ttp_lrcsh.dll 从自身目录加载 helper,要求 ABI 6。可供原版 TTPlayer.exe 与重建版使用,原版不需要更改 EXE/ttpcomm.dll。缺失、损坏或 ABI 不匹配明确报错;每个 Search 缓存 helper,先释放响应再卸载。
  • 重建播放器中的其它适配器从 EXE 的 AddIn 目录加载,保留各自旧 ABI 与 WinHTTP 回退约定。MusicBrainz 适配器按请求持有组件。
  • TLS/证书失败不会通过原生重试规避;IE 自动登录策略或无法处理的系统 PAC 结果可显式要求原生回退。歌词插件配置私有 CA 时拒绝这种回退。原生回退的能力受系统 TLS 限制。

替换运行中的 DLL 后请重启播放器。私有 CA 仅由调用方显式提供;本组件不会修改系统证书库。 音频插件扫描忽略这个文件,由 HTTPS 适配器单独管理。

独立构建

需要现代 MSVC、Windows SDK、CMake 3.24+(VS 2026 需 4.2+)、PowerShell、Python 3:

cmake -S . -B build -A Win32
cmake --build build --config Release --target ttp_https --parallel
cmake --install build --config Release --component Runtime --prefix out/ttp_https

输出 build/Release/AddIn/ttp_https.dll 和 build/Release/SHA256SUMS.txt。 Runtime 组件及发行 ZIP 均只包含 AddIn/ttp_https.dll 和 SHA256SUMS.txt。源码、说明、验证记录、许可证和原始 CA PEM 保留在本仓库。 目标系统无需安装 VC 运行库。

rebuild 仅复制已独立构建的 DLL:

cmake -S rebuild -B rebuild/build -A Win32 -DTTPLAYER_HTTPS_DLL=D:/Projects/Backup/TTPlayer/mbedtlsmin/build/Release/AddIn/ttp_https.dll
cmake --build rebuild/build --config Release --target ttplayer_rebuild --parallel

Actions 工作流只构建本仓库的 DLL,不构建播放器或 AAC 插件,不运行测试。播放器只接收预编译 DLL。

封装范围与体积

DLL 负责 HTTPS URL、DNS、套接字、系统代理解析、HTTP CONNECT、TLS、HTTP 响应解析、重定向、取消检查和响应内存管理。 播放器的在线歌词请求由重建 ttp_lrcsh.dll 统一处理。歌词协议参数、校验码、XML、目录及逐跳 Cookie 属于歌词插件;HTTPS 组件提供传输和 HTTP 交换,歌词显示与编辑仍属播放器。普通 HTTP 歌词请求使用插件的 WinINet 分支。

Release 使用 /O1 /Os /Gy /Gw、/GL /LTCG、/OPT:REF /OPT:ICF。 只编入 TLS 1.2/1.3 客户端、所需密码算法及 X.509;不编入 TLS 服务器、DTLS、PSK、0-RTT 或上游程序。 121 个 Mozilla 根证书转为 DER 内嵌,PSA 密钥存储按需增长。 2026-10-06 的本地 Release DLL 为 424,448 字节(414.5 KiB),包含完整 HTTPS 传输、HTTP/SOCKS 代理、流式下载和 ABI 4 结构化 HTTP 支持。 原 331 KiB 的 mbed_tls_min.dll 仅包含 TLS 层。

C ABI

公开头文件 include/ttp_https.h,唯一导出 ttp_https_get_api;支持 ABI 1~7,基础请求版本仍为 2,保留版本 1 的旧调用布局。 更新器还可查询版本 3,获得向后兼容的流式 download() 扩展;先核对 abi_version 与 size,再转换为 ttp_https_api_v3。请求指定最大字节数和写入回调,回调同步执行,可报告已接收字节数与总长度(未知长度为 0)。下载接口上限 256 MiB、期限 10 分钟,播放器更新包另限制为 64 MiB;不会改变歌词 get() 的 2 MiB 上限。 MusicBrainz 可查询版本 4,使用独立的 get_http()/release_http();增加 User-Agent、Accept、HTTP 状态与 Retry-After,ABI 1/2/3 的布局和行为保持不变。详见 ABI 4 与验证。 ABI 5 提供逐跳 exchange():状态、Location、多个 Set-Cookie 及显式 Cookie;ABI 6 补齐 UA/Accept/Referer、Content-Range 和正文读取策略,详见 ABI 6。原版播放器通过重建歌词插件使用 ABI 6,不需要知道 TLS 接口。 ABI 7 增加可取消的 HTTP/HTTPS 媒体流,支持增量读取、PAC 等待取消及长期广播;播放器的网络音频路径要求此版本。旧歌词/更新接口保持独立,详见 ABI 7。发布顺序为先发布 HTTPS 组件,再构建使用最新版组件的播放器。 底层 mtm_get_api 仅供 DLL 内部调用,不再导出。

  1. 请求结构清零,填写 size、HTTPS URL、代理信息和取消回调。
  2. 响应结构清零并填写 size。
  3. 在工作线程调用函数表的 get。
  4. 读取响应体、tt-title/tt-url 原始头、TLS 协议和验证信息。
  5. 无论成功或失败,都调用 release。响应内存由 DLL 分配和释放。

接口不跨边界传递 STL 对象、异常或 CRT 内存所有权。 不同请求可并发;重用响应前必须先释放,DLL 卸载前须完成全部调用及释放。 取消回调不能抛异常。播放器提供的回调会将异常转换为取消。

默认 TLS 1.2~1.3,必须校验证书链、有效期和主机名称。 私有 CA 参数仅用于调用方显式信任配置,播放器不设置它;没有关闭验证的选项。 随机数来自 XP CryptoAPI;TF-PSA-Crypto 1.2 的互斥锁/条件变量通过 Windows 和 YY-Thunks 适配。

响应体限 2 MiB,头部/分块元数据限 64 KiB。支持 Content-Length、chunked 和正常 TLS 关闭定界。 拒绝截断、歧义长度、HTTPS 降级及过多重定向。网络等待时检查取消和 65 秒期限;同步 DNS/PAC 还受系统超时约束。 自定义代理支持 Basic、Digest、NTLM、Negotiate 以及 SOCKS4/4a/5;IE 集成登录策略仍交给 WinHTTP。内嵌证书不会随 Windows 更新,也不执行在线 OCSP/CRL 查询。

固定依赖

文件 SHA-256
mbedtls-4.2.0.tar.bz2(含 TF-PSA-Crypto 1.2.0) 2bed9d713b4668f76553b097e72b8aa30bc8f112a940d7ae228d524bbde6ffea
cacert-2026-08-13.pem f66dff1bdf8f96060b8177976f8b7d9254bc89bc4db933d769f7384d28480bc9

VC-LTL 5.3.1、YY-Thunks 1.2.2 的固定下载及哈希见 cmake/xp_runtime.cmake。 依赖源代码存于忽略的 build 目录;编译时检查密码库实际版本宏。 更新信任证书时需固定新包和哈希并重新构建。

测试放在本地 ../rebuild/tests/lyrics、../rebuild/tests/freedb_analysis 等目录,不上传,默认不构建、不下载、不在 Actions 运行。 本地可设置 TTP_HTTPS_TEST_SOURCE、TTP_HTTPS_CODEC_TEST_SOURCE 后手动构建相应测试目标。 实测见 docs/VALIDATION.md。

来源:Mbed TLS 4.2.0、Mozilla CA / curl。

代理配置

沿用播放器“网络连接”中的代理类型、服务器、端口、用户名及密码字段。 服务器不带协议前缀时按 HTTP 代理处理;支持 http://、socks4://、socks4a://、socks5://(或 socks5h://)。 SOCKS5 将目标域名交给代理解析;SOCKS4 本机解析 IPv4,SOCKS4a 交给代理解析。 端口栏填 0 时使用服务器地址中的端口或协议默认值 HTTP 80、SOCKS 1080;正数端口栏优先。 详细实现、限制和验证状态见 代理支持。

GitHub Actions

在本仓库 Actions → Build HTTPS plugin → Run workflow 手动运行。 默认仅生成构建产物;勾选 Release a Version (GitHub) 后创建标签和 GitHub Release。 版本采用北京时间 yyyy.MM.dd,同日重复发布递增为 yyyy.MM.ddp1、p2 等,并在编译前写入 DLL 文件版本。 GitHub 构建产物及 Release ZIP 解压后均严格为两个文件:AddIn/ttp_https.dll、SHA256SUMS.txt。 完整说明见 独立构建与 Actions。

本地生成同样的包:

./build.ps1 -Package
# 重建指定发布版本,文件版本与 ZIP 名称保持一致:
./build.ps1 -Package -PackageVersion 2026.09.25p1

输出位于 build/Release/ttp_https-版本号.zip。PACKAGE_SHA256SUMS.txt 是 ZIP 的本地校验文件, ZIP 内的 SHA256SUMS.txt 校验 DLL;Actions 上传的运行文件只有 DLL 和其校验文件。

日期版本与 Release 体积优先构建

DLL 的文件版本和产品版本使用北京时间 yyyy.MM.dd,同日发布补丁使用 pN; 例如 2026.10.06p1 对应固定数字版本 2026.10.6.1。Actions 在编译前确定最终版本, DLL、发行包和发布标签使用同一版本。各项目继续独立构建。

Release 的统一配置见 cmake/size_release.cmake: /O1 /Os /Gy /Gw /GF、跨模块优化和链接去除未引用代码/折叠相同代码,关闭 Release 调试信息。 本项目经 /Ob0、/Ob1、/Ob2 对比,默认选择 /Ob1; 可用 -DTTP_SIZE_INLINE_LEVEL=0|1|2 重新测量不同内联策略。 保留正常浮点语义、异常处理及 VC-LTL/YY-Thunks 的 XP/Win7 兼容配置。 Actions 不编译、不运行测试;本次新增的测试仅位于本地 rebuild/tests/dll_size_versions,不进入发行包。

About

为千千静听社区复刻版增加旧系统的 https 支持,主程序在 https://github.com/Sonic853/TTPlayer

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages