make TorService fit into the Android lifecycle as a "Bound Service"
One key reason why TorService
was created was to embed Tor daemon in a native Android Service
. That works now, so now this opens up a lot of possibilities for making Tor work in a way that Android wants background systems to operate. First, I'm regularly seeing sub 5 second TorService
starts, which means from zero Tor running to viewing https://check.torproject.org within 5 second. With all the sleep/restore work in Core Tor, I think we remove the "always running" model that we've used for the past 10 years, and instead think of TorService
as something that runs on demand, then stops when not needed.
While reading about the background service restrictions:
https://developer.android.com/about/versions/oreo/background#services
I noticed that these restrictions do not apply to "bound services", where there is a Binder
IPC connection between TorService
and an Android app. So for the Tor Browser or Briar model, where they ship with embedded TorService
, they can use the bindService()
interface to prevent TorService
from being killed without needing a permanent Notification
in the toolbar.
That app binding to TorService
need not be the app that ships with it. So we could also make NetCipher connect the client apps to TorService
to keep it alive, in cases where the embedded TorService
is expected to be used by other apps, e.g. Orbot and a Feed Reader app.
Something like using the ControlPort via stdin/stdout or direct method call would make rapid (re)starts work more reliably, e.g. https://trac.torproject.org/projects/tor/ticket/32476#comment:5
Also tracking this in NetCipher: https://gitlab.com/guardianproject/NetCipher/issues/10