vpn/docs/upstream-research.md

59 lines
2.8 KiB
Markdown

# Upstream/API research snapshot
Checked 2026-09-23.
## Flet
Current Flet publishing docs describe a generated Flutter shell and support
`[tool.flet.app] path/module`, local developer packages and Flutter user extensions.
The bridge uses a Flet `Service` control and a Dart `FletService`, then a standard
Flutter `MethodChannel` for the Android plugin. It is intentionally not a Python
subprocess bridge.
## Android
Current Android docs require `VpnService.prepare()`, `protect()` for upstream sockets,
`Builder.establish()`, and a foreground service on API 26+. Android 14+ foreground
services require a declared type; this project uses the documented `specialUse` type and
an explanatory property. Android has one active VPN service per user/profile.
`Builder.addDisallowedApplication()` is valid for `DIRECT`, but it makes traffic bypass
the VPN and therefore cannot implement `VOID`. `VOID` needs a UID-aware native packet
path and a fail-closed drop policy; the Python model exists now, while enforcement is a
device-tested native milestone.
`LocalOnlyHotspot` is the public API for an app-created local network. Android 13+
requires `NEARBY_WIFI_DEVICES`; older targets use location permission. The reservation
returns SSID/password but the interface address must be discovered at runtime. The
implementation does not assume a fixed `192.168.43.1` address and does not enable
system tethering.
## FreeTurn
The current `samosvalishe/free-turn-proxy` mobile README documents the gomobile API:
`Start`, `StartTunnel`, `StartDirectTunnel`, `Restart`, `Stop`, `GetState`,
`TunnelStats`, `ParseTunnelConfig`, `SetProtect`, `SetEventSink`, `ValidateConfig` and
`OnCaptcha`. The Android AAR is built with the upstream `task build:android` target.
The Android reference app is GPL-3.0 and is used only as lifecycle/API evidence.
## SignBox / sing-box-lx
The selected fork is `Leadaxe/sing-box-lx`, pinned to `v1.14.1-lx.8`. Its release AAR
is verified against upstream `SHA256SUMS`; it exposes `CommandServer`, `CommandClient`,
`PlatformInterface`, VLESS and AmneziaWG 3.x features. LxBox confirms Android lifecycle
uses `CommandServer` and manages the live core through an in-process `CommandClient`,
without a public management port.
The fork registers `tun`, `mixed`, `socks`, and `http` inbounds. Because this UI exposes
separate ports, the client emits separate SOCKS and HTTP inbounds instead of forcing
both protocols onto one mixed port.
FreeTurn and libbox AARs ship different `go.Seq`/`go.Universe` implementations. Android
rejects the duplicate classes, and sharing one version across independently built JNI
libraries is unsafe. The libbox-first APK excludes FreeTurn until namespace isolation
or another proven isolation design is implemented.
## Removed scope
iOS and NetworkExtension are not implemented. macOS is omitted from the first build;
desktop target is Linux/Windows proxy-only.