From 1af951f8b47be05d0f15df76c6bb578936872c4c Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 6 Aug 2020 17:11:24 +0100 Subject: [PATCH] Use injection to create plugin factories. --- .../bluetooth/AndroidBluetoothPlugin.java | 17 +++--- .../AndroidBluetoothPluginFactory.java | 18 +++--- .../plugin/tcp/AndroidLanTcpPlugin.java | 14 ++--- .../tcp/AndroidLanTcpPluginFactory.java | 18 +++--- .../bramble/plugin/tor/AndroidTorPlugin.java | 20 +++---- .../plugin/tor/AndroidTorPluginFactory.java | 27 ++++++--- .../bramble/api/plugin/TorDirectory.java | 22 ++++++++ .../plugin/tcp/LanTcpPluginFactory.java | 10 +++- .../plugin/tcp/WanTcpPluginFactory.java | 8 ++- .../bramble/plugin/DesktopPluginModule.java | 33 ++--------- .../bluetooth/JavaBluetoothPluginFactory.java | 8 ++- .../plugin/modem/ModemPluginFactory.java | 5 +- .../plugin/tor/UnixTorPluginFactory.java | 10 +++- .../briarproject/briar/android/AppModule.java | 56 ++++--------------- .../briar/headless/HeadlessModule.kt | 55 ++++-------------- 15 files changed, 142 insertions(+), 179 deletions(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorDirectory.java diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java index c59b45c03..b77e5b893 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java @@ -1,5 +1,6 @@ package org.briarproject.bramble.plugin.bluetooth; +import android.app.Application; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothServerSocket; @@ -67,7 +68,7 @@ class AndroidBluetoothPlugin private static final int MAX_DISCOVERY_MS = 10_000; private final AndroidExecutor androidExecutor; - private final Context appContext; + private final Application app; private final Clock clock; private volatile boolean wasEnabledByUs = false; @@ -82,7 +83,7 @@ class AndroidBluetoothPlugin Executor wakefulIoExecutor, SecureRandom secureRandom, AndroidExecutor androidExecutor, - Context appContext, + Application app, Clock clock, Backoff backoff, PluginCallback callback, @@ -92,7 +93,7 @@ class AndroidBluetoothPlugin wakefulIoExecutor, secureRandom, backoff, callback, maxLatency, maxIdleTime); this.androidExecutor = androidExecutor; - this.appContext = appContext; + this.app = app; this.clock = clock; } @@ -104,13 +105,13 @@ class AndroidBluetoothPlugin filter.addAction(ACTION_STATE_CHANGED); filter.addAction(ACTION_SCAN_MODE_CHANGED); receiver = new BluetoothStateReceiver(); - appContext.registerReceiver(receiver, filter); + app.registerReceiver(receiver, filter); } @Override public void stop() { super.stop(); - if (receiver != null) appContext.unregisterReceiver(receiver); + if (receiver != null) app.unregisterReceiver(receiver); } @Override @@ -167,7 +168,7 @@ class AndroidBluetoothPlugin @Override @Nullable String getBluetoothAddress() { - String address = AndroidUtils.getBluetoothAddress(appContext, adapter); + String address = AndroidUtils.getBluetoothAddress(app, adapter); return address.isEmpty() ? null : address; } @@ -237,7 +238,7 @@ class AndroidBluetoothPlugin filter.addAction(ACTION_DISCOVERY_STARTED); filter.addAction(ACTION_DISCOVERY_FINISHED); filter.addAction(ACTION_FOUND); - appContext.registerReceiver(receiver, filter); + app.registerReceiver(receiver, filter); try { if (adapter.startDiscovery()) { long now = clock.currentTimeMillis(); @@ -274,7 +275,7 @@ class AndroidBluetoothPlugin } finally { LOG.info("Cancelling discovery"); adapter.cancelDiscovery(); - appContext.unregisterReceiver(receiver); + app.unregisterReceiver(receiver); } // Shuffle the addresses so we don't always try the same one first shuffle(addresses); diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java index caeec30f9..96f094d72 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java @@ -1,10 +1,11 @@ package org.briarproject.bramble.plugin.bluetooth; +import android.app.Application; import android.bluetooth.BluetoothSocket; -import android.content.Context; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.io.TimeoutMonitor; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.BackoffFactory; @@ -15,11 +16,13 @@ import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.bramble.api.system.AndroidWakeLockManager; import org.briarproject.bramble.api.system.Clock; +import org.briarproject.bramble.api.system.WakefulIoExecutor; import java.security.SecureRandom; import java.util.concurrent.Executor; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID; @@ -36,18 +39,19 @@ public class AndroidBluetoothPluginFactory implements DuplexPluginFactory { private final Executor ioExecutor, wakefulIoExecutor; private final AndroidExecutor androidExecutor; private final AndroidWakeLockManager wakeLockManager; - private final Context appContext; + private final Application app; private final SecureRandom secureRandom; private final EventBus eventBus; private final Clock clock; private final TimeoutMonitor timeoutMonitor; private final BackoffFactory backoffFactory; - public AndroidBluetoothPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, + @Inject + public AndroidBluetoothPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, AndroidExecutor androidExecutor, AndroidWakeLockManager wakeLockManager, - Context appContext, + Application app, SecureRandom secureRandom, EventBus eventBus, Clock clock, @@ -57,7 +61,7 @@ public class AndroidBluetoothPluginFactory implements DuplexPluginFactory { this.wakefulIoExecutor = wakefulIoExecutor; this.androidExecutor = androidExecutor; this.wakeLockManager = wakeLockManager; - this.appContext = appContext; + this.app = app; this.secureRandom = secureRandom; this.eventBus = eventBus; this.clock = clock; @@ -86,7 +90,7 @@ public class AndroidBluetoothPluginFactory implements DuplexPluginFactory { MAX_POLLING_INTERVAL, BACKOFF_BASE); AndroidBluetoothPlugin plugin = new AndroidBluetoothPlugin( connectionLimiter, connectionFactory, ioExecutor, - wakefulIoExecutor, secureRandom, androidExecutor, appContext, + wakefulIoExecutor, secureRandom, androidExecutor, app, clock, backoff, callback, MAX_LATENCY, MAX_IDLE_TIME); eventBus.addListener(plugin); return plugin; diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java index 6faeef1b1..1da07f382 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java @@ -1,7 +1,7 @@ package org.briarproject.bramble.plugin.tcp; import android.annotation.TargetApi; -import android.content.Context; +import android.app.Application; import android.net.ConnectivityManager; import android.net.LinkAddress; import android.net.LinkProperties; @@ -42,6 +42,7 @@ import static java.util.Collections.list; import static java.util.Collections.singletonList; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.bramble.api.plugin.LanTcpConstants.DEFAULT_PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.INACTIVE; @@ -63,7 +64,7 @@ class AndroidLanTcpPlugin extends LanTcpPlugin { AndroidLanTcpPlugin(Executor ioExecutor, Executor wakefulIoExecutor, - Context appContext, + Application app, Backoff backoff, PluginCallback callback, int maxLatency, @@ -74,12 +75,9 @@ class AndroidLanTcpPlugin extends LanTcpPlugin { // Don't execute more than one connection status check at a time connectionStatusExecutor = new PoliteExecutor("AndroidLanTcpPlugin", ioExecutor, 1); - ConnectivityManager connectivityManager = (ConnectivityManager) - appContext.getSystemService(CONNECTIVITY_SERVICE); - if (connectivityManager == null) throw new AssertionError(); - this.connectivityManager = connectivityManager; - wifiManager = (WifiManager) appContext.getApplicationContext() - .getSystemService(WIFI_SERVICE); + connectivityManager = (ConnectivityManager) + requireNonNull(app.getSystemService(CONNECTIVITY_SERVICE)); + wifiManager = (WifiManager) app.getSystemService(WIFI_SERVICE); socketFactory = SocketFactory.getDefault(); } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java index aea720458..beedd97a4 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java @@ -1,8 +1,9 @@ package org.briarproject.bramble.plugin.tcp; -import android.content.Context; +import android.app.Application; import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.BackoffFactory; @@ -10,10 +11,12 @@ import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; +import org.briarproject.bramble.api.system.WakefulIoExecutor; import java.util.concurrent.Executor; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID; @@ -31,18 +34,19 @@ public class AndroidLanTcpPluginFactory implements DuplexPluginFactory { private final Executor ioExecutor, wakefulIoExecutor; private final EventBus eventBus; private final BackoffFactory backoffFactory; - private final Context appContext; + private final Application app; - public AndroidLanTcpPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, + @Inject + public AndroidLanTcpPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, EventBus eventBus, BackoffFactory backoffFactory, - Context appContext) { + Application app) { this.ioExecutor = ioExecutor; this.wakefulIoExecutor = wakefulIoExecutor; this.eventBus = eventBus; this.backoffFactory = backoffFactory; - this.appContext = appContext; + this.app = app; } @Override @@ -60,7 +64,7 @@ public class AndroidLanTcpPluginFactory implements DuplexPluginFactory { Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL, MAX_POLLING_INTERVAL, BACKOFF_BASE); AndroidLanTcpPlugin plugin = new AndroidLanTcpPlugin(ioExecutor, - wakefulIoExecutor, appContext, backoff, callback, + wakefulIoExecutor, app, backoff, callback, MAX_LATENCY, MAX_IDLE_TIME, CONNECTION_TIMEOUT); eventBus.addListener(plugin); return plugin; diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java index 9558e85e6..7428fac0c 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java @@ -1,6 +1,6 @@ package org.briarproject.bramble.plugin.tor; -import android.content.Context; +import android.app.Application; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -17,23 +17,22 @@ import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.LocationUtils; import org.briarproject.bramble.api.system.ResourceProvider; +import java.io.File; import java.io.IOException; import java.util.concurrent.Executor; import javax.net.SocketFactory; -import static android.content.Context.MODE_PRIVATE; - @MethodsNotNullByDefault @ParametersNotNullByDefault class AndroidTorPlugin extends TorPlugin { - private final Context appContext; + private final Application app; private final AndroidWakeLock wakeLock; AndroidTorPlugin(Executor ioExecutor, Executor wakefulIoExecutor, - Context appContext, + Application app, NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, @@ -47,13 +46,14 @@ class AndroidTorPlugin extends TorPlugin { PluginCallback callback, String architecture, int maxLatency, - int maxIdleTime) { + int maxIdleTime, + File torDirectory) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, maxLatency, - maxIdleTime, appContext.getDir("tor", MODE_PRIVATE)); - this.appContext = appContext; + maxIdleTime, torDirectory); + this.app = app; wakeLock = wakeLockManager.createWakeLock("TorPlugin"); } @@ -65,8 +65,8 @@ class AndroidTorPlugin extends TorPlugin { @Override protected long getLastUpdateTime() { try { - PackageManager pm = appContext.getPackageManager(); - PackageInfo pi = pm.getPackageInfo(appContext.getPackageName(), 0); + PackageManager pm = app.getPackageManager(); + PackageInfo pi = pm.getPackageInfo(app.getPackageName(), 0); return pi.lastUpdateTime; } catch (NameNotFoundException e) { throw new AssertionError(e); diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPluginFactory.java index 8103700f5..2a8bedfff 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPluginFactory.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPluginFactory.java @@ -1,15 +1,17 @@ package org.briarproject.bramble.plugin.tor; -import android.content.Context; +import android.app.Application; import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.network.NetworkManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.BackoffFactory; import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TorConstants; +import org.briarproject.bramble.api.plugin.TorDirectory; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; @@ -17,12 +19,15 @@ import org.briarproject.bramble.api.system.AndroidWakeLockManager; import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.LocationUtils; import org.briarproject.bramble.api.system.ResourceProvider; +import org.briarproject.bramble.api.system.WakefulIoExecutor; import org.briarproject.bramble.util.AndroidUtils; +import java.io.File; import java.util.concurrent.Executor; import java.util.logging.Logger; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import javax.net.SocketFactory; @Immutable @@ -39,7 +44,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { private static final double BACKOFF_BASE = 1.2; private final Executor ioExecutor, wakefulIoExecutor; - private final Context appContext; + private final Application app; private final NetworkManager networkManager; private final LocationUtils locationUtils; private final EventBus eventBus; @@ -50,10 +55,12 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { private final BatteryManager batteryManager; private final AndroidWakeLockManager wakeLockManager; private final Clock clock; + private final File torDirectory; - public AndroidTorPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, - Context appContext, + @Inject + public AndroidTorPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, + Application app, NetworkManager networkManager, LocationUtils locationUtils, EventBus eventBus, @@ -63,10 +70,11 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { CircumventionProvider circumventionProvider, BatteryManager batteryManager, AndroidWakeLockManager wakeLockManager, - Clock clock) { + Clock clock, + @TorDirectory File torDirectory) { this.ioExecutor = ioExecutor; this.wakefulIoExecutor = wakefulIoExecutor; - this.appContext = appContext; + this.app = app; this.networkManager = networkManager; this.locationUtils = locationUtils; this.eventBus = eventBus; @@ -77,6 +85,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { this.batteryManager = batteryManager; this.wakeLockManager = wakeLockManager; this.clock = clock; + this.torDirectory = torDirectory; } @Override @@ -120,11 +129,11 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { MAX_POLLING_INTERVAL, BACKOFF_BASE); TorRendezvousCrypto torRendezvousCrypto = new TorRendezvousCryptoImpl(); AndroidTorPlugin plugin = new AndroidTorPlugin(ioExecutor, - wakefulIoExecutor, appContext, networkManager, locationUtils, + wakefulIoExecutor, app, networkManager, locationUtils, torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, wakeLockManager, backoff, torRendezvousCrypto, callback, architecture, - MAX_LATENCY, MAX_IDLE_TIME); + MAX_LATENCY, MAX_IDLE_TIME, torDirectory); eventBus.addListener(plugin); return plugin; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorDirectory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorDirectory.java new file mode 100644 index 000000000..9b4f7e39d --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorDirectory.java @@ -0,0 +1,22 @@ +package org.briarproject.bramble.api.plugin; + +import java.io.File; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.inject.Qualifier; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Annotation for injecting the {@link File directory} where the Tor plugin + * should store its state. + */ +@Qualifier +@Target({FIELD, METHOD, PARAMETER}) +@Retention(RUNTIME) +public @interface TorDirectory { +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java index c93afcf54..d7f62737f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginFactory.java @@ -1,6 +1,7 @@ package org.briarproject.bramble.plugin.tcp; import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.BackoffFactory; @@ -8,10 +9,12 @@ import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; +import org.briarproject.bramble.api.system.WakefulIoExecutor; import java.util.concurrent.Executor; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID; @@ -30,8 +33,9 @@ public class LanTcpPluginFactory implements DuplexPluginFactory { private final EventBus eventBus; private final BackoffFactory backoffFactory; - public LanTcpPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, + @Inject + public LanTcpPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, EventBus eventBus, BackoffFactory backoffFactory) { this.ioExecutor = ioExecutor; @@ -54,7 +58,7 @@ public class LanTcpPluginFactory implements DuplexPluginFactory { public DuplexPlugin createPlugin(PluginCallback callback) { Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL, MAX_POLLING_INTERVAL, BACKOFF_BASE); - LanTcpPlugin plugin = new LanTcpPlugin(ioExecutor, wakefulIoExecutor, + LanTcpPlugin plugin = new LanTcpPlugin(ioExecutor, wakefulIoExecutor, backoff, callback, MAX_LATENCY, MAX_IDLE_TIME, CONNECTION_TIMEOUT); eventBus.addListener(plugin); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java index 9b6459db8..f8aa5f085 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPluginFactory.java @@ -1,6 +1,7 @@ package org.briarproject.bramble.plugin.tcp; import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.ShutdownManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; @@ -9,10 +10,12 @@ import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; +import org.briarproject.bramble.api.system.WakefulIoExecutor; import java.util.concurrent.Executor; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import static org.briarproject.bramble.api.plugin.WanTcpConstants.ID; @@ -32,8 +35,9 @@ public class WanTcpPluginFactory implements DuplexPluginFactory { private final BackoffFactory backoffFactory; private final ShutdownManager shutdownManager; - public WanTcpPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, + @Inject + public WanTcpPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, EventBus eventBus, BackoffFactory backoffFactory, ShutdownManager shutdownManager) { diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java index 9a7cf3940..6a33b933a 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java @@ -1,29 +1,20 @@ package org.briarproject.bramble.plugin; -import org.briarproject.bramble.api.event.EventBus; -import org.briarproject.bramble.api.io.TimeoutMonitor; -import org.briarproject.bramble.api.lifecycle.IoExecutor; -import org.briarproject.bramble.api.lifecycle.ShutdownManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.plugin.BackoffFactory; import org.briarproject.bramble.api.plugin.BluetoothConstants; import org.briarproject.bramble.api.plugin.LanTcpConstants; import org.briarproject.bramble.api.plugin.PluginConfig; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; -import org.briarproject.bramble.api.reliability.ReliabilityLayerFactory; -import org.briarproject.bramble.api.system.WakefulIoExecutor; import org.briarproject.bramble.plugin.bluetooth.JavaBluetoothPluginFactory; import org.briarproject.bramble.plugin.modem.ModemPluginFactory; import org.briarproject.bramble.plugin.tcp.LanTcpPluginFactory; import org.briarproject.bramble.plugin.tcp.WanTcpPluginFactory; -import java.security.SecureRandom; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.concurrent.Executor; import dagger.Module; import dagger.Provides; @@ -37,31 +28,15 @@ import static java.util.Collections.singletonMap; public class DesktopPluginModule extends PluginModule { @Provides - PluginConfig getPluginConfig(@IoExecutor Executor ioExecutor, - @WakefulIoExecutor Executor wakefulIoExecutor, - SecureRandom random, - BackoffFactory backoffFactory, - ReliabilityLayerFactory reliabilityFactory, - ShutdownManager shutdownManager, - EventBus eventBus, - TimeoutMonitor timeoutMonitor) { - DuplexPluginFactory bluetooth = new JavaBluetoothPluginFactory( - ioExecutor, wakefulIoExecutor, random, eventBus, - timeoutMonitor, backoffFactory); - DuplexPluginFactory modem = new ModemPluginFactory(ioExecutor, - reliabilityFactory); - DuplexPluginFactory lan = new LanTcpPluginFactory(ioExecutor, - wakefulIoExecutor, eventBus, backoffFactory); - DuplexPluginFactory wan = new WanTcpPluginFactory(ioExecutor, - wakefulIoExecutor, eventBus, backoffFactory, shutdownManager); - Collection duplex = - asList(bluetooth, modem, lan, wan); + PluginConfig getPluginConfig(JavaBluetoothPluginFactory bluetooth, + ModemPluginFactory modem, LanTcpPluginFactory lan, + WanTcpPluginFactory wan) { @NotNullByDefault PluginConfig pluginConfig = new PluginConfig() { @Override public Collection getDuplexFactories() { - return duplex; + return asList(bluetooth, modem, lan, wan); } @Override diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java index 6a1b97295..8f87c78bb 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java @@ -2,6 +2,7 @@ package org.briarproject.bramble.plugin.bluetooth; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.io.TimeoutMonitor; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.BackoffFactory; @@ -9,11 +10,13 @@ import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; +import org.briarproject.bramble.api.system.WakefulIoExecutor; import java.security.SecureRandom; import java.util.concurrent.Executor; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import javax.microedition.io.StreamConnection; import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID; @@ -34,8 +37,9 @@ public class JavaBluetoothPluginFactory implements DuplexPluginFactory { private final TimeoutMonitor timeoutMonitor; private final BackoffFactory backoffFactory; - public JavaBluetoothPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, + @Inject + public JavaBluetoothPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, SecureRandom secureRandom, EventBus eventBus, TimeoutMonitor timeoutMonitor, diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java index edffe7a31..8e2d29d92 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPluginFactory.java @@ -1,5 +1,6 @@ package org.briarproject.bramble.plugin.modem; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TransportId; @@ -11,6 +12,7 @@ import org.briarproject.bramble.util.StringUtils; import java.util.concurrent.Executor; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; @Immutable @NotNullByDefault @@ -21,7 +23,8 @@ public class ModemPluginFactory implements DuplexPluginFactory { private final ModemFactory modemFactory; private final SerialPortList serialPortList; - public ModemPluginFactory(Executor ioExecutor, + @Inject + public ModemPluginFactory(@IoExecutor Executor ioExecutor, ReliabilityLayerFactory reliabilityFactory) { modemFactory = new ModemFactoryImpl(ioExecutor, reliabilityFactory); serialPortList = new SerialPortListImpl(); diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java index ee7df5512..35fe3cc90 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java @@ -2,12 +2,14 @@ package org.briarproject.bramble.plugin.tor; import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.network.NetworkManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.BackoffFactory; import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.TorConstants; +import org.briarproject.bramble.api.plugin.TorDirectory; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; @@ -20,6 +22,7 @@ import java.util.concurrent.Executor; import java.util.logging.Logger; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import javax.net.SocketFactory; import static java.util.logging.Logger.getLogger; @@ -50,8 +53,9 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { private final Clock clock; private final File torDirectory; - public UnixTorPluginFactory(Executor ioExecutor, - Executor wakefulIoExecutor, + @Inject + public UnixTorPluginFactory(@IoExecutor Executor ioExecutor, + @IoExecutor Executor wakefulIoExecutor, NetworkManager networkManager, LocationUtils locationUtils, EventBus eventBus, @@ -61,7 +65,7 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { CircumventionProvider circumventionProvider, BatteryManager batteryManager, Clock clock, - File torDirectory) { + @TorDirectory File torDirectory) { this.ioExecutor = ioExecutor; this.wakefulIoExecutor = wakefulIoExecutor; this.networkManager = networkManager; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index d818ceb7d..3b1e2371f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -1,42 +1,30 @@ package org.briarproject.briar.android; import android.app.Application; -import android.content.Context; import android.content.SharedPreferences; import android.os.StrictMode; import com.vanniktech.emoji.RecentEmoji; import org.briarproject.bramble.api.FeatureFlags; -import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.crypto.KeyStrengthener; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.db.DatabaseConfig; import org.briarproject.bramble.api.event.EventBus; -import org.briarproject.bramble.api.io.TimeoutMonitor; -import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.LifecycleManager; -import org.briarproject.bramble.api.network.NetworkManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.plugin.BackoffFactory; import org.briarproject.bramble.api.plugin.BluetoothConstants; import org.briarproject.bramble.api.plugin.LanTcpConstants; import org.briarproject.bramble.api.plugin.PluginConfig; +import org.briarproject.bramble.api.plugin.TorDirectory; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; import org.briarproject.bramble.api.reporting.DevConfig; -import org.briarproject.bramble.api.system.AndroidExecutor; -import org.briarproject.bramble.api.system.AndroidWakeLockManager; -import org.briarproject.bramble.api.system.Clock; -import org.briarproject.bramble.api.system.LocationUtils; -import org.briarproject.bramble.api.system.ResourceProvider; -import org.briarproject.bramble.api.system.WakefulIoExecutor; import org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPluginFactory; import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory; import org.briarproject.bramble.plugin.tor.AndroidTorPluginFactory; -import org.briarproject.bramble.plugin.tor.CircumventionProvider; import org.briarproject.bramble.util.AndroidUtils; import org.briarproject.bramble.util.StringUtils; import org.briarproject.briar.android.account.LockManagerImpl; @@ -51,15 +39,12 @@ import org.briarproject.briar.api.android.ScreenFilterMonitor; import java.io.File; import java.security.GeneralSecurityException; -import java.security.SecureRandom; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; -import javax.net.SocketFactory; import dagger.Module; import dagger.Provides; @@ -124,40 +109,21 @@ public class AppModule { } @Provides - PluginConfig providePluginConfig(@IoExecutor Executor ioExecutor, - @WakefulIoExecutor Executor wakefulIoExecutor, - AndroidExecutor androidExecutor, - SecureRandom random, - SocketFactory torSocketFactory, - BackoffFactory backoffFactory, - Application app, - NetworkManager networkManager, - LocationUtils locationUtils, - EventBus eventBus, - ResourceProvider resourceProvider, - CircumventionProvider circumventionProvider, - BatteryManager batteryManager, - AndroidWakeLockManager wakeLockManager, - Clock clock, - TimeoutMonitor timeoutMonitor) { - Context appContext = app.getApplicationContext(); - DuplexPluginFactory bluetooth = new AndroidBluetoothPluginFactory( - ioExecutor, wakefulIoExecutor, androidExecutor, - wakeLockManager, appContext, random, eventBus, clock, - timeoutMonitor, backoffFactory); - DuplexPluginFactory tor = new AndroidTorPluginFactory(ioExecutor, - wakefulIoExecutor, appContext, networkManager, locationUtils, - eventBus, torSocketFactory, backoffFactory, resourceProvider, - circumventionProvider, batteryManager, wakeLockManager, clock); - DuplexPluginFactory lan = new AndroidLanTcpPluginFactory(ioExecutor, - wakefulIoExecutor, eventBus, backoffFactory, appContext); - Collection duplex = asList(bluetooth, tor, lan); + @Singleton + @TorDirectory + File provideTorDirectory(Application app) { + return app.getDir("tor", MODE_PRIVATE); + } + + @Provides + PluginConfig providePluginConfig(AndroidBluetoothPluginFactory bluetooth, + AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan) { @NotNullByDefault PluginConfig pluginConfig = new PluginConfig() { @Override public Collection getDuplexFactories() { - return duplex; + return asList(bluetooth, tor, lan); } @Override diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt index 5f3ba6e86..27d185c5b 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt @@ -5,25 +5,16 @@ import dagger.Module import dagger.Provides import org.briarproject.bramble.account.AccountModule import org.briarproject.bramble.api.FeatureFlags -import org.briarproject.bramble.api.battery.BatteryManager import org.briarproject.bramble.api.db.DatabaseConfig -import org.briarproject.bramble.api.event.EventBus -import org.briarproject.bramble.api.lifecycle.IoExecutor -import org.briarproject.bramble.api.network.NetworkManager -import org.briarproject.bramble.api.plugin.BackoffFactory import org.briarproject.bramble.api.plugin.PluginConfig +import org.briarproject.bramble.api.plugin.TorDirectory import org.briarproject.bramble.api.plugin.TransportId import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory -import org.briarproject.bramble.api.system.Clock -import org.briarproject.bramble.api.system.LocationUtils -import org.briarproject.bramble.api.system.ResourceProvider -import org.briarproject.bramble.api.system.WakefulIoExecutor import org.briarproject.bramble.battery.DefaultBatteryManagerModule import org.briarproject.bramble.event.DefaultEventExecutorModule import org.briarproject.bramble.network.JavaNetworkModule import org.briarproject.bramble.plugin.tor.CircumventionModule -import org.briarproject.bramble.plugin.tor.CircumventionProvider import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory import org.briarproject.bramble.socks.SocksModule import org.briarproject.bramble.system.DefaultTaskSchedulerModule @@ -39,9 +30,7 @@ import org.briarproject.briar.headless.forums.HeadlessForumModule import org.briarproject.briar.headless.messaging.HeadlessMessagingModule import java.io.File import java.util.Collections.emptyList -import java.util.concurrent.Executor import javax.inject.Singleton -import javax.net.SocketFactory @Module( includes = [ @@ -77,39 +66,15 @@ internal class HeadlessModule(private val appDir: File) { } @Provides - internal fun providePluginConfig( - @IoExecutor ioExecutor: Executor, - @WakefulIoExecutor wakefulIoExecutor: Executor, - torSocketFactory: SocketFactory, - backoffFactory: BackoffFactory, - networkManager: NetworkManager, - locationUtils: LocationUtils, - eventBus: EventBus, - resourceProvider: ResourceProvider, - circumventionProvider: CircumventionProvider, - batteryManager: BatteryManager, - clock: Clock - ): PluginConfig { - val duplex: List = if (isLinux() || isMac()) { - val torDirectory = File(appDir, "tor") - val tor = UnixTorPluginFactory( - ioExecutor, - wakefulIoExecutor, - networkManager, - locationUtils, - eventBus, - torSocketFactory, - backoffFactory, - resourceProvider, - circumventionProvider, - batteryManager, - clock, - torDirectory - ) - listOf(tor) - } else { - emptyList() - } + @TorDirectory + internal fun provideTorDirectory(): File { + return File(appDir, "tor") + } + + @Provides + internal fun providePluginConfig(tor: UnixTorPluginFactory): PluginConfig { + val duplex: List = + if (isLinux() || isMac()) listOf(tor) else emptyList() return object : PluginConfig { override fun getDuplexFactories(): Collection = duplex override fun getSimplexFactories(): Collection = emptyList()