From 8e6cd12f0784f4fe62155348cc0b795aae62d7e0 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 24 Aug 2018 12:46:08 -0300 Subject: [PATCH] LinuxTorPlugin: Address review comments --- .../bramble/system/AndroidResourceProvider.java | 12 +++++++++--- .../bramble/api/system/ResourceProvider.java | 2 +- .../briarproject/bramble/plugin/tor/TorPlugin.java | 11 +++++++++-- bramble-j2se/build.gradle | 2 +- .../bramble/api/ConfigurationManager.java | 9 --------- .../bramble/network/JavaNetworkManager.java | 8 ++++---- .../{JavaTorPlugin.java => LinuxTorPlugin.java} | 14 +++++++++----- ...uginFactory.java => LinuxTorPluginFactory.java} | 11 +++++------ .../bramble/system/JavaResourceProvider.java | 5 +++-- bramble-j2se/witness.gradle | 1 + 10 files changed, 42 insertions(+), 33 deletions(-) delete mode 100644 bramble-j2se/src/main/java/org/briarproject/bramble/api/ConfigurationManager.java rename bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/{JavaTorPlugin.java => LinuxTorPlugin.java} (79%) rename bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/{JavaTorPluginFactory.java => LinuxTorPluginFactory.java} (91%) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidResourceProvider.java b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidResourceProvider.java index f3dbdc6b8..1a87d704f 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidResourceProvider.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidResourceProvider.java @@ -22,10 +22,16 @@ class AndroidResourceProvider implements ResourceProvider { } @Override - public InputStream getResourceInputStream(String name) { + public InputStream getResourceInputStream(String name, String extension) { Resources res = appContext.getResources(); - if (name.endsWith(".zip")) name = name.substring(0, name.length() - 4); - int resId = res.getIdentifier(name, "raw", appContext.getPackageName()); + String fileName; + if (extension.equals(".zip")) { + fileName = name; + } else { + fileName = name + extension; + } + int resId = + res.getIdentifier(fileName, "raw", appContext.getPackageName()); return res.openRawResource(resId); } } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/system/ResourceProvider.java b/bramble-api/src/main/java/org/briarproject/bramble/api/system/ResourceProvider.java index e0bbc63d4..e4bf0b63c 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/system/ResourceProvider.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/system/ResourceProvider.java @@ -7,5 +7,5 @@ import java.io.InputStream; @NotNullByDefault public interface ResourceProvider { - InputStream getResourceInputStream(String name); + InputStream getResourceInputStream(String name, String extension); } 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 b1028d0b6..f0540ad0c 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 @@ -166,6 +166,12 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { @Override public void start() throws PluginException { if (used.getAndSet(true)) throw new IllegalStateException(); + if (!torDirectory.exists()) { + if (!torDirectory.mkdirs()) { + LOG.warning("Could not create Tor directory."); + throw new PluginException(); + } + } // Install or update the assets if necessary if (!assetsAreUpToDate()) installAssets(); if (cookieFile.exists() && !cookieFile.delete()) @@ -289,14 +295,15 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { if (LOG.isLoggable(INFO)) LOG.info("Installing Tor binary for " + architecture); InputStream in = resourceProvider - .getResourceInputStream("tor_" + architecture + ".zip"); + .getResourceInputStream("tor_" + architecture, ".zip"); ZipInputStream zin = new ZipInputStream(in); if (zin.getNextEntry() == null) throw new IOException(); return zin; } private InputStream getGeoIpInputStream() throws IOException { - InputStream in = resourceProvider.getResourceInputStream("geoip.zip"); + InputStream in = resourceProvider.getResourceInputStream("geoip", + ".zip"); ZipInputStream zin = new ZipInputStream(in); if (zin.getNextEntry() == null) throw new IOException(); return zin; diff --git a/bramble-j2se/build.gradle b/bramble-j2se/build.gradle index 6f6e09d51..4cb436718 100644 --- a/bramble-j2se/build.gradle +++ b/bramble-j2se/build.gradle @@ -16,7 +16,7 @@ dependencies { implementation fileTree(dir: 'libs', include: '*.jar') implementation 'net.java.dev.jna:jna:4.4.0' implementation 'net.java.dev.jna:jna-platform:4.4.0' - tor 'org.briarproject:tor-linux:0.2.9.16@zip' + tor 'org.briarproject:tor:0.2.9.16@zip' apt 'com.google.dagger:dagger-compiler:2.0.2' diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/api/ConfigurationManager.java b/bramble-j2se/src/main/java/org/briarproject/bramble/api/ConfigurationManager.java deleted file mode 100644 index e49831dbb..000000000 --- a/bramble-j2se/src/main/java/org/briarproject/bramble/api/ConfigurationManager.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.briarproject.bramble.api; - -import java.io.File; - -public interface ConfigurationManager { - - File getAppDir(); - -} diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java b/bramble-j2se/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java index 926fe8ed9..3eccaebf5 100644 --- a/bramble-j2se/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java +++ b/bramble-j2se/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java @@ -16,6 +16,7 @@ import java.util.logging.Logger; import javax.inject.Inject; import static java.net.NetworkInterface.getNetworkInterfaces; +import static java.util.Collections.list; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.util.LogUtils.logException; @@ -49,13 +50,12 @@ class JavaNetworkManager implements NetworkManager, Service { try { Enumeration interfaces = getNetworkInterfaces(); if (interfaces != null) { - while (interfaces.hasMoreElements()) { - NetworkInterface i = interfaces.nextElement(); + for (NetworkInterface i : list(interfaces)) { if (i.isLoopback()) continue; - if (i.isUp()) { + if (i.isUp() && i.getInetAddresses().hasMoreElements()) { if (LOG.isLoggable(INFO)) { LOG.info("Interface " + i.getDisplayName() + - " is up."); + " is up with at least one address."); } connected = true; break; diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPlugin.java similarity index 79% rename from bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPlugin.java index 6dfadfe73..d9905c1df 100644 --- a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPlugin.java +++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPlugin.java @@ -12,14 +12,15 @@ import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.security.CodeSource; import java.util.concurrent.Executor; import javax.net.SocketFactory; @NotNullByDefault -class JavaTorPlugin extends TorPlugin { +class LinuxTorPlugin extends TorPlugin { - JavaTorPlugin(Executor ioExecutor, NetworkManager networkManager, + LinuxTorPlugin(Executor ioExecutor, NetworkManager networkManager, LocationUtils locationUtils, SocketFactory torSocketFactory, Clock clock, ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, Backoff backoff, @@ -43,10 +44,13 @@ class JavaTorPlugin extends TorPlugin { @Override protected long getLastUpdateTime() { + CodeSource codeSource = + getClass().getProtectionDomain().getCodeSource(); + if (codeSource == null) throw new AssertionError("CodeSource null"); try { - URI path = getClass().getProtectionDomain().getCodeSource() - .getLocation().toURI(); - return new File(path).lastModified(); + URI path = codeSource.getLocation().toURI(); + File file = new File(path); + return file.lastModified(); } catch (URISyntaxException e) { throw new AssertionError(e); } diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPluginFactory.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPluginFactory.java similarity index 91% rename from bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPluginFactory.java rename to bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPluginFactory.java index 7b5f79bec..466399a57 100644 --- a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/JavaTorPluginFactory.java +++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/tor/LinuxTorPluginFactory.java @@ -25,10 +25,10 @@ import static org.briarproject.bramble.util.OsUtils.isLinux; @Immutable @NotNullByDefault -public class JavaTorPluginFactory implements DuplexPluginFactory { +public class LinuxTorPluginFactory implements DuplexPluginFactory { private static final Logger LOG = - Logger.getLogger(JavaTorPluginFactory.class.getName()); + Logger.getLogger(LinuxTorPluginFactory.class.getName()); private static final int MAX_LATENCY = 30 * 1000; // 30 seconds private static final int MAX_IDLE_TIME = 30 * 1000; // 30 seconds @@ -47,7 +47,7 @@ public class JavaTorPluginFactory implements DuplexPluginFactory { private final Clock clock; private final File torDirectory; - public JavaTorPluginFactory(Executor ioExecutor, + public LinuxTorPluginFactory(Executor ioExecutor, NetworkManager networkManager, LocationUtils locationUtils, EventBus eventBus, SocketFactory torSocketFactory, BackoffFactory backoffFactory, ResourceProvider resourceProvider, @@ -92,9 +92,8 @@ public class JavaTorPluginFactory implements DuplexPluginFactory { Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL, MAX_POLLING_INTERVAL, BACKOFF_BASE); - if (!torDirectory.exists()) torDirectory.mkdirs(); - JavaTorPlugin plugin = - new JavaTorPlugin(ioExecutor, networkManager, locationUtils, + LinuxTorPlugin plugin = + new LinuxTorPlugin(ioExecutor, networkManager, locationUtils, torSocketFactory, clock, resourceProvider, circumventionProvider, backoff, callback, architecture, MAX_LATENCY, MAX_IDLE_TIME, torDirectory); diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/system/JavaResourceProvider.java b/bramble-j2se/src/main/java/org/briarproject/bramble/system/JavaResourceProvider.java index 7f58b3f7a..144bff2de 100644 --- a/bramble-j2se/src/main/java/org/briarproject/bramble/system/JavaResourceProvider.java +++ b/bramble-j2se/src/main/java/org/briarproject/bramble/system/JavaResourceProvider.java @@ -15,7 +15,8 @@ class JavaResourceProvider implements ResourceProvider { } @Override - public InputStream getResourceInputStream(String name) { - return this.getClass().getClassLoader().getResourceAsStream(name); + public InputStream getResourceInputStream(String name, String extension) { + return getClass().getClassLoader() + .getResourceAsStream(name + extension); } } diff --git a/bramble-j2se/witness.gradle b/bramble-j2se/witness.gradle index 9fab68416..945bdc09e 100644 --- a/bramble-j2se/witness.gradle +++ b/bramble-j2se/witness.gradle @@ -12,6 +12,7 @@ dependencyVerification { 'org.apache.ant:ant-launcher:1.9.4:ant-launcher-1.9.4.jar:7bccea20b41801ca17bcbc909a78c835d0f443f12d639c77bd6ae3d05861608d', 'org.apache.ant:ant:1.9.4:ant-1.9.4.jar:649ae0730251de07b8913f49286d46bba7b92d47c5f332610aa426c4f02161d8', 'org.beanshell:bsh:1.3.0:bsh-1.3.0.jar:9b04edc75d19db54f1b4e8b5355e9364384c6cf71eb0a1b9724c159d779879f8', + 'org.briarproject:tor:0.2.9.16:tor-0.2.9.16.zip:f33091ba414d6a952263981d9059b3d0a9093fd277ae887b3cdd02e8f1936558', 'org.hamcrest:hamcrest-core:1.3:hamcrest-core-1.3.jar:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9', 'org.hamcrest:hamcrest-library:1.3:hamcrest-library-1.3.jar:711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c', 'org.jmock:jmock-junit4:2.8.2:jmock-junit4-2.8.2.jar:f7ee4df4f7bd7b7f1cafad3b99eb74d579f109d5992ff625347352edb55e674c',