From bc352a2dc6f1e744bf6a200691be903e501cafba Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 23 Nov 2018 13:07:12 +0000 Subject: [PATCH] Enable Tor on Mac OS once binaries are available. --- ...LinuxTorPlugin.java => JavaTorPlugin.java} | 17 +------ .../bramble/plugin/tor/UnixTorPlugin.java | 47 +++++++++++++++++++ ...Factory.java => UnixTorPluginFactory.java} | 9 ++-- .../bramble/plugin/tor/BridgeTest.java | 6 +-- .../briar/headless/HeadlessModule.kt | 13 ++--- 5 files changed, 64 insertions(+), 28 deletions(-) rename bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/{LinuxTorPlugin.java => JavaTorPlugin.java} (81%) create mode 100644 bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java rename bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/{LinuxTorPluginFactory.java => UnixTorPluginFactory.java} (92%) diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java similarity index 81% rename from bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPlugin.java rename to bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java index 943702c79..75412fe55 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPlugin.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java @@ -10,7 +10,6 @@ import org.briarproject.bramble.api.system.LocationUtils; import org.briarproject.bramble.api.system.ResourceProvider; import java.io.File; -import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.security.CodeSource; @@ -19,9 +18,9 @@ import java.util.concurrent.Executor; import javax.net.SocketFactory; @NotNullByDefault -class LinuxTorPlugin extends TorPlugin { +abstract class JavaTorPlugin extends TorPlugin { - LinuxTorPlugin(Executor ioExecutor, NetworkManager networkManager, + JavaTorPlugin(Executor ioExecutor, NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, @@ -34,17 +33,6 @@ class LinuxTorPlugin extends TorPlugin { torDirectory); } - @Override - protected int getProcessId() { - try { - // Java 9: ProcessHandle.current().pid() - return Integer.parseInt( - new File("/proc/self").getCanonicalFile().getName()); - } catch (IOException e) { - throw new AssertionError(e); - } - } - @Override protected long getLastUpdateTime() { CodeSource codeSource = @@ -58,5 +46,4 @@ class LinuxTorPlugin extends TorPlugin { throw new AssertionError(e); } } - } 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 new file mode 100644 index 000000000..e084875bf --- /dev/null +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPlugin.java @@ -0,0 +1,47 @@ +package org.briarproject.bramble.plugin.tor; + +import com.sun.jna.Library; +import com.sun.jna.Native; + +import org.briarproject.bramble.api.battery.BatteryManager; +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.duplex.DuplexPluginCallback; +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.util.concurrent.Executor; + +import javax.net.SocketFactory; + +@NotNullByDefault +class UnixTorPlugin extends JavaTorPlugin { + + UnixTorPlugin(Executor ioExecutor, NetworkManager networkManager, + LocationUtils locationUtils, SocketFactory torSocketFactory, + Clock clock, ResourceProvider resourceProvider, + CircumventionProvider circumventionProvider, + BatteryManager batteryManager, Backoff backoff, + DuplexPluginCallback callback, String architecture, int maxLatency, + int maxIdleTime, File torDirectory) { + super(ioExecutor, networkManager, locationUtils, torSocketFactory, + clock, resourceProvider, circumventionProvider, batteryManager, + backoff, callback, architecture, maxLatency, maxIdleTime, + torDirectory); + } + + @Override + protected int getProcessId() { + return CLibrary.INSTANCE.getpid(); + } + + private interface CLibrary extends Library { + + CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class); + + int getpid(); + } +} diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPluginFactory.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java similarity index 92% rename from bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPluginFactory.java rename to bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java index 5bf4dfee2..2279ef07a 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPluginFactory.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/UnixTorPluginFactory.java @@ -22,14 +22,15 @@ import java.util.logging.Logger; import javax.annotation.concurrent.Immutable; import javax.net.SocketFactory; +import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.OsUtils.isLinux; @Immutable @NotNullByDefault -public class LinuxTorPluginFactory implements DuplexPluginFactory { +public class UnixTorPluginFactory implements DuplexPluginFactory { private static final Logger LOG = - Logger.getLogger(LinuxTorPluginFactory.class.getName()); + getLogger(UnixTorPluginFactory.class.getName()); private static final int MAX_LATENCY = 30 * 1000; // 30 seconds private static final int MAX_IDLE_TIME = 30 * 1000; // 30 seconds @@ -49,7 +50,7 @@ public class LinuxTorPluginFactory implements DuplexPluginFactory { private final Clock clock; private final File torDirectory; - public LinuxTorPluginFactory(Executor ioExecutor, + public UnixTorPluginFactory(Executor ioExecutor, NetworkManager networkManager, LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, BackoffFactory backoffFactory, ResourceProvider resourceProvider, @@ -95,7 +96,7 @@ public class LinuxTorPluginFactory implements DuplexPluginFactory { Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL, MAX_POLLING_INTERVAL, BACKOFF_BASE); - LinuxTorPlugin plugin = new LinuxTorPlugin(ioExecutor, networkManager, + UnixTorPlugin plugin = new UnixTorPlugin(ioExecutor, networkManager, locationUtils, torSocketFactory, clock, resourceProvider, circumventionProvider, batteryManager, backoff, callback, architecture, MAX_LATENCY, MAX_IDLE_TIME, torDirectory); 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 3901dd21d..1eaa8c07e 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 @@ -70,7 +70,7 @@ public class BridgeTest extends BrambleTestCase { private final File torDir = getTestDirectory(); private final String bridge; - private LinuxTorPluginFactory factory; + private UnixTorPluginFactory factory; public BridgeTest(String bridge) { this.bridge = bridge; @@ -108,7 +108,7 @@ public class BridgeTest extends BrambleTestCase { return singletonList(bridge); } }; - factory = new LinuxTorPluginFactory(ioExecutor, networkManager, + factory = new UnixTorPluginFactory(ioExecutor, networkManager, locationUtils, eventBus, torSocketFactory, backoffFactory, resourceProvider, bridgeProvider, batteryManager, clock, torDir); @@ -124,7 +124,7 @@ public class BridgeTest extends BrambleTestCase { DuplexPlugin duplexPlugin = factory.createPlugin(new TorPluginCallBack()); assertNotNull(duplexPlugin); - LinuxTorPlugin plugin = (LinuxTorPlugin) duplexPlugin; + UnixTorPlugin plugin = (UnixTorPlugin) duplexPlugin; LOG.warning("Testing " + bridge); try { 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 7bce4d7eb..be170446b 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 @@ -24,9 +24,10 @@ import org.briarproject.bramble.battery.DefaultBatteryManagerModule 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.LinuxTorPluginFactory +import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory import org.briarproject.bramble.system.JavaSystemModule import org.briarproject.bramble.util.OsUtils.isLinux +import org.briarproject.bramble.util.OsUtils.isMac import org.briarproject.bramble.util.StringUtils.fromHexString import org.briarproject.briar.headless.blogs.HeadlessBlogModule import org.briarproject.briar.headless.contact.HeadlessContactModule @@ -72,11 +73,11 @@ internal class HeadlessModule(private val appDir: File) { ): PluginConfig { val torDirectory = File(appDir, "tor") val duplex: List - if (isLinux()) { - val tor = LinuxTorPluginFactory( - ioExecutor, networkManager, locationUtils, eventBus, - torSocketFactory, backoffFactory, resourceProvider, circumventionProvider, - batteryManager, clock, torDirectory + if (isLinux() || isMac()) { + val tor = UnixTorPluginFactory( + ioExecutor, networkManager, locationUtils, eventBus, torSocketFactory, + backoffFactory, resourceProvider, circumventionProvider, batteryManager, clock, + torDirectory ) duplex = listOf(tor) } else {