Skip to content

feat(board): share files over session HTTP - #158

Merged
ZR233 merged 1 commit into
mainfrom
codex/session-shared-files
Jul 27, 2026
Merged

feat(board): share files over session HTTP#158
ZR233 merged 1 commit into
mainfrom
codex/session-shared-files

Conversation

@ZR233

@ZR233 ZR233 commented Jul 27, 2026

Copy link
Copy Markdown
Member

问题

现有 board session 文件只能通过控制 API 管理,并依赖 TFTP 提供板端访问。测试用例无法在任意 boot mode 下把临时脚本按原相对路径共享给开发板,也无法获得板端网络可访问的服务地址。

修改

  • 新增 GET /share/sessions/{session_id}/{relative_path},支持完整与单段 Range 下载;session 释放、超时或进入 releasing 后立即返回 404。
  • session 文件上传响应新增 typed http_url,boot profile 新增板端可达的 http_base_url;HTTP/TFTP URL 均通过 url::Url 构造与 Serde 编解码。
  • HTTP 共享复用现有 session 文件存储、大小限制和清理流程,不依赖 TFTP 是否启用。
  • 新增 BoardSessionContextBoardSession::context()BoardSession::upload_shared_file()BoardRunRequest
  • session_files 保留相对于配置目录的原路径,不提供 alias 或上传改名;拒绝绝对路径、..、符号链接逃逸、重复路径和缺失文件。
  • 运行前展开 ${boardServerIp}${boardServerHttpBaseUrl}${sessionFile:<relative-path>},普通 shell 变量保持原样;任一准备或运行失败仍进入 session release 流程。
  • 将相关协议响应改为具名 Serde 类型,并保留旧 FileResponse 类型别名兼容已有调用方。

实现逻辑

服务端从已解析的板端网络配置生成共享 HTTP URL,URL 路径段由 Url API 编码。共享下载端点只允许访问活动 session,并从同一 session 存储读取文件,因此租约和清理状态是唯一生命周期来源。

客户端先验证本地相对路径边界,再分配 session、获取板端网络上下文、逐文件上传和展开保留变量。没有共享文件或 session 变量的旧调用路径不会请求新字段,可继续连接旧服务端。

验证

  • cargo test -p ostool -p ostool-server --no-fail-fast
  • cargo clippy -p ostool -p ostool-server --all-targets -- -D warnings
  • 覆盖 TFTP 关闭、嵌套和 URL 编码路径、完整/Range 下载、路径逃逸、释放后 404、Serde round-trip、未来字段兼容及旧 board run 兼容路径。

@ZR233
ZR233 merged commit 04ac54d into main Jul 27, 2026
2 checks passed
@ZR233
ZR233 deleted the codex/session-shared-files branch July 27, 2026 02:39
@github-actions github-actions Bot mentioned this pull request Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant