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 b90e1b564bc7c046297c6028a9f3d756c80495d6..b9407eb64c29ed0a0efbaf55a99fc53740b82563 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,9 +10,6 @@ public interface TorConstants { String PROP_ONION_V2 = "onion"; String PROP_ONION_V3 = "onion3"; - int SOCKS_PORT = 59050; - int 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/PluginModule.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginModule.java index ff5e2299a7c47c91673b38ba638385efbced428f..934500ffe65c1436b22e2ffe7260e9a6eecf0416 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/PluginModule.java @@ -42,4 +42,10 @@ public class PluginModule { if (config.shouldPoll()) eventBus.addListener(poller); return poller; } + + @Provides + @Singleton + TorPorts provideTorPorts() { + return new TorPortsImpl(); + } } 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 0000000000000000000000000000000000000000..0dd9eb9ade5c297de50b6f6e0ad67d61ef230953 --- /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 0000000000000000000000000000000000000000..31fae664f44f9dfe993a7348fe96bf75f353d806 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/TorPortsImpl.java @@ -0,0 +1,28 @@ +package org.briarproject.bramble.plugin; + +public class TorPortsImpl implements TorPorts { + + private static int currentPort = 59050; + + private static int nextPort() { + return currentPort++; + } + + private int socksPort; + private int controlPort; + + public TorPortsImpl() { + socksPort = nextPort(); + controlPort = nextPort(); + } + + @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 3bc4551314a91f35a1ba10c1106c93eaf83e187c..324bfcb4619d61ff47be84c7f1754f74de691125 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,6 +33,7 @@ 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; @@ -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; @@ -151,6 +153,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, + TorPorts torPorts, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -167,6 +170,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; @@ -279,7 +283,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", controlPort); + 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 @@ -385,30 +389,18 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { return zin; } - private int socksPort; - private int controlPort; - private InputStream getTorrc() { - socksPort = nextPort(); - controlPort = nextPort(); - StringBuilder strb = new StringBuilder(); - append(strb, "ControlPort", controlPort); + append(strb, "ControlPort", torPorts.getControlPort()); append(strb, "CookieAuthentication", 1); append(strb, "DisableNetwork", 1); append(strb, "RunAsDaemon", 1); append(strb, "SafeSocks", 1); - append(strb, "SocksPort", socksPort); + append(strb, "SocksPort", torPorts.getSocksPort()); return new ByteArrayInputStream(strb.toString().getBytes()); } - private static int currentPort = 59050; - - private static int nextPort() { - return currentPort++; - } - private static void append(StringBuilder strb, String name, int value) { strb.append(name); strb.append(" "); 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 be342f0110bc34d6353f54948cccd3945c798a1c..9706c8e67f7dec4a527338bbab01fc3eb8f040df 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-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 d9d5ddf89a051c41c0c91adc3a0d338c432e8195..9e21819f6535ac2a8ee74a21f041c40a1dfb58fb 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 f7ee9134eb6c874dc83de5f4e8a7842963d0a353..17bcdf784041fb2e0d3d6a88f1834e942b7e4631 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 35fe3cc90663d2182e2b110adf6d6f8d9b6b8b1b..a66c974d9203388365a3c72e0c9eb00a304c5d02 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 @@ -16,6 +16,7 @@ import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; 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; @@ -46,6 +47,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; @@ -60,6 +62,7 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, + TorPorts torPorts, BackoffFactory backoffFactory, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -72,6 +75,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; @@ -109,8 +113,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);