arti is running too quickly into timout under bad network conditions
When bootstrapping onionmasq from scratch under slow and lossy network conditions, fetching microdescriptors take too long, which causes arti to run into an timout.
02:34:08:461 W/onionmasq: onionmasq_mobile: Attempted to stop proxy when it wasn't running!
02:34:08:461 D/onionmasq: onionmasq_mobile: closing proxy...
02:34:08:458 ERROR
02:34:08:457 E/onionmasq: onionmasq_mobile::ffi: runProxy() returned error: Arti bootstrap failure: timed out
02:34:08:402 onionmasq event: VPN network lost
02:34:08:354 E/onionmasq: onionmasq_mobile: OnionTunnel failed: Arti bootstrap failure: timed out
02:34:08:353 W/onionmasq: onion_tunnel: Arti bootstrap timed out after 30 seconds
02:33:48:915 Internet connectivity changed. Has connectivity: true
02:33:48:912 Network capabilities changed. Internet connectivity:true
02:33:43:374 D/onionmasq: onionmasq_mobile::scaffolding: AndroidScaffolding::protect() for fd 134
02:33:42:351 Bootstrap at: 45%: connecting successfully; directory is fetching microdescriptors (0/8826)
02:33:42:322 I/onionmasq: tor_dirmgr::bootstrap: 1: Downloading microdescriptors (we are missing 8826).attempt=1
02:33:41:976 Bootstrap at: 45%: connecting successfully; directory is fetching authority certificates (9/9)
02:33:41:395 Bootstrap at: 36%: connecting successfully; directory is fetching authority certificates (0/9)
02:33:41:393 I/onionmasq: tor_dirmgr::bootstrap: 1: Downloading certificates for consensus (we are missing 9/9).attempt=1
02:33:40:271 Bootstrap at: 15%: connecting successfully; directory is fetching a consensus
02:33:39:633 Bootstrap at: 15%: connecting successfully; directory is fetching a consensus
02:33:39:370 Bootstrap at: 15%: connecting successfully; directory is fetching a consensus
02:33:38:611 Bootstrap at: 8%: handshaking with Tor relays; directory is fetching a consensus
02:33:38:387 D/onionmasq: onionmasq_mobile::scaffolding: AndroidScaffolding::protect() for fd 175
02:33:38:387 D/onionmasq: onionmasq_mobile::scaffolding: AndroidScaffolding::protect() for fd 176
02:33:38:387 D/onionmasq: onionmasq_mobile::scaffolding: AndroidScaffolding::protect() for fd 174
02:33:38:386 I/onionmasq: tor_dirmgr::bootstrap: 1: Looking for a consensus.attempt=1
02:33:38:386 I/onionmasq: tor_dirmgr: Didn't get usable directory from cache.
02:33:38:386 I/onionmasq: onion_tunnel::dns: Starting DNS manager
02:33:38:386 D/onionmasq: onionmasq_mobile: starting bootstrap event listening ...
02:33:38:386 D/onionmasq: onionmasq_mobile: starting onionmasq...
02:33:38:385 D/onionmasq: onionmasq_mobile: successfully created tun interface
02:33:38:384 I/onionmasq: arti_client::client: Using keystore from "/data/user/0/org.torproject.artitoyvpn/files/arti-data/keystore"
02:33:38:384 W/onionmasq: tor_rtcompat::impls::rustls: Creating a RustlsRuntime, but no CryptoProvider is installed. The application should call CryptoProvider::install_default()
02:33:38:384 D/onionmasq: onionmasq_mobile: creating onion_tunnel...
02:33:38:384 D/onionmasq: onionmasq_mobile: Onionmasq_runProxy on Android API 36
02:33:38:383 --------- beginning of main
02:33:38:365 Bootstrap at: 0%: connecting to the internet; directory is fetching a consensus
02:33:38:362 Bootstrap at: 0%: connecting to the internet; not downloading
02:33:38:293 Internet connectivity changed. Has connectivity: true
02:33:38:293 Start reading onionmasq logs from logcat
02:33:38:292 onionmasq not running... setting up observers
02:33:38:198 STARTING
02:33:38:174 Network capabilities changed. Internet connectivity:true
02:33:38:174 Internet connectivity available.
02:33:38:128 STARTING_UI
It would be nice to have an Java API to set the timeout. That way the integrating app could increase the timeout in case it notices bad network conditions. Alternatively onionmasq rust itself could get a mechanism to evaluate the throughput (which it already measures) and adjust the timeout accordingly.