mirror of
https://github.com/shadowsocks/ShadowsocksX-NG.git
synced 2026-11-08 10:54:50 +00:00
48 lines
3.8 KiB
Markdown
48 lines
3.8 KiB
Markdown
# 插件记录的传输模式
|
||
|
||
日期:2026-10-11。状态:实施与验收完成。本文记录本次设计,不代表当前代码行为。
|
||
|
||
## 需求与已确认决定
|
||
|
||
- 插件记录增加 `plugin_mode`,候选值仅为 `tcp_only` 和 `tcp_and_udp`。
|
||
- 默认值为 `tcp_only`;生成 sslocal 配置时省略该值。
|
||
- `tcp_and_udp` 使 TCP 与 UDP 经过插件,用于用户自行配置支持 SIP003u 的插件。应用不探测支持情况,不维护支持清单。
|
||
- 用户与内置插件记录均可以配置传输模式。同一记录的别名共享模式;用户覆盖使用用户记录自己的模式。
|
||
- 模式仅保存在本机插件配置,不进入服务器资料、分享或订阅。
|
||
- 旧文件缺少字段时使用 `tcp_only`;未知值使读取失败,保留原文件,并沿用读取失败时阻止修改的行为。
|
||
- 保存成功后发布目录快照,并更新活动运行配置。保存失败不发布;运行更新失败不撤销成功保存的配置。
|
||
- 本次验收包含配置与源码构建的界面,不包含真实 SIP003u 通信。
|
||
|
||
## 界面
|
||
|
||
- 编辑器新增「插件传输模式」,选项原样显示 `tcp_only` 与 `tcp_and_udp`。
|
||
- 内置记录入口从「启动参数」改为「设置」,编辑器标题改为「内置插件设置」。
|
||
- 将内置记录的「清空参数」从设置列表移入编辑器的「本地启动参数」区域。
|
||
- 「清空参数」只清空当前编辑草稿的启动参数,保留传输模式;点击「保存」才写入配置,点击「取消」放弃草稿。参数为空时禁用按钮。
|
||
- 不增加列表模式摘要或单独的恢复默认操作。
|
||
|
||
## 验收
|
||
|
||
- 新记录默认使用 `tcp_only`;旧 v1、v2 文件可以读取,缺少模式时保持原行为。
|
||
- 两种模式保存后可以重新读取;未知模式触发读取失败。
|
||
- `tcp_only` 的 sslocal 服务器配置省略 `plugin_mode`;`tcp_and_udp` 写入 `plugin_mode: "tcp_and_udp"`;无插件时省略全部插件字段。
|
||
- 用户记录、内置记录、同记录别名与用户覆盖使用正确模式。
|
||
- 保存失败不发布新模式;保存成功触发既有运行更新流程。
|
||
- 源码构建的界面验证模式选择、草稿清空、取消与保存行为,并验证列表不再显示「清空参数」。
|
||
- 真实 SIP003u 通信标记为未验证。
|
||
|
||
## 上游依据
|
||
|
||
- 固定 shadowsocks-rust v1.25.0 的[配置解析](https://github.com/shadowsocks/shadowsocks-rust/blob/v1.25.0/crates/shadowsocks-service/src/config.rs#L2192-L2217):缺少 `plugin_mode` 时使用 `TcpOnly`。
|
||
- 固定版本的[地址选择](https://github.com/shadowsocks/shadowsocks-rust/blob/v1.25.0/crates/shadowsocks/src/config.rs#L712-L728):插件模式控制 TCP 与 UDP 是否使用插件地址。`tcp_only` 不关闭本地 SOCKS5 UDP 中继;`tcp_and_udp` 不保证插件自身支持 UDP。
|
||
|
||
## 本次验收结果
|
||
|
||
- 定向插件测试:22 项通过,0 失败,0 跳过。
|
||
- `task test`:1007 项 hostless 测试通过,0 失败,0 跳过;规则转换测试 21 项通过。该命令构建当前 app、Core 与 Agent。
|
||
- 现有真实 sslocal 插件进程冒烟测试:1 项通过;只验证默认 TCP 插件进程启动、监听与退出,不代表 SIP003u 通信验收。
|
||
- 修改文件的 `swift format lint --strict` 与 `git diff --check` 通过;全仓 SwiftLint 为 29 项警告,0 严重违规。
|
||
- 当前仓库源码编译的隔离原生预览通过:列表入口、两种模式、保存后重新打开、清空草稿、取消保留原参数、保存清空后保留模式、用户记录默认模式。夹具使用临时目录,不读取实际用户插件配置。
|
||
- Standards 审查:0 项标准违规;将内置编辑入口改名为 `beginManagedSettings`,对应当前职责。Spec 审查:0 项缺陷。
|
||
- 真实 SIP003u 通信未验证,按确认的验收范围执行。
|