feat: add ABSDK 0630 bridge #3

Merged
KremeCN merged 3 commits from feat/absdk-bridge into main 2026-08-23 07:19:05 +08:00
Owner

Summary

  • add a pure Kotlin/JVM anti-corruption layer for ABSDK 0630
  • serialize blocking SDK calls and enforce one provider-scoped session
  • map ABRet, raw maps, SDK exceptions, and error codes into typed domain results
  • implement session, socket, temperature/humidity, and infrared gateways
  • document bytecode-confirmed protocol facts, SDK limitations, and unresolved behavior
  • align JVM module bytecode with the Android Java 17 target

Scope boundaries

  • the bridge is not wired into the Android app in this PR; debug continues using Fakes
  • setHostInfo is intentionally not called or implemented as a provider flow
  • logout clears only the bridge-local session because the JAR exposes no logout or token setter
  • no real credentials, network calls, or hardware were used in tests
  • docs/requirement_spec.md and docs/project_plan.md are unchanged

Verification

gradlew.bat --stop
gradlew.bat clean :absdk-bridge:test :domain:test :testing:fakes:test :android:app:lintDebug :android:app:assembleDebug :android:app:assembleRelease build

Result: BUILD SUCCESSFUL

The public JAR API was also rechecked with javap, including the actual getThStatus(String) method, absence of a public logout API, ABRet.getDicDatas(), IrInfo.getStatus(), and downloadIrCodes(List<IrInfo>).

## Summary - add a pure Kotlin/JVM anti-corruption layer for ABSDK 0630 - serialize blocking SDK calls and enforce one provider-scoped session - map `ABRet`, raw maps, SDK exceptions, and error codes into typed domain results - implement session, socket, temperature/humidity, and infrared gateways - document bytecode-confirmed protocol facts, SDK limitations, and unresolved behavior - align JVM module bytecode with the Android Java 17 target ## Scope boundaries - the bridge is not wired into the Android app in this PR; debug continues using Fakes - `setHostInfo` is intentionally not called or implemented as a provider flow - logout clears only the bridge-local session because the JAR exposes no logout or token setter - no real credentials, network calls, or hardware were used in tests - `docs/requirement_spec.md` and `docs/project_plan.md` are unchanged ## Verification ```text gradlew.bat --stop gradlew.bat clean :absdk-bridge:test :domain:test :testing:fakes:test :android:app:lintDebug :android:app:assembleDebug :android:app:assembleRelease build ``` Result: `BUILD SUCCESSFUL` The public JAR API was also rechecked with `javap`, including the actual `getThStatus(String)` method, absence of a public logout API, `ABRet.getDicDatas()`, `IrInfo.getStatus()`, and `downloadIrCodes(List<IrInfo>)`.
KremeCN added 1 commit 2026-08-23 06:55:54 +08:00

PR Reviewer Guide 🔍

(Review updated until commit 13fd18a9f3)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 PR contains tests
🔒 Security concerns

明文传输:AbsdkBridge.create() 构造的厂商客户端会通过硬编码 HTTP 端点执行登录和设备操作,登录凭据派生值、会话 Token、设备状态及红外数据可能被窃听或篡改。@CleartextAbsdkTransport 只提供编译期提示,并不保护实际链路。当前 PR 尚未将该实现接入 Android App,因此现有应用路径不会触发此风险;后续集成前必须落实文档所述的加密代理、HTTPS 或其他经批准的传输控制。

⚡ No major issues detected
## PR Reviewer Guide 🔍 #### (Review updated until commit https://git.kimico.de/Flagship/abox-mgr/commit/13fd18a9f3a602f30d23474010f19674675bbc9e) Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 4 🔵🔵🔵🔵⚪</td></tr> <tr><td>🧪&nbsp;<strong>PR contains tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>Security concerns</strong><br><br> 明文传输:`AbsdkBridge.create()` 构造的厂商客户端会通过硬编码 HTTP 端点执行登录和设备操作,登录凭据派生值、会话 Token、设备状态及红外数据可能被窃听或篡改。`@CleartextAbsdkTransport` 只提供编译期提示,并不保护实际链路。当前 PR 尚未将该实现接入 Android App,因此现有应用路径不会触发此风险;后续集成前必须落实文档所述的加密代理、HTTPS 或其他经批准的传输控制。</td></tr> <tr><td>⚡&nbsp;<strong>No major issues detected</strong></td></tr> </table>
KremeCN added 1 commit 2026-08-23 07:06:08 +08:00
Author
Owner

已处理本轮意见:

  1. 全局状态:生产 AbsdkBridge.create() 现在始终返回进程内同一个实例,使 Mutex、活动 Session 与厂商进程级单例保持一致;新增工厂单例测试。
  2. 会话失效:任意设备操作返回 DomainError.TokenInvalid 时,Bridge 会同步清除本地 Session;新增测试验证会话清除以及后续操作不会继续进入 SDK。
  3. 明文传输:原始 JAR 的硬编码 HTTP 无法在本 PR 内直接修复。新增 @CleartextAbsdkTransport 编译期 opt-in 门禁,真实工厂和厂商 Client 都被标记;Bridge 继续未接入 App。架构与协议文档明确,在获批的 HTTPS、加密代理或其他传输控制确定前不得启用真实 ABox 入口。该门禁防止误接入,但不宣称提供了链路加密。

完整测试、lint、debug/release 构建和全项目 build 均为 BUILD SUCCESSFUL。

修复提交:0e9b7df fix: guard global ABSDK session state

已处理本轮意见: 1. **全局状态**:生产 `AbsdkBridge.create()` 现在始终返回进程内同一个实例,使 `Mutex`、活动 Session 与厂商进程级单例保持一致;新增工厂单例测试。 2. **会话失效**:任意设备操作返回 `DomainError.TokenInvalid` 时,Bridge 会同步清除本地 Session;新增测试验证会话清除以及后续操作不会继续进入 SDK。 3. **明文传输**:原始 JAR 的硬编码 HTTP 无法在本 PR 内直接修复。新增 `@CleartextAbsdkTransport` 编译期 opt-in 门禁,真实工厂和厂商 Client 都被标记;Bridge 继续未接入 App。架构与协议文档明确,在获批的 HTTPS、加密代理或其他传输控制确定前不得启用真实 ABox 入口。该门禁防止误接入,但不宣称提供了链路加密。 完整测试、lint、debug/release 构建和全项目 build 均为 `BUILD SUCCESSFUL`。 修复提交:`0e9b7df fix: guard global ABSDK session state`

Persistent review updated to latest commit 0e9b7dfd4b

**[Persistent review](http://gitea:3000/Flagship/abox-mgr/pulls/3#issuecomment-29)** updated to latest commit https://git.kimico.de/Flagship/abox-mgr/commit/0e9b7dfd4bf6c71f33cc345f9197b70016e20242
KremeCN added 1 commit 2026-08-23 07:13:19 +08:00
Author
Owner

已处理红外总体错误码误判问题:

  • parseDownloadResult 现在只允许 00000 和已确认表示逐项部分失败的 20204 进入 ret 解析;
  • 其他总体错误码先进入标准错误映射,即使响应附带结构合法的 ret 也不会被误判为成功;
  • 新增回归测试:10002 + 合法 ret 必须返回 TokenInvalid、清除本地 Session,且后续红外调用不会继续进入 SDK;
  • 原有 20204 逐项成功/失败测试继续通过;
  • 完整 Bridge/Domain/Fake 测试、Android lint、debug/release 构建和全项目 build 均为 BUILD SUCCESSFUL。

修复提交:13fd18a fix: reject invalid infrared batch responses

明文 HTTP 限制仍作为真实集成阻塞项保留;Bridge 尚未接入 App,@CleartextAbsdkTransport 只防误接入,不宣称提供链路加密。

已处理红外总体错误码误判问题: - `parseDownloadResult` 现在只允许 `00000` 和已确认表示逐项部分失败的 `20204` 进入 `ret` 解析; - 其他总体错误码先进入标准错误映射,即使响应附带结构合法的 `ret` 也不会被误判为成功; - 新增回归测试:`10002` + 合法 `ret` 必须返回 `TokenInvalid`、清除本地 Session,且后续红外调用不会继续进入 SDK; - 原有 `20204` 逐项成功/失败测试继续通过; - 完整 Bridge/Domain/Fake 测试、Android lint、debug/release 构建和全项目 build 均为 `BUILD SUCCESSFUL`。 修复提交:`13fd18a fix: reject invalid infrared batch responses` 明文 HTTP 限制仍作为真实集成阻塞项保留;Bridge 尚未接入 App,`@CleartextAbsdkTransport` 只防误接入,不宣称提供链路加密。

Persistent review updated to latest commit 13fd18a9f3

**[Persistent review](https://git.kimico.de/Flagship/abox-mgr/pulls/3#issuecomment-29)** updated to latest commit https://git.kimico.de/Flagship/abox-mgr/commit/13fd18a9f3a602f30d23474010f19674675bbc9e
KremeCN merged commit 6f7d3248b0 into main 2026-08-23 07:19:05 +08:00
KremeCN deleted branch feat/absdk-bridge 2026-08-23 07:19:05 +08:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Flagship/abox-mgr#3