docs: update TASKS.md — M3/M5 marked complete, relay tests documented
This commit is contained in:
53
TASKS.md
53
TASKS.md
@@ -37,15 +37,15 @@ UDP 打洞优先,分层中继,超级辅助节点。
|
||||
- [x] **集成到 inp2pc main**:登录前先探测,结果带入 LoginReq
|
||||
- [ ] 定期重新探测(每 5 分钟),NATType 变化时通知 server
|
||||
|
||||
### M3: 打洞(预计 300 行)
|
||||
### M3: 打洞(预计 300 行)✅ 完成
|
||||
- [x] UDP punch 基础实现 `pkg/punch/`
|
||||
- [x] TCP punch 基础实现
|
||||
- [x] 优先级链(direct → UDP → TCP)
|
||||
- [ ] **双端同步打洞协调**
|
||||
- server 收到 A 的 ConnectReq
|
||||
- 同时推送 PunchStart 给 A 和 B(带对方的 IP:Port + NAT 类型)
|
||||
- 双方同时调 `punch.Connect()`
|
||||
- 任一方成功后报告 PunchResult
|
||||
- [x] **双端同步打洞协调** `internal/server/coordinator.go`
|
||||
- [x] server 收到 A 的 ConnectReq
|
||||
- [x] 同时推送 PunchStart 给 A 和 B(带对方的 IP:Port + NAT 类型)
|
||||
- [x] 双方同时调 `punch.Connect()`
|
||||
- [x] 任一方成功后报告 PunchResult
|
||||
- [ ] Symmetric NAT 端口预测(可选优化)
|
||||
- [ ] 打洞结果上报 + 统计
|
||||
|
||||
@@ -63,22 +63,25 @@ UDP 打洞优先,分层中继,超级辅助节点。
|
||||
- [ ] UDP 端口转发实现
|
||||
- [x] 连接池/复用(同 peer 多 app 共享一条 tunnel)
|
||||
|
||||
### M5: 中继(预计 400 行)
|
||||
- [x] 中继管理器框架 `pkg/relay/`
|
||||
- [ ] **中继节点选择策略**(server 端)
|
||||
- 同用户 `--relay` 节点优先
|
||||
- 全局 `--super` 节点次优
|
||||
- server 自身中继兜底
|
||||
- [ ] **中继握手协议**
|
||||
- A → server: RelayNodeReq
|
||||
- server → A: RelayNodeRsp(中继节点信息 + TOTP/一次性令牌)
|
||||
- A → relay: 建立 TCP 连接 + 携带令牌
|
||||
- server → relay: PushRelayOffer(通知中继节点)
|
||||
- B → relay: 建立 TCP 连接
|
||||
- relay: 桥接 A↔B
|
||||
- [ ] **中继认证**
|
||||
- 同用户:TOTP(token, now)
|
||||
- 跨用户超级节点:server 签发 `RelayToken`(HMAC-SHA256 签名,含 TTL)
|
||||
### M5: 中继(预计 400 行)✅ 完成
|
||||
- [x] 中继管理器 `pkg/relay/` — 完整实现(~320 行)
|
||||
- [x] **中继节点选择策略**(server 端 `server.GetRelayNodes()`)
|
||||
- [x] 同用户 `--relay` 节点优先
|
||||
- [x] 全局 `--super` 节点次优
|
||||
- [x] server 自身中继兜底
|
||||
- [x] **中继握手协议**(长度前缀 JSON)
|
||||
- [x] A → relay: TCP 连接 + RelayHandshake{sessionID, role="from", token, node}
|
||||
- [x] B → relay: TCP 连接 + RelayHandshake{sessionID, role="to", token, node}
|
||||
- [x] relay: TOTP 验证 → 配对等待(30s 超时)→ 双向桥接
|
||||
- [x] 结果回传 relayResult{error, detail}
|
||||
- [x] **中继认证**
|
||||
- [x] 同用户:TOTP(token, now)
|
||||
- [x] 跨用户超级节点:server 签发 `RelayToken`(HMAC-SHA256 签名,含 TTL)
|
||||
- [x] **客户端工具函数** `ConnectToRelay()` — 封装完整握手+等待配对
|
||||
- [x] **测试覆盖**(3/3 通过)
|
||||
- [x] TestRelayBridge — A↔B 双向数据验证
|
||||
- [x] TestRelayLargeData — 1MB 精确传输
|
||||
- [x] TestRelayAuthDenied — 错误 TOTP 被正确拒绝
|
||||
- [ ] 中继带宽统计 + 负载均衡
|
||||
|
||||
### M6: inp2ps / inp2pc main 入口(预计 200 行)✅ 完成
|
||||
@@ -180,7 +183,7 @@ pkg/
|
||||
├── punch/ ✅ 完成(UDP/TCP punch + direct + 优先级链)
|
||||
├── mux/ ✅ 完成(流多路复用,7 测试 + 1 benchmark 全部通过)
|
||||
├── tunnel/ ✅ 完成(基于 mux 的端口转发,端到端测试通过)
|
||||
└── relay/ ✅ 框架完成(缺握手协议实现)
|
||||
└── relay/ ✅ 完成(中继握手、TOTP 认证、双向桥接、3 测试通过)
|
||||
|
||||
internal/
|
||||
├── server/ ✅ 完成(登录、心跳、report、relay 选择、节点管理、打洞协调)
|
||||
@@ -199,7 +202,9 @@ cmd/
|
||||
- pkg/mux: 7 tests + 1 bench (0.2s) — 并发/大载荷/FIN/session
|
||||
- pkg/tunnel: 3 tests (0.16s) — 端到端转发/5 并发/统计
|
||||
|
||||
二进制: bin/inp2ps (8.8MB) + bin/inp2pc (8.2MB)
|
||||
- pkg/relay: 3 tests (0.3s) — 双向桥接/1MB 中继/认证拒绝
|
||||
|
||||
二进制: bin/inp2ps (6.0MB) + bin/inp2pc (5.6MB) (静态编译, strip)
|
||||
```
|
||||
|
||||
## 接口约定(核心层 ↔ 前端/次要层)
|
||||
|
||||
Reference in New Issue
Block a user