175 lines
7.4 KiB
Markdown
175 lines
7.4 KiB
Markdown
---
|
||
title: project-cpe 当前状态概览
|
||
type: curated
|
||
permalink: main/projects/4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0/curated/project-cpe-当前状态概览
|
||
stable_id: fe7caa54-0379-47d0-a16d-b85423ebef99
|
||
scope: project
|
||
project_id: 4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0
|
||
workspace_type: development
|
||
usage_profile_id: null
|
||
preference_context: development
|
||
document_type: current_state
|
||
revision: 2
|
||
source_memory_ids: []
|
||
source_checkpoint_ids: []
|
||
source_file_ids: []
|
||
source_git_commit: de28dc8246094e2bc17cab7c764fb4d4a2da71e0
|
||
source_git_commits:
|
||
- de28dc8246094e2bc17cab7c764fb4d4a2da71e0
|
||
source_agent_sync_ids: []
|
||
model_connection: Sub2API
|
||
model_name: openai/gpt-oss-120b
|
||
source_count: 188
|
||
source_revisions:
|
||
memory:2ab0a44e-c56a-4cbc-a82f-c8b8456d5019: '1'
|
||
memory:c8101753-2674-42d9-8849-8e98d325d497: '1'
|
||
memory:866234ea-0d81-4fd9-912a-6cb68441e1cc: '1'
|
||
memory:d0a91595-3be4-4366-a615-58833dd0dff8: '1'
|
||
memory:51b5b48b-ac1f-4477-ab2f-dfc46198eb01: '1'
|
||
memory:fd164c80-b38b-4984-8008-48b57ba46e61: '1'
|
||
memory:fa66c797-a786-4966-8cb1-2eff40e3dc4e: '1'
|
||
memory:f0d365e8-4d2c-4d91-bdc0-df4d3d6fa6b3: '1'
|
||
memory:a732a5c7-f413-440e-ad41-2c018a68e15f: '1'
|
||
memory:ce9c98cd-85c8-4595-9cae-aa019b487893: '1'
|
||
memory:e92dbe0b-bb27-4b0e-b5bb-2330a0472fd2: '1'
|
||
memory:8c6276e6-d7db-409d-a3cd-5570c2d8fdc5: '1'
|
||
source_dispositions:
|
||
processed: 188
|
||
unchanged: 0
|
||
unsupported: 0
|
||
skipped: 0
|
||
cited_source_ids:
|
||
- git:backend/src/config.rs
|
||
- git:backend/src/db.rs
|
||
- git:backend/src/dbus.rs
|
||
- git:backend/src/handlers.rs
|
||
- git:backend/src/ota.rs
|
||
- git:backend/src/state.rs
|
||
- git:backend/src/usb_switch.rs
|
||
- git:backend/src/utils.rs
|
||
- git:frontend/src/contexts/RefreshContext.tsx
|
||
- git:frontend/src/contexts/ThemeContext.tsx
|
||
- git:frontend/src/hooks/useAdaptivePolling.ts
|
||
- git:frontend/src/pages/Dashboard/index.tsx
|
||
- git:frontend/src/pages/ATConsole.tsx
|
||
- git:frontend/src/pages/Configuration.tsx
|
||
- git:frontend/src/pages/DeviceInfo.tsx
|
||
- git:frontend/src/pages/Frp.tsx
|
||
- git:frontend/src/pages/InitScript.tsx
|
||
- git:frontend/src/pages/Network.tsx
|
||
- git:frontend/src/pages/OtaUpdate.tsx
|
||
- git:frontend/src/pages/Phone.tsx
|
||
- git:frontend/src/pages/SMS.tsx
|
||
- git:frontend/src/pages/Terminal.tsx
|
||
- git:frontend/vite.config.ts
|
||
- git:scripts/build.sh
|
||
- git:scripts/deploy.sh
|
||
- git:scripts/pack-ota.sh
|
||
- git:scripts/pack-userdata.sh
|
||
- memory:2ab0a44e-c56a-4cbc-a82f-c8b8456d5019
|
||
- memory:c8101753-2674-42d9-8849-8e98d325d497
|
||
- memory:866234ea-0d81-4fd9-912a-6cb68441e1cc
|
||
- memory:d0a91595-3be4-4366-a615-58833dd0dff8
|
||
- memory:51b5b48b-ac1f-4477-ab2f-dfc46198eb01
|
||
- memory:fd164c80-b38b-4984-8008-48b57ba46e61
|
||
- memory:fa66c797-a786-4966-8cb1-2eff40e3dc4e
|
||
- memory:f0d365e8-4d2c-4d91-bdc0-df4d3d6fa6b3
|
||
- memory:a732a5c7-f413-440e-ad41-2c018a68e15f
|
||
- memory:ce9c98cd-85c8-4595-9cae-aa019b487893
|
||
- memory:e92dbe0b-bb27-4b0e-b5bb-2330a0472fd2
|
||
- memory:8c6276e6-d7db-409d-a3cd-5570c2d8fdc5
|
||
job_cited_source_ids:
|
||
- git:backend/src/config.rs
|
||
- git:backend/src/db.rs
|
||
- git:backend/src/dbus.rs
|
||
- git:backend/src/handlers.rs
|
||
- git:backend/src/ota.rs
|
||
- git:backend/src/state.rs
|
||
- git:backend/src/usb_switch.rs
|
||
- git:backend/src/utils.rs
|
||
- git:frontend/src/contexts/RefreshContext.tsx
|
||
- git:frontend/src/contexts/ThemeContext.tsx
|
||
- git:frontend/src/hooks/useAdaptivePolling.ts
|
||
- git:frontend/src/pages/Dashboard/index.tsx
|
||
- git:frontend/src/pages/ATConsole.tsx
|
||
- git:frontend/src/pages/Configuration.tsx
|
||
- git:frontend/src/pages/DeviceInfo.tsx
|
||
- git:frontend/src/pages/Frp.tsx
|
||
- git:frontend/src/pages/InitScript.tsx
|
||
- git:frontend/src/pages/Network.tsx
|
||
- git:frontend/src/pages/OtaUpdate.tsx
|
||
- git:frontend/src/pages/Phone.tsx
|
||
- git:frontend/src/pages/SMS.tsx
|
||
- git:frontend/src/pages/Terminal.tsx
|
||
- git:frontend/vite.config.ts
|
||
- git:scripts/build.sh
|
||
- git:scripts/deploy.sh
|
||
- git:scripts/pack-ota.sh
|
||
- git:scripts/pack-userdata.sh
|
||
conflicts: []
|
||
supersedes:
|
||
- summary: Later checkpoint supersedes earlier repository URL
|
||
current_source_ids:
|
||
- memory:2ab0a44e-c56a-4cbc-a82f-c8b8456d5019
|
||
superseded_source_ids:
|
||
- memory:c8101753-2674-42d9-8849-8e98d325d497
|
||
preferences: []
|
||
source_cursor: 87
|
||
source_hash: 96f0e4026558c8a03161f53b392fcec7359d4d701c4f33576b44e2f308b0ec5a
|
||
prompt_version: 2026-08-12.3
|
||
schema_version: '3'
|
||
curation_job_id: a9f69899-ee39-4900-b39a-a54d737f9614
|
||
created_at: '2026-08-19T03:55:22.375228+00:00'
|
||
updated_at: '2026-08-19T18:49:23.488327+00:00'
|
||
tags:
|
||
- project-cpe
|
||
- development
|
||
- current_state
|
||
---
|
||
|
||
# 当前开发状态
|
||
|
||
## 后端
|
||
|
||
- **代码结构**: `backend/src` 目录下实现了配置 (`config.rs`)、数据库 (`db.rs`)、ofono D‑Bus 交互 (`dbus.rs`)、HTTP 处理 (`handlers.rs`)、OTA 逻辑 (`ota.rs`)、FRPC 管理 (`state.rs`)、USB Gadget 切换 (`usb_switch.rs`)、工具函数 (`utils.rs`)、Webhook 与短信推送 (`webhook.rs`, `sms_push.rs`) 等模块。
|
||
- **关键实现**:
|
||
- 全局串行锁 `with_serial` 防止 ofono `InProgress` 错误。
|
||
- `iptables_watchdog` 每 5 s 刷新防火墙规则。
|
||
- OTA 包的原子替换与校验(MD5、SHA‑256、架构检查)。
|
||
- 配置系统采用 JSON 热加载,部分字段(如 FRPC token、APN password)已脱敏占位。
|
||
- **依赖锁定**: 所有依赖记录在 `Cargo.lock` 中,使用的主要 crates 已列于证据表 3.1。
|
||
- **构建脚本**: `build.rs` 注入 `APP_VERSION`、`GIT_BRANCH`、`GIT_COMMIT`。
|
||
- **未完成项**: 安全存储敏感字段、完整的错误码映射、单元测试覆盖。
|
||
|
||
## 前端
|
||
|
||
- **技术栈**: React 19 + TypeScript 5.9,UI 框架 MUI v7,数据获取 TanStack Query 5,构建工具 Vite 7。
|
||
- **全局上下文**: `ThemeContext`(亮/暗模式持久化),`RefreshContext`(轮询间隔可配置),自定义 Hook `useAdaptivePolling`、`useApi` 实现可见性感知的轮询。
|
||
- **路由与页面**: 通过 `react-router` 懒加载,实现了 Dashboard、ATConsole、Configuration、DeviceInfo、FRP、InitScript、Network、OTA Update、Phone、SMS、Terminal 等十余页面;每个页面对应后端 API 完整封装。
|
||
- **布局**: `MainLayout` + `Sidebar` + `TopBar`,固定页头和按钮栏,内部内容可滚动。
|
||
- **构建产出**: `vite build` 生成 `dist/`,在 CI 中打包进 OTA 包。
|
||
- **未完成项**: 单元/集成测试、错误边界 (`ErrorBoundary`)、i18n 多语言支持、列表虚拟化、全局错误状态码处理。
|
||
|
||
## CI / 部署
|
||
|
||
- **GitHub Actions**: `.github/workflows/build-ota.yml` 自动构建后端 Rust 二进制、前端 `dist`,可选 UPX 压缩,生成 `meta.json` 并校验校验和,最终产出 `udx710-ota-3.5.5.tar.gz`。
|
||
- **脚本集合** (`scripts/`):
|
||
- `build.sh` 完成交叉编译、前端打包、OTA 元数据生成。
|
||
- `deploy.sh` 通过 ADB 将产物推送至设备并重启服务。
|
||
- `pack-ota.sh` 与 `pack-userdata.sh` 负责 OTA 打包及 UBIFS 制作。
|
||
- `monitor.sh` 提供 ofono DBus 实时监控交互界面。
|
||
- **Docker**: `docker/gnu-builder.Dockerfile` 基于 Ubuntu 18.04,安装 `gcc-aarch64-linux-gnu` 与 Rust 交叉目标。
|
||
|
||
## 关键开放事项
|
||
|
||
| 类别 | 描述 |
|
||
|------|------|
|
||
| 安全 | AT 网关缺失鉴权、所有 HTTP 错误返回 200、CORS `*`、敏感字段未加密存储 |
|
||
| OTA | 未签名、无回滚机制 |
|
||
| FRPC | 日志轮转阈值固定、令牌未安全保存 |
|
||
| USB | 配置文件无文件锁、热切换标记为实验性 |
|
||
| 测试 | 缺乏单元/集成测试、前端缺少错误边界 |
|
||
| 性能 | 大表未虚拟化、轮询可见性切换未防抖 |
|
||
| 国际化 | 仅中文硬编码 |
|
||
|
||
以上状态基于截至 2026‑08‑19 的所有证据,任何后续改动应更新相应章节并在文档中记录。 |