From d4656df384e8b02b361170c5b884326ae70e4664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Thu, 14 Oct 2021 09:03:22 +0200 Subject: [PATCH 1/4] Make Tor ports configurable at runtime Instead of using hard-coded values 59050 and 59051 for the Tor socks and control ports, provide them via a TorPorts interface. This makes it possible to pass the ports to a TorPortsImpl in modules. Hence it is possible to configure the Tor port for different types of builds or via command line options in case of briar headless or other clients using the core code. --- .../bramble/plugin/tor/AndroidTorPlugin.java | 4 ++- .../plugin/tor/AndroidTorPluginFactory.java | 6 +++- .../bramble/api/plugin/TorConstants.java | 4 +-- .../briarproject/bramble/plugin/TorPorts.java | 12 ++++++++ .../bramble/plugin/TorPortsImpl.java | 22 ++++++++++++++ .../bramble/plugin/tor/TorPlugin.java | 30 ++++++++++++++++--- .../bramble/socks/SocksModule.java | 7 +++-- bramble-core/src/main/resources/torrc | 6 ---- .../bramble/plugin/tor/JavaTorPlugin.java | 4 ++- .../bramble/plugin/tor/UnixTorPlugin.java | 4 ++- .../plugin/tor/UnixTorPluginFactory.java | 8 +++-- .../bramble/plugin/tor/BridgeTest.java | 9 +++++- .../briarproject/briar/android/AppModule.java | 10 +++++++ .../briar/headless/HeadlessModule.kt | 10 +++++++ .../briar/headless/HeadlessTestModule.kt | 10 +++++++ 15 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java delete mode 100644 bramble-core/src/main/resources/torrc 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 617c70518..a9aff29b0 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 @@ -16,6 +16,7 @@ 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.plugin.TorPorts; import org.briarproject.bramble.util.AndroidUtils; import java.io.File; @@ -59,6 +60,7 @@ class AndroidTorPlugin extends TorPlugin { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, + TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -72,7 +74,7 @@ class AndroidTorPlugin extends TorPlugin { int maxIdleTime, File torDirectory) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, - torSocketFactory, clock, resourceProvider, + torSocketFactory, torPorts, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, maxLatency, maxIdleTime, torDirectory); 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 1434ea229..a52926d26 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 @@ -20,6 +20,7 @@ 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.TorPorts; import org.briarproject.bramble.util.AndroidUtils; import java.io.File; @@ -49,6 +50,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { private final LocationUtils locationUtils; private final EventBus eventBus; private final SocketFactory torSocketFactory; + private final TorPorts torPorts; private final BackoffFactory backoffFactory; private final ResourceProvider resourceProvider; private final CircumventionProvider circumventionProvider; @@ -65,6 +67,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, + TorPorts torPorts, BackoffFactory backoffFactory, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -79,6 +82,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { this.locationUtils = locationUtils; this.eventBus = eventBus; this.torSocketFactory = torSocketFactory; + this.torPorts = torPorts; this.backoffFactory = backoffFactory; this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; @@ -130,7 +134,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { TorRendezvousCrypto torRendezvousCrypto = new TorRendezvousCryptoImpl(); AndroidTorPlugin plugin = new AndroidTorPlugin(ioExecutor, wakefulIoExecutor, app, networkManager, locationUtils, - torSocketFactory, clock, resourceProvider, + torSocketFactory, torPorts, clock, resourceProvider, circumventionProvider, batteryManager, wakeLockManager, backoff, torRendezvousCrypto, callback, architecture, MAX_LATENCY, MAX_IDLE_TIME, torDirectory); diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java index b90e1b564..56985ebbe 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java @@ -10,8 +10,8 @@ public interface TorConstants { String PROP_ONION_V2 = "onion"; String PROP_ONION_V3 = "onion3"; - int SOCKS_PORT = 59050; - int CONTROL_PORT = 59051; + int DEFAULT_SOCKS_PORT = 59050; + int DEFAULT_CONTROL_PORT = 59051; int CONNECT_TO_PROXY_TIMEOUT = 5000; // Milliseconds int EXTRA_SOCKET_TIMEOUT = 30000; // Milliseconds diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java new file mode 100644 index 000000000..0dd9eb9ad --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java @@ -0,0 +1,12 @@ +package org.briarproject.bramble.plugin; + +/** + * Interface used for injecting the tor ports. + */ +public interface TorPorts { + + int getSocksPort(); + + int getControlPort(); + +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java new file mode 100644 index 000000000..83a3dc68b --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java @@ -0,0 +1,22 @@ +package org.briarproject.bramble.plugin; + +public class TorPortsImpl implements TorPorts { + + private int socksPort; + private int controlPort; + + public TorPortsImpl(int socksPort, int controlPort) { + this.socksPort = socksPort; + this.controlPort = controlPort; + } + + @Override + public int getSocksPort() { + return socksPort; + } + + @Override + public int getControlPort() { + return controlPort; + } +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 4714489d9..128bf67c1 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -33,7 +33,9 @@ import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent; 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.plugin.TorPorts; +import java.io.ByteArrayInputStream; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; @@ -74,7 +76,6 @@ import static org.briarproject.bramble.api.plugin.Plugin.State.DISABLED; import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING; import static org.briarproject.bramble.api.plugin.Plugin.State.INACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING; -import static org.briarproject.bramble.api.plugin.TorConstants.CONTROL_PORT; import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_MOBILE; import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_NETWORK; @@ -123,6 +124,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { private final NetworkManager networkManager; private final LocationUtils locationUtils; private final SocketFactory torSocketFactory; + private final TorPorts torPorts; private final Clock clock; private final BatteryManager batteryManager; private final Backoff backoff; @@ -152,6 +154,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, + TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -168,6 +171,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { this.networkManager = networkManager; this.locationUtils = locationUtils; this.torSocketFactory = torSocketFactory; + this.torPorts = torPorts; this.clock = clock; this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; @@ -287,7 +291,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { } try { // Open a control connection and authenticate using the cookie file - controlSocket = new Socket("127.0.0.1", CONTROL_PORT); + controlSocket = new Socket("127.0.0.1", torPorts.getControlPort()); controlConnection = new TorControlConnection(controlSocket); controlConnection.authenticate(read(cookieFile)); // Tell Tor to exit when the control connection is closed @@ -390,9 +394,27 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { return zin; } + private InputStream getTorrc() { + StringBuilder strb = new StringBuilder(); + append(strb, "ControlPort", torPorts.getControlPort()); + append(strb, "CookieAuthentication", 1); + append(strb, "DisableNetwork", 1); + append(strb, "RunAsDaemon", 1); + append(strb, "SafeSocks", 1); + append(strb, "SocksPort", torPorts.getSocksPort()); + + return new ByteArrayInputStream(strb.toString().getBytes()); + } + + private static void append(StringBuilder strb, String name, int value) { + strb.append(name); + strb.append(" "); + strb.append(value); + strb.append("\n"); + } + private InputStream getConfigInputStream() { - ClassLoader cl = getClass().getClassLoader(); - return requireNonNull(cl.getResourceAsStream("torrc")); + return requireNonNull(getTorrc()); } private void listFiles(File f) { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java index be342f011..9706c8e67 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java @@ -1,5 +1,7 @@ package org.briarproject.bramble.socks; +import org.briarproject.bramble.plugin.TorPorts; + import java.net.InetSocketAddress; import javax.net.SocketFactory; @@ -9,15 +11,14 @@ import dagger.Provides; import static org.briarproject.bramble.api.plugin.TorConstants.CONNECT_TO_PROXY_TIMEOUT; import static org.briarproject.bramble.api.plugin.TorConstants.EXTRA_SOCKET_TIMEOUT; -import static org.briarproject.bramble.api.plugin.TorConstants.SOCKS_PORT; @Module public class SocksModule { @Provides - SocketFactory provideTorSocketFactory() { + SocketFactory provideTorSocketFactory(TorPorts torPorts) { InetSocketAddress proxy = new InetSocketAddress("127.0.0.1", - SOCKS_PORT); + torPorts.getSocksPort()); return new SocksSocketFactory(proxy, CONNECT_TO_PROXY_TIMEOUT, EXTRA_SOCKET_TIMEOUT); } diff --git a/bramble-core/src/main/resources/torrc b/bramble-core/src/main/resources/torrc deleted file mode 100644 index 3d27a7f20..000000000 --- a/bramble-core/src/main/resources/torrc +++ /dev/null @@ -1,6 +0,0 @@ -ControlPort 59051 -CookieAuthentication 1 -DisableNetwork 1 -RunAsDaemon 1 -SafeSocks 1 -SocksPort 59050 diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java index 791d01896..1327f3b83 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java @@ -8,6 +8,7 @@ import org.briarproject.bramble.api.plugin.PluginCallback; 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.plugin.TorPorts; import java.io.File; import java.net.URI; @@ -25,6 +26,7 @@ abstract class JavaTorPlugin extends TorPlugin { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, + TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -37,7 +39,7 @@ abstract class JavaTorPlugin extends TorPlugin { int maxIdleTime, File torDirectory) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, - torSocketFactory, clock, resourceProvider, + torSocketFactory, torPorts, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, maxLatency, maxIdleTime, torDirectory); diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java index 568ba51c3..8b36cd2da 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java @@ -11,6 +11,7 @@ import org.briarproject.bramble.api.plugin.PluginCallback; 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.plugin.TorPorts; import java.io.File; import java.util.concurrent.Executor; @@ -25,6 +26,7 @@ class UnixTorPlugin extends JavaTorPlugin { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, + TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -37,7 +39,7 @@ class UnixTorPlugin extends JavaTorPlugin { int maxIdleTime, File torDirectory) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, - torSocketFactory, clock, resourceProvider, + torSocketFactory, torPorts, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, maxLatency, maxIdleTime, torDirectory); 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 c13b7e61b..ceeb596c5 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 @@ -17,6 +17,7 @@ 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.TorPorts; import java.io.File; import java.util.concurrent.Executor; @@ -48,6 +49,7 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { private final LocationUtils locationUtils; private final EventBus eventBus; private final SocketFactory torSocketFactory; + private final TorPorts torPorts; private final BackoffFactory backoffFactory; private final ResourceProvider resourceProvider; private final CircumventionProvider circumventionProvider; @@ -62,6 +64,7 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, + TorPorts torPorts, BackoffFactory backoffFactory, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -74,6 +77,7 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { this.locationUtils = locationUtils; this.eventBus = eventBus; this.torSocketFactory = torSocketFactory; + this.torPorts = torPorts; this.backoffFactory = backoffFactory; this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; @@ -122,8 +126,8 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { MAX_POLLING_INTERVAL, BACKOFF_BASE); TorRendezvousCrypto torRendezvousCrypto = new TorRendezvousCryptoImpl(); UnixTorPlugin plugin = new UnixTorPlugin(ioExecutor, wakefulIoExecutor, - networkManager, locationUtils, torSocketFactory, clock, - resourceProvider, circumventionProvider, batteryManager, + networkManager, locationUtils, torSocketFactory, torPorts, + clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, MAX_LATENCY, MAX_IDLE_TIME, torDirectory); eventBus.addListener(plugin); diff --git a/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java b/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java index 99ebef925..4ce0766cd 100644 --- a/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java +++ b/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java @@ -11,6 +11,8 @@ 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.TorPorts; +import org.briarproject.bramble.plugin.TorPortsImpl; import org.briarproject.bramble.test.BrambleJavaIntegrationTestComponent; import org.briarproject.bramble.test.BrambleTestCase; import org.briarproject.bramble.test.DaggerBrambleJavaIntegrationTestComponent; @@ -36,6 +38,8 @@ import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT; import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory; import static org.briarproject.bramble.test.TestUtils.getTestDirectory; import static org.briarproject.bramble.test.TestUtils.isOptionalTestEnabled; @@ -115,6 +119,9 @@ public class BridgeTest extends BrambleTestCase { LocationUtils locationUtils = () -> "US"; SocketFactory torSocketFactory = SocketFactory.getDefault(); + TorPorts torPorts = + new TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT); + CircumventionProvider bridgeProvider = new CircumventionProvider() { @Override public boolean isTorProbablyBlocked(String countryCode) { @@ -138,7 +145,7 @@ public class BridgeTest extends BrambleTestCase { }; factory = new UnixTorPluginFactory(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, eventBus, torSocketFactory, - backoffFactory, resourceProvider, bridgeProvider, + torPorts, backoffFactory, resourceProvider, bridgeProvider, batteryManager, clock, torDir); } 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 2b059fa50..164bf87a3 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 @@ -23,6 +23,8 @@ 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.plugin.TorPorts; +import org.briarproject.bramble.plugin.TorPortsImpl; import org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPluginFactory; import org.briarproject.bramble.plugin.file.AndroidRemovableDrivePluginFactory; import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory; @@ -74,6 +76,8 @@ import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; @@ -148,6 +152,12 @@ public class AppModule { return new AndroidDatabaseConfig(dbDir, keyDir, keyStrengthener); } + @Provides + @Singleton + TorPorts provideTorPorts() { + return new TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT); + } + @Provides @Singleton @TorDirectory 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 e78797bb2..0f285faad 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 @@ -7,6 +7,8 @@ import org.briarproject.bramble.account.AccountModule import org.briarproject.bramble.api.FeatureFlags import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.plugin.PluginConfig +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT import org.briarproject.bramble.api.plugin.TorDirectory import org.briarproject.bramble.api.plugin.TransportId import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory @@ -14,6 +16,8 @@ import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory import org.briarproject.bramble.battery.DefaultBatteryManagerModule import org.briarproject.bramble.event.DefaultEventExecutorModule import org.briarproject.bramble.network.JavaNetworkModule +import org.briarproject.bramble.plugin.TorPorts +import org.briarproject.bramble.plugin.TorPortsImpl import org.briarproject.bramble.plugin.tor.CircumventionModule import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory import org.briarproject.bramble.socks.SocksModule @@ -67,6 +71,12 @@ internal class HeadlessModule(private val appDir: File) { return HeadlessDatabaseConfig(dbDir, keyDir) } + @Provides + @Singleton + fun provideTorPorts(): TorPorts { + return TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT) + } + @Provides @TorDirectory internal fun provideTorDirectory(): File { diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt index 67171a977..a2be02579 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt @@ -6,11 +6,15 @@ import dagger.Provides import org.briarproject.bramble.account.AccountModule import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.plugin.PluginConfig +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT 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.event.DefaultEventExecutorModule import org.briarproject.bramble.network.JavaNetworkModule +import org.briarproject.bramble.plugin.TorPorts +import org.briarproject.bramble.plugin.TorPortsImpl import org.briarproject.bramble.plugin.tor.CircumventionModule import org.briarproject.bramble.socks.SocksModule import org.briarproject.bramble.system.ClockModule @@ -64,6 +68,12 @@ internal class HeadlessTestModule(private val appDir: File) { return HeadlessDatabaseConfig(dbDir, keyDir) } + @Provides + @Singleton + fun provideTorPorts(): TorPorts { + return TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT) + } + @Provides @Singleton internal fun providePluginConfig(): PluginConfig { From bf091ef8547c25b5065eea9114931ebf88562c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Sat, 16 Oct 2021 14:40:40 +0200 Subject: [PATCH 2/4] Use different Tor ports for regular and debug builds --- .../java/org/briarproject/briar/android/AppModule.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 164bf87a3..284091802 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 @@ -155,7 +155,12 @@ public class AppModule { @Provides @Singleton TorPorts provideTorPorts() { - return new TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT); + if (!IS_DEBUG_BUILD) { + return new TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT); + } else { + return new TorPortsImpl(DEFAULT_SOCKS_PORT + 2, + DEFAULT_CONTROL_PORT + 2); + } } @Provides From a1f9e80e120a258287500e08d5135c81a0a1a878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Wed, 3 Nov 2021 15:43:01 +0100 Subject: [PATCH 3/4] Inject Tor ports via annotated int parameters --- .../bramble/plugin/tor/AndroidTorPlugin.java | 10 +++---- .../plugin/tor/AndroidTorPluginFactory.java | 19 +++++++----- .../bramble/api/plugin/TorControlPort.java | 20 +++++++++++++ .../bramble/api/plugin/TorSocksPort.java | 20 +++++++++++++ .../briarproject/bramble/plugin/TorPorts.java | 12 -------- .../bramble/plugin/TorPortsImpl.java | 22 -------------- .../bramble/plugin/tor/TorPlugin.java | 21 ++++++++------ .../bramble/socks/SocksModule.java | 6 ++-- .../bramble/plugin/tor/JavaTorPlugin.java | 11 +++---- .../bramble/plugin/tor/UnixTorPlugin.java | 11 +++---- .../plugin/tor/UnixTorPluginFactory.java | 19 +++++++----- .../bramble/plugin/tor/BridgeTest.java | 10 ++----- .../briarproject/briar/android/AppModule.java | 29 +++++++++++++------ .../briar/headless/HeadlessModule.kt | 18 +++++++----- .../briar/headless/HeadlessTestModule.kt | 14 +++++---- 15 files changed, 137 insertions(+), 105 deletions(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorControlPort.java create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorSocksPort.java delete mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java delete mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java 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 a9aff29b0..d8933d101 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 @@ -16,7 +16,6 @@ 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.plugin.TorPorts; import org.briarproject.bramble.util.AndroidUtils; import java.io.File; @@ -60,7 +59,6 @@ class AndroidTorPlugin extends TorPlugin { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, - TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -72,12 +70,14 @@ class AndroidTorPlugin extends TorPlugin { String architecture, long maxLatency, int maxIdleTime, - File torDirectory) { + File torDirectory, + int torSocksPort, + int torControlPort) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, - torSocketFactory, torPorts, clock, resourceProvider, + torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, maxLatency, - maxIdleTime, torDirectory); + maxIdleTime, torDirectory, torSocksPort, torControlPort); this.app = app; wakeLock = wakeLockManager.createWakeLock("TorPlugin"); String nativeLibDir = app.getApplicationInfo().nativeLibraryDir; 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 a52926d26..765d9b703 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 @@ -11,7 +11,9 @@ 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.TorControlPort; import org.briarproject.bramble.api.plugin.TorDirectory; +import org.briarproject.bramble.api.plugin.TorSocksPort; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; @@ -20,7 +22,6 @@ 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.TorPorts; import org.briarproject.bramble.util.AndroidUtils; import java.io.File; @@ -50,7 +51,6 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { private final LocationUtils locationUtils; private final EventBus eventBus; private final SocketFactory torSocketFactory; - private final TorPorts torPorts; private final BackoffFactory backoffFactory; private final ResourceProvider resourceProvider; private final CircumventionProvider circumventionProvider; @@ -58,6 +58,8 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { private final AndroidWakeLockManager wakeLockManager; private final Clock clock; private final File torDirectory; + private int torSocksPort; + private int torControlPort; @Inject AndroidTorPluginFactory(@IoExecutor Executor ioExecutor, @@ -67,14 +69,15 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, - TorPorts torPorts, BackoffFactory backoffFactory, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, BatteryManager batteryManager, AndroidWakeLockManager wakeLockManager, Clock clock, - @TorDirectory File torDirectory) { + @TorDirectory File torDirectory, + @TorSocksPort int torSocksPort, + @TorControlPort int torControlPort) { this.ioExecutor = ioExecutor; this.wakefulIoExecutor = wakefulIoExecutor; this.app = app; @@ -82,7 +85,6 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { this.locationUtils = locationUtils; this.eventBus = eventBus; this.torSocketFactory = torSocketFactory; - this.torPorts = torPorts; this.backoffFactory = backoffFactory; this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; @@ -90,6 +92,8 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { this.wakeLockManager = wakeLockManager; this.clock = clock; this.torDirectory = torDirectory; + this.torSocksPort = torSocksPort; + this.torControlPort = torControlPort; } @Override @@ -134,10 +138,11 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { TorRendezvousCrypto torRendezvousCrypto = new TorRendezvousCryptoImpl(); AndroidTorPlugin plugin = new AndroidTorPlugin(ioExecutor, wakefulIoExecutor, app, networkManager, locationUtils, - torSocketFactory, torPorts, clock, resourceProvider, + torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, wakeLockManager, backoff, torRendezvousCrypto, callback, architecture, - MAX_LATENCY, MAX_IDLE_TIME, torDirectory); + MAX_LATENCY, MAX_IDLE_TIME, torDirectory, torSocksPort, + torControlPort); eventBus.addListener(plugin); return plugin; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorControlPort.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorControlPort.java new file mode 100644 index 000000000..4293e4048 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorControlPort.java @@ -0,0 +1,20 @@ +package org.briarproject.bramble.api.plugin; + +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 control port for the Tor plugin. + */ +@Qualifier +@Target({FIELD, METHOD, PARAMETER}) +@Retention(RUNTIME) +public @interface TorControlPort { +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorSocksPort.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorSocksPort.java new file mode 100644 index 000000000..1441e41ae --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorSocksPort.java @@ -0,0 +1,20 @@ +package org.briarproject.bramble.api.plugin; + +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 socks port for the Tor plugin. + */ +@Qualifier +@Target({FIELD, METHOD, PARAMETER}) +@Retention(RUNTIME) +public @interface TorSocksPort { +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java deleted file mode 100644 index 0dd9eb9ad..000000000 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPorts.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.briarproject.bramble.plugin; - -/** - * Interface used for injecting the tor ports. - */ -public interface TorPorts { - - int getSocksPort(); - - int getControlPort(); - -} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java deleted file mode 100644 index 83a3dc68b..000000000 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.briarproject.bramble.plugin; - -public class TorPortsImpl implements TorPorts { - - private int socksPort; - private int controlPort; - - public TorPortsImpl(int socksPort, int controlPort) { - this.socksPort = socksPort; - this.controlPort = controlPort; - } - - @Override - public int getSocksPort() { - return socksPort; - } - - @Override - public int getControlPort() { - return controlPort; - } -} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 128bf67c1..15928fb35 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -33,7 +33,6 @@ import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent; 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.plugin.TorPorts; import java.io.ByteArrayInputStream; import java.io.EOFException; @@ -124,7 +123,6 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { private final NetworkManager networkManager; private final LocationUtils locationUtils; private final SocketFactory torSocketFactory; - private final TorPorts torPorts; private final Clock clock; private final BatteryManager batteryManager; private final Backoff backoff; @@ -134,8 +132,11 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { private final CircumventionProvider circumventionProvider; private final ResourceProvider resourceProvider; private final long maxLatency; - private final int maxIdleTime, socketTimeout; + private final int maxIdleTime; + private final int socketTimeout; private final File torDirectory, geoIpFile, configFile; + private int torSocksPort; + private int torControlPort; private final File doneFile, cookieFile; private final AtomicBoolean used = new AtomicBoolean(false); @@ -154,7 +155,6 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, - TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -165,13 +165,14 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { String architecture, long maxLatency, int maxIdleTime, - File torDirectory) { + File torDirectory, + int torSocksPort, + int torControlPort) { this.ioExecutor = ioExecutor; this.wakefulIoExecutor = wakefulIoExecutor; this.networkManager = networkManager; this.locationUtils = locationUtils; this.torSocketFactory = torSocketFactory; - this.torPorts = torPorts; this.clock = clock; this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; @@ -186,6 +187,8 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { socketTimeout = Integer.MAX_VALUE; else socketTimeout = maxIdleTime * 2; this.torDirectory = torDirectory; + this.torSocksPort = torSocksPort; + this.torControlPort = torControlPort; geoIpFile = new File(torDirectory, "geoip"); configFile = new File(torDirectory, "torrc"); doneFile = new File(torDirectory, "done"); @@ -291,7 +294,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { } try { // Open a control connection and authenticate using the cookie file - controlSocket = new Socket("127.0.0.1", torPorts.getControlPort()); + controlSocket = new Socket("127.0.0.1", torControlPort); controlConnection = new TorControlConnection(controlSocket); controlConnection.authenticate(read(cookieFile)); // Tell Tor to exit when the control connection is closed @@ -396,12 +399,12 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { private InputStream getTorrc() { StringBuilder strb = new StringBuilder(); - append(strb, "ControlPort", torPorts.getControlPort()); + append(strb, "ControlPort", torControlPort); append(strb, "CookieAuthentication", 1); append(strb, "DisableNetwork", 1); append(strb, "RunAsDaemon", 1); append(strb, "SafeSocks", 1); - append(strb, "SocksPort", torPorts.getSocksPort()); + append(strb, "SocksPort", torSocksPort); return new ByteArrayInputStream(strb.toString().getBytes()); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java index 9706c8e67..c74666884 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksModule.java @@ -1,6 +1,6 @@ package org.briarproject.bramble.socks; -import org.briarproject.bramble.plugin.TorPorts; +import org.briarproject.bramble.api.plugin.TorSocksPort; import java.net.InetSocketAddress; @@ -16,9 +16,9 @@ import static org.briarproject.bramble.api.plugin.TorConstants.EXTRA_SOCKET_TIME public class SocksModule { @Provides - SocketFactory provideTorSocketFactory(TorPorts torPorts) { + SocketFactory provideTorSocketFactory(@TorSocksPort int torSocksPort) { InetSocketAddress proxy = new InetSocketAddress("127.0.0.1", - torPorts.getSocksPort()); + torSocksPort); return new SocksSocketFactory(proxy, CONNECT_TO_PROXY_TIMEOUT, EXTRA_SOCKET_TIMEOUT); } diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java index 1327f3b83..dcc0c9f00 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java @@ -8,7 +8,6 @@ import org.briarproject.bramble.api.plugin.PluginCallback; 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.plugin.TorPorts; import java.io.File; import java.net.URI; @@ -26,7 +25,6 @@ abstract class JavaTorPlugin extends TorPlugin { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, - TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -37,12 +35,15 @@ abstract class JavaTorPlugin extends TorPlugin { String architecture, long maxLatency, int maxIdleTime, - File torDirectory) { + File torDirectory, + int torSocksPort, + int torControlPort) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, - torSocketFactory, torPorts, clock, resourceProvider, + torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, - maxLatency, maxIdleTime, torDirectory); + maxLatency, maxIdleTime, torDirectory, torSocksPort, + torControlPort); } @Override diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java index 8b36cd2da..c68dc0130 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java @@ -11,7 +11,6 @@ import org.briarproject.bramble.api.plugin.PluginCallback; 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.plugin.TorPorts; import java.io.File; import java.util.concurrent.Executor; @@ -26,7 +25,6 @@ class UnixTorPlugin extends JavaTorPlugin { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, - TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -37,12 +35,15 @@ class UnixTorPlugin extends JavaTorPlugin { String architecture, long maxLatency, int maxIdleTime, - File torDirectory) { + File torDirectory, + int torSocksPort, + int torControlPort) { super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, - torSocketFactory, torPorts, clock, resourceProvider, + torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, - maxLatency, maxIdleTime, torDirectory); + maxLatency, maxIdleTime, torDirectory, torSocksPort, + torControlPort); } @Override 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 ceeb596c5..b2986d6e4 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 @@ -9,7 +9,9 @@ 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.TorControlPort; import org.briarproject.bramble.api.plugin.TorDirectory; +import org.briarproject.bramble.api.plugin.TorSocksPort; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; @@ -17,7 +19,6 @@ 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.TorPorts; import java.io.File; import java.util.concurrent.Executor; @@ -49,13 +50,14 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { private final LocationUtils locationUtils; private final EventBus eventBus; private final SocketFactory torSocketFactory; - private final TorPorts torPorts; private final BackoffFactory backoffFactory; private final ResourceProvider resourceProvider; private final CircumventionProvider circumventionProvider; private final BatteryManager batteryManager; private final Clock clock; private final File torDirectory; + private int torSocksPort; + private int torControlPort; @Inject UnixTorPluginFactory(@IoExecutor Executor ioExecutor, @@ -64,26 +66,28 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, - TorPorts torPorts, BackoffFactory backoffFactory, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, BatteryManager batteryManager, Clock clock, - @TorDirectory File torDirectory) { + @TorDirectory File torDirectory, + @TorSocksPort int torSocksPort, + @TorControlPort int torControlPort) { this.ioExecutor = ioExecutor; this.wakefulIoExecutor = wakefulIoExecutor; this.networkManager = networkManager; this.locationUtils = locationUtils; this.eventBus = eventBus; this.torSocketFactory = torSocketFactory; - this.torPorts = torPorts; this.backoffFactory = backoffFactory; this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; this.batteryManager = batteryManager; this.clock = clock; this.torDirectory = torDirectory; + this.torSocksPort = torSocksPort; + this.torControlPort = torControlPort; } @Override @@ -126,10 +130,11 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { MAX_POLLING_INTERVAL, BACKOFF_BASE); TorRendezvousCrypto torRendezvousCrypto = new TorRendezvousCryptoImpl(); UnixTorPlugin plugin = new UnixTorPlugin(ioExecutor, wakefulIoExecutor, - networkManager, locationUtils, torSocketFactory, torPorts, + networkManager, locationUtils, torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, - MAX_LATENCY, MAX_IDLE_TIME, torDirectory); + MAX_LATENCY, MAX_IDLE_TIME, torDirectory, torSocksPort, + torControlPort); eventBus.addListener(plugin); return plugin; } diff --git a/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java b/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java index 4ce0766cd..a38ae29f8 100644 --- a/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java +++ b/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java @@ -11,8 +11,6 @@ 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.TorPorts; -import org.briarproject.bramble.plugin.TorPortsImpl; import org.briarproject.bramble.test.BrambleJavaIntegrationTestComponent; import org.briarproject.bramble.test.BrambleTestCase; import org.briarproject.bramble.test.DaggerBrambleJavaIntegrationTestComponent; @@ -119,9 +117,6 @@ public class BridgeTest extends BrambleTestCase { LocationUtils locationUtils = () -> "US"; SocketFactory torSocketFactory = SocketFactory.getDefault(); - TorPorts torPorts = - new TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT); - CircumventionProvider bridgeProvider = new CircumventionProvider() { @Override public boolean isTorProbablyBlocked(String countryCode) { @@ -145,8 +140,9 @@ public class BridgeTest extends BrambleTestCase { }; factory = new UnixTorPluginFactory(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, eventBus, torSocketFactory, - torPorts, backoffFactory, resourceProvider, bridgeProvider, - batteryManager, clock, torDir); + backoffFactory, resourceProvider, bridgeProvider, + batteryManager, clock, torDir, DEFAULT_SOCKS_PORT, + DEFAULT_CONTROL_PORT); } @After 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 284091802..787cb3989 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 @@ -18,13 +18,13 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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.TorControlPort; import org.briarproject.bramble.api.plugin.TorDirectory; +import org.briarproject.bramble.api.plugin.TorSocksPort; 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.plugin.TorPorts; -import org.briarproject.bramble.plugin.TorPortsImpl; import org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPluginFactory; import org.briarproject.bramble.plugin.file.AndroidRemovableDrivePluginFactory; import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory; @@ -154,20 +154,31 @@ public class AppModule { @Provides @Singleton - TorPorts provideTorPorts() { + @TorDirectory + File provideTorDirectory(Application app) { + return app.getDir("tor", MODE_PRIVATE); + } + + @Provides + @Singleton + @TorSocksPort + int provideTorSocksPort() { if (!IS_DEBUG_BUILD) { - return new TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT); + return DEFAULT_SOCKS_PORT; } else { - return new TorPortsImpl(DEFAULT_SOCKS_PORT + 2, - DEFAULT_CONTROL_PORT + 2); + return DEFAULT_SOCKS_PORT + 2; } } @Provides @Singleton - @TorDirectory - File provideTorDirectory(Application app) { - return app.getDir("tor", MODE_PRIVATE); + @TorControlPort + int provideTorControlPort() { + if (!IS_DEBUG_BUILD) { + return DEFAULT_CONTROL_PORT; + } else { + return DEFAULT_CONTROL_PORT + 2; + } } @Provides 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 0f285faad..5e5b3a00e 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 @@ -9,15 +9,15 @@ import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.plugin.PluginConfig import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT +import org.briarproject.bramble.api.plugin.TorControlPort import org.briarproject.bramble.api.plugin.TorDirectory +import org.briarproject.bramble.api.plugin.TorSocksPort 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.battery.DefaultBatteryManagerModule import org.briarproject.bramble.event.DefaultEventExecutorModule import org.briarproject.bramble.network.JavaNetworkModule -import org.briarproject.bramble.plugin.TorPorts -import org.briarproject.bramble.plugin.TorPortsImpl import org.briarproject.bramble.plugin.tor.CircumventionModule import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory import org.briarproject.bramble.socks.SocksModule @@ -71,18 +71,20 @@ internal class HeadlessModule(private val appDir: File) { return HeadlessDatabaseConfig(dbDir, keyDir) } - @Provides - @Singleton - fun provideTorPorts(): TorPorts { - return TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT) - } - @Provides @TorDirectory internal fun provideTorDirectory(): File { return File(appDir, "tor") } + @Provides + @TorSocksPort + internal fun provideTorSocksPort(): Int = DEFAULT_SOCKS_PORT + + @Provides + @TorControlPort + internal fun provideTorControlPort(): Int = DEFAULT_CONTROL_PORT + @Provides @Singleton internal fun providePluginConfig(tor: UnixTorPluginFactory): PluginConfig { diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt index a2be02579..b2be6db86 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt @@ -8,13 +8,13 @@ import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.plugin.PluginConfig import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT +import org.briarproject.bramble.api.plugin.TorControlPort +import org.briarproject.bramble.api.plugin.TorSocksPort 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.event.DefaultEventExecutorModule import org.briarproject.bramble.network.JavaNetworkModule -import org.briarproject.bramble.plugin.TorPorts -import org.briarproject.bramble.plugin.TorPortsImpl import org.briarproject.bramble.plugin.tor.CircumventionModule import org.briarproject.bramble.socks.SocksModule import org.briarproject.bramble.system.ClockModule @@ -69,10 +69,12 @@ internal class HeadlessTestModule(private val appDir: File) { } @Provides - @Singleton - fun provideTorPorts(): TorPorts { - return TorPortsImpl(DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT) - } + @TorSocksPort + internal fun provideTorSocksPort(): Int = DEFAULT_SOCKS_PORT + + @Provides + @TorControlPort + internal fun provideTorControlPort(): Int = DEFAULT_CONTROL_PORT @Provides @Singleton From e0f36ade92e136d00f5c3c8a0317e80592969bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Wed, 3 Nov 2021 16:21:13 +0100 Subject: [PATCH 4/4] Address review feedback --- .../bramble/plugin/tor/TorPlugin.java | 24 ++++++++----------- .../plugin/tor/UnixTorPluginFactory.java | 4 ++-- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 15928fb35..3d602bd82 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -45,6 +45,7 @@ import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -69,7 +70,6 @@ import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static net.freehaven.tor.control.TorControlCommands.HS_ADDRESS; import static net.freehaven.tor.control.TorControlCommands.HS_PRIVKEY; -import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.DISABLED; import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING; @@ -397,18 +397,6 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { return zin; } - private InputStream getTorrc() { - StringBuilder strb = new StringBuilder(); - append(strb, "ControlPort", torControlPort); - append(strb, "CookieAuthentication", 1); - append(strb, "DisableNetwork", 1); - append(strb, "RunAsDaemon", 1); - append(strb, "SafeSocks", 1); - append(strb, "SocksPort", torSocksPort); - - return new ByteArrayInputStream(strb.toString().getBytes()); - } - private static void append(StringBuilder strb, String name, int value) { strb.append(name); strb.append(" "); @@ -417,7 +405,15 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { } private InputStream getConfigInputStream() { - return requireNonNull(getTorrc()); + StringBuilder strb = new StringBuilder(); + append(strb, "ControlPort", torControlPort); + append(strb, "CookieAuthentication", 1); + append(strb, "DisableNetwork", 1); + append(strb, "RunAsDaemon", 1); + append(strb, "SafeSocks", 1); + append(strb, "SocksPort", torSocksPort); + return new ByteArrayInputStream( + strb.toString().getBytes(Charset.forName("UTF-8"))); } private void listFiles(File f) { 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 b2986d6e4..4101fa394 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 @@ -130,8 +130,8 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { MAX_POLLING_INTERVAL, BACKOFF_BASE); TorRendezvousCrypto torRendezvousCrypto = new TorRendezvousCryptoImpl(); UnixTorPlugin plugin = new UnixTorPlugin(ioExecutor, wakefulIoExecutor, - networkManager, locationUtils, torSocketFactory, - clock, resourceProvider, circumventionProvider, batteryManager, + networkManager, locationUtils, torSocketFactory, clock, + resourceProvider, circumventionProvider, batteryManager, backoff, torRendezvousCrypto, callback, architecture, MAX_LATENCY, MAX_IDLE_TIME, torDirectory, torSocksPort, torControlPort);