1.6 KiB
1.6 KiB
Transport Designs
USB Transport
USB is the first MVP transport.
Phone Side
- Android uses accessory-mode APIs through
UsbManager.openAccessory. - The gateway treats USB as an ordered byte stream carrying VSHP frames.
- The USB session is accepted only after phone-side pairing approval.
- If USB disconnects, the peer lease remains resumable for a short window.
Desktop Side
- The desktop client acts as USB host and opens the Android Open Accessory channel.
- The client advertises platform, app version, and public key in
HELLO. - After
CONFIG, the client configures the local virtual interface and routes.
Failure Modes
- Cable unplug: transport closes, session enters resumable state.
- Host sleeps: session ticket can resume on reconnect.
- Unknown host: no IP traffic is accepted before pairing approval.
Wi-Fi Transport
- Discovery uses DNS-SD service type
_vpnshare._udp. - QR pairing remains the reliable fallback when multicast is blocked.
- The tunnel uses the same VSHP frame format as USB.
- The gateway never assumes LAN is trusted.
Hotspot Transport
- Android app-created hotspot uses
LocalOnlyHotspot. - The local-only hotspot does not provide Internet; it only provides local reach to the gateway app.
- The client still installs its virtual interface and uses VSHP for all traffic.
Transport Selection
Default order:
- USB if connected and paired.
- Known Wi-Fi peer on same LAN.
- Local-only hotspot if the user starts it from the app.
Session resume can switch transports if the peer key and resume ticket validate.