定位(2026-10-29 方案裁决 A1-A4): 纯 Rust、平台无关,只做「怎么连 + 收发什么」——QUIC 会话、协议 v2 认证、 视频帧流、输入上行、Ping/Pong、KeyFrameReq。解码/渲染/触摸全在 Kotlin 侧, 本 crate 不碰像素、不依赖 openh264(dev-dependency 仅验证工具用)。 设计要点 - PeerTarget::Direct 是唯一的连接形态;不做中继、不定义 Relay 变体 (《多平台架构设计》§6.1 裁决)。将来设备码+打洞只换 connect() 内部。 - 帧经容量 2 的 mpsc 交付,**不丢帧**:跳帧决策属于看得到解码器状态的消费方 (Kotlin),Rust 层丢帧会重演 R-3 教训(跳帧断参考链)。 - insecure_skip_verify=false 时明确报错而非静默放行——证书钉扎登记在方案 阶段 4,安全红线不允许默默降级。 - 双流结构与桌面 viewer 一致(流1 认证+视频,流2 输入+控制),入会即请求 IDR。 验证(headless,桌面→桌面 127.0.0.1) - 单测 3 passed(帧契约、默认配置、strict-verify 显式报错) - examples/headless_check:300 帧,seq 违例 0、keyframe 标志不符 0、 解码成功 300/300、RTT 路径工作(RTT=1ms 出现) - 全 workspace 回归:common 20 passed,构建全绿
22 lines
985 B
TOML
22 lines
985 B
TOML
[workspace]
|
||
resolver = "2"
|
||
# agent-core:平台无关会话层 + 软件编码视频管线(当前仅 linux-agent 使用)
|
||
# linux-agent:Linux 被控端(X11 + XTest)
|
||
# viewer-core:安卓主控的连接/协议/收帧层(桌面 headless 可验证;Android 经 UniFFI 复用)
|
||
members = ["common", "agent-core", "agent", "linux-agent", "viewer", "viewer-core"]
|
||
# 默认成员保持 Windows 三件套,`cargo build --release` 行为与改动前完全一致;
|
||
# Linux 被控端显式构建:`cargo build --release -p linux-agent`
|
||
default-members = ["common", "agent", "viewer"]
|
||
|
||
[workspace.dependencies]
|
||
anyhow = "1"
|
||
serde = { version = "1", features = ["derive"] }
|
||
bincode = "1.3"
|
||
tokio = { version = "1", features = ["full"] }
|
||
quinn = "0.11"
|
||
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "logging"] }
|
||
rcgen = { version = "0.13", default-features = false, features = ["ring", "pem"] }
|
||
lz4_flex = "0.11"
|
||
windows = "0.62"
|
||
minifb = "0.27"
|