mirror of
https://github.com/jmcorgan/fips.git
synced 2026-08-09 00:04:54 +00:00
`AndroidIo` captured the injected bridge `Arc` at construction, and the BLE transport was only built if a bridge already existed when the node started. Both facts are wrong for the platform this backend serves: the radio is owned by an Android foreground service whose lifetime is independent of the node's — it can start *after* the node, and it mints a fresh bridge every time it starts. So the only way for a running node to adopt a radio was to stop and rebuild it, which drops every peer, every session, and every route with it. Turning Bluetooth on took the whole mesh down for as long as re-handshaking took, which is not what enabling a transport should cost. `AndroidIo` now resolves the process-wide bridge per operation, so a fresh bridge is picked up in place, and the transport is constructed whether or not one exists yet. Operations attempted with no radio present return a transport error instead of being unreachable, and recover on their own once a radio appears. `AndroidIo::new` is kept for tests that drive a specific bridge. Live streams still hold the radio they were opened on rather than migrating to a new one — a channel belongs to the socket that created it, and those die with the radio that owned them.