From 428269b31244dffb0200cee9fe1d194fa592ea19 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 6 May 2021 16:47:11 +0100 Subject: [PATCH 1/5] Add removable drive plugin. --- .../api/plugin/RemovableDriveConstants.java | 6 ++ .../plugin/file/RemovableDrivePlugin.java | 96 +++++++++++++++++++ .../file/RemovableDrivePluginFactory.java | 36 +++++++ 3 files changed, 138 insertions(+) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java new file mode 100644 index 000000000..d9798721e --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/RemovableDriveConstants.java @@ -0,0 +1,6 @@ +package org.briarproject.bramble.api.plugin; + +public interface RemovableDriveConstants { + + TransportId ID = new TransportId("org.briarproject.bramble.drive"); +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java new file mode 100644 index 000000000..3cb3d6c98 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java @@ -0,0 +1,96 @@ +package org.briarproject.bramble.plugin.file; + +import org.briarproject.bramble.api.Pair; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.ConnectionHandler; +import org.briarproject.bramble.api.plugin.PluginCallback; +import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.properties.TransportProperties; + +import java.io.File; +import java.util.Collection; +import java.util.logging.Logger; + +import javax.annotation.concurrent.Immutable; + +import static java.util.logging.Level.INFO; +import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; +import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; + +@Immutable +@NotNullByDefault +class RemovableDrivePlugin extends FilePlugin { + + private static final Logger LOG = + getLogger(RemovableDrivePlugin.class.getName()); + + RemovableDrivePlugin(PluginCallback callback, int maxLatency) { + super(callback, maxLatency); + } + + @Override + protected void writerFinished(File f, boolean exception) { + if (LOG.isLoggable(INFO)) { + LOG.info("Writer finished, exception: " + exception); + } + } + + @Override + protected void readerFinished(File f, boolean exception, + boolean recognised) { + if (LOG.isLoggable(INFO)) { + LOG.info("Reader finished, exception: " + exception + + ", recognised: " + recognised); + } + // Try to delete the file if the read finished successfully + if (recognised && !exception && !f.delete()) { + LOG.info("Failed to delete recognised file"); + } + } + + @Override + public TransportId getId() { + return ID; + } + + @Override + public void start() { + } + + @Override + public void stop() { + } + + @Override + public State getState() { + return ACTIVE; + } + + @Override + public int getReasonsDisabled() { + return 0; + } + + @Override + public int getMaxIdleTime() { + // Unused for simplex transports + throw new UnsupportedOperationException(); + } + + @Override + public boolean shouldPoll() { + return false; + } + + @Override + public int getPollingInterval() { + throw new UnsupportedOperationException(); + } + + @Override + public void poll( + Collection> properties) { + throw new UnsupportedOperationException(); + } +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java new file mode 100644 index 000000000..6c597159c --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java @@ -0,0 +1,36 @@ +package org.briarproject.bramble.plugin.file; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.PluginCallback; +import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin; +import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; + +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + +import static java.util.concurrent.TimeUnit.DAYS; +import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; + +@Immutable +@NotNullByDefault +public class RemovableDrivePluginFactory implements SimplexPluginFactory { + + private final int MAX_LATENCY = (int) DAYS.toMillis(14); + + @Override + public TransportId getId() { + return ID; + } + + @Override + public int getMaxLatency() { + return MAX_LATENCY; + } + + @Nullable + @Override + public SimplexPlugin createPlugin(PluginCallback callback) { + return new RemovableDrivePlugin(callback, MAX_LATENCY); + } +} From c999f05cc7e3a84e535838ca805e0578545366d9 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 6 May 2021 16:56:09 +0100 Subject: [PATCH 2/5] Configure removable drive plugin for Android. --- .../bramble/plugin/file/RemovableDrivePluginFactory.java | 5 +++++ .../java/org/briarproject/briar/android/AppModule.java | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java index 6c597159c..781902678 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java @@ -8,6 +8,7 @@ import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; import static java.util.concurrent.TimeUnit.DAYS; import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; @@ -18,6 +19,10 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory { private final int MAX_LATENCY = (int) DAYS.toMillis(14); + @Inject + RemovableDrivePluginFactory() { + } + @Override public TransportId getId() { return ID; 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 1eeded75f..6a29a00d9 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 @@ -24,6 +24,7 @@ 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.bluetooth.AndroidBluetoothPluginFactory; +import org.briarproject.bramble.plugin.file.RemovableDrivePluginFactory; import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory; import org.briarproject.bramble.plugin.tor.AndroidTorPluginFactory; import org.briarproject.bramble.util.AndroidUtils; @@ -67,7 +68,6 @@ import dagger.Provides; import static android.content.Context.MODE_PRIVATE; import static android.os.Build.VERSION.SDK_INT; 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.reporting.ReportingConstants.DEV_ONION_ADDRESS; @@ -150,7 +150,8 @@ public class AppModule { @Provides PluginConfig providePluginConfig(AndroidBluetoothPluginFactory bluetooth, - AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan) { + AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan, + RemovableDrivePluginFactory drive) { @NotNullByDefault PluginConfig pluginConfig = new PluginConfig() { @@ -161,7 +162,7 @@ public class AppModule { @Override public Collection getSimplexFactories() { - return emptyList(); + return singletonList(drive); } @Override From 0bc06248edfd5c2924a9d495121a870d5bc892bd Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 6 May 2021 16:58:00 +0100 Subject: [PATCH 3/5] Clean up plugin injection code, remove unused module. --- .../AndroidBluetoothPluginFactory.java | 2 +- .../tcp/AndroidLanTcpPluginFactory.java | 2 +- .../plugin/tor/AndroidTorPluginFactory.java | 2 +- .../bramble/plugin/DesktopPluginModule.java | 61 ------------------- .../plugin/tor/UnixTorPluginFactory.java | 2 +- .../briarproject/briar/android/AppModule.java | 1 + .../briar/headless/HeadlessModule.kt | 1 + .../briar/headless/HeadlessTestModule.kt | 1 + 8 files changed, 7 insertions(+), 65 deletions(-) delete mode 100644 bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java index 96f094d72..b7c7e5731 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java @@ -47,7 +47,7 @@ public class AndroidBluetoothPluginFactory implements DuplexPluginFactory { private final BackoffFactory backoffFactory; @Inject - public AndroidBluetoothPluginFactory(@IoExecutor Executor ioExecutor, + AndroidBluetoothPluginFactory(@IoExecutor Executor ioExecutor, @WakefulIoExecutor Executor wakefulIoExecutor, AndroidExecutor androidExecutor, AndroidWakeLockManager wakeLockManager, diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java index beedd97a4..01922de50 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPluginFactory.java @@ -37,7 +37,7 @@ public class AndroidLanTcpPluginFactory implements DuplexPluginFactory { private final Application app; @Inject - public AndroidLanTcpPluginFactory(@IoExecutor Executor ioExecutor, + AndroidLanTcpPluginFactory(@IoExecutor Executor ioExecutor, @WakefulIoExecutor Executor wakefulIoExecutor, EventBus eventBus, BackoffFactory backoffFactory, 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 2a8bedfff..87552ed73 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 @@ -58,7 +58,7 @@ public class AndroidTorPluginFactory implements DuplexPluginFactory { private final File torDirectory; @Inject - public AndroidTorPluginFactory(@IoExecutor Executor ioExecutor, + AndroidTorPluginFactory(@IoExecutor Executor ioExecutor, @WakefulIoExecutor Executor wakefulIoExecutor, Application app, NetworkManager networkManager, diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java deleted file mode 100644 index 6a33b933a..000000000 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.briarproject.bramble.plugin; - -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.TransportId; -import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; -import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; -import org.briarproject.bramble.plugin.bluetooth.JavaBluetoothPluginFactory; -import org.briarproject.bramble.plugin.modem.ModemPluginFactory; -import org.briarproject.bramble.plugin.tcp.LanTcpPluginFactory; -import org.briarproject.bramble.plugin.tcp.WanTcpPluginFactory; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import dagger.Module; -import dagger.Provides; - -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; -import static java.util.Collections.singletonMap; - -@Module -public class DesktopPluginModule extends PluginModule { - - @Provides - PluginConfig getPluginConfig(JavaBluetoothPluginFactory bluetooth, - ModemPluginFactory modem, LanTcpPluginFactory lan, - WanTcpPluginFactory wan) { - @NotNullByDefault - PluginConfig pluginConfig = new PluginConfig() { - - @Override - public Collection getDuplexFactories() { - return asList(bluetooth, modem, lan, wan); - } - - @Override - public Collection getSimplexFactories() { - return emptyList(); - } - - @Override - public boolean shouldPoll() { - return true; - } - - @Override - public Map> getTransportPreferences() { - // Prefer LAN to Bluetooth - return singletonMap(BluetoothConstants.ID, - singletonList(LanTcpConstants.ID)); - } - }; - return pluginConfig; - } -} 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 d5efba41c..e621ad1dd 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 @@ -55,7 +55,7 @@ public class UnixTorPluginFactory implements DuplexPluginFactory { private final File torDirectory; @Inject - public UnixTorPluginFactory(@IoExecutor Executor ioExecutor, + UnixTorPluginFactory(@IoExecutor Executor ioExecutor, @IoExecutor Executor wakefulIoExecutor, NetworkManager networkManager, LocationUtils locationUtils, 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 6a29a00d9..f5d13cf35 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 @@ -149,6 +149,7 @@ public class AppModule { } @Provides + @Singleton PluginConfig providePluginConfig(AndroidBluetoothPluginFactory bluetooth, AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan, RemovableDrivePluginFactory drive) { 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 58c217d4a..90afe01c5 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 @@ -74,6 +74,7 @@ internal class HeadlessModule(private val appDir: File) { } @Provides + @Singleton internal fun providePluginConfig(tor: UnixTorPluginFactory): PluginConfig { val duplex: List = if (isLinux() || isMac()) listOf(tor) else emptyList() 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 c76212827..f31caf2e3 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 @@ -64,6 +64,7 @@ internal class HeadlessTestModule(private val appDir: File) { } @Provides + @Singleton internal fun providePluginConfig(): PluginConfig { return object : PluginConfig { override fun getDuplexFactories(): Collection = emptyList() From 7eccf7dac170b7d300036727d8684089ee4020cb Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 7 May 2021 17:36:10 +0100 Subject: [PATCH 4/5] Decouple removable drive plugin from java.io.File for portability. --- .../file/AbstractRemovableDrivePlugin.java | 114 ++++++++++++++++++ .../plugin/file/RemovableDrivePlugin.java | 94 +++------------ .../file/RemovableDrivePluginFactory.java | 2 +- .../file/TransportInputStreamReader.java | 34 ++++++ .../file/TransportOutputStreamWriter.java | 47 ++++++++ 5 files changed, 214 insertions(+), 77 deletions(-) create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/file/AbstractRemovableDrivePlugin.java create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportInputStreamReader.java create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportOutputStreamWriter.java diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/AbstractRemovableDrivePlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/AbstractRemovableDrivePlugin.java new file mode 100644 index 000000000..3fdc9c908 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/AbstractRemovableDrivePlugin.java @@ -0,0 +1,114 @@ +package org.briarproject.bramble.plugin.file; + +import org.briarproject.bramble.api.Pair; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.ConnectionHandler; +import org.briarproject.bramble.api.plugin.TransportConnectionReader; +import org.briarproject.bramble.api.plugin.TransportConnectionWriter; +import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin; +import org.briarproject.bramble.api.properties.TransportProperties; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Collection; +import java.util.logging.Logger; + +import javax.annotation.concurrent.Immutable; + +import static java.util.logging.Level.WARNING; +import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; +import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; +import static org.briarproject.bramble.util.LogUtils.logException; + +@Immutable +@NotNullByDefault +abstract class AbstractRemovableDrivePlugin implements SimplexPlugin { + + private static final Logger LOG = + getLogger(AbstractRemovableDrivePlugin.class.getName()); + + private final int maxLatency; + + abstract InputStream openInputStream(TransportProperties p) + throws IOException; + + abstract OutputStream openOutputStream(TransportProperties p) + throws IOException; + + AbstractRemovableDrivePlugin(int maxLatency) { + this.maxLatency = maxLatency; + } + + @Override + public TransportId getId() { + return ID; + } + + @Override + public int getMaxLatency() { + return maxLatency; + } + + @Override + public int getMaxIdleTime() { + // Unused for simplex transports + throw new UnsupportedOperationException(); + } + + @Override + public void start() { + } + + @Override + public void stop() { + } + + @Override + public State getState() { + return ACTIVE; + } + + @Override + public int getReasonsDisabled() { + return 0; + } + + @Override + public boolean shouldPoll() { + return false; + } + + @Override + public int getPollingInterval() { + throw new UnsupportedOperationException(); + } + + @Override + public void poll( + Collection> properties) { + throw new UnsupportedOperationException(); + } + + @Override + public TransportConnectionReader createReader(TransportProperties p) { + try { + return new TransportInputStreamReader(openInputStream(p)); + } catch (IOException e) { + logException(LOG, WARNING, e); + return null; + } + } + + @Override + public TransportConnectionWriter createWriter(TransportProperties p) { + try { + return new TransportOutputStreamWriter(this, openOutputStream(p)); + } catch (IOException e) { + logException(LOG, WARNING, e); + return null; + } + } +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java index 3cb3d6c98..b59f4f85f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePlugin.java @@ -1,96 +1,38 @@ package org.briarproject.bramble.plugin.file; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.plugin.ConnectionHandler; -import org.briarproject.bramble.api.plugin.PluginCallback; -import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.properties.TransportProperties; -import java.io.File; -import java.util.Collection; -import java.util.logging.Logger; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import javax.annotation.concurrent.Immutable; -import static java.util.logging.Level.INFO; -import static java.util.logging.Logger.getLogger; -import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; -import static org.briarproject.bramble.api.plugin.RemovableDriveConstants.ID; +import static org.briarproject.bramble.api.plugin.FileConstants.PROP_PATH; +import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty; @Immutable @NotNullByDefault -class RemovableDrivePlugin extends FilePlugin { +class RemovableDrivePlugin extends AbstractRemovableDrivePlugin { - private static final Logger LOG = - getLogger(RemovableDrivePlugin.class.getName()); - - RemovableDrivePlugin(PluginCallback callback, int maxLatency) { - super(callback, maxLatency); + RemovableDrivePlugin(int maxLatency) { + super(maxLatency); } @Override - protected void writerFinished(File f, boolean exception) { - if (LOG.isLoggable(INFO)) { - LOG.info("Writer finished, exception: " + exception); - } + InputStream openInputStream(TransportProperties p) throws IOException { + String path = p.get(PROP_PATH); + if (isNullOrEmpty(path)) throw new IllegalArgumentException(); + return new FileInputStream(path); } @Override - protected void readerFinished(File f, boolean exception, - boolean recognised) { - if (LOG.isLoggable(INFO)) { - LOG.info("Reader finished, exception: " + exception - + ", recognised: " + recognised); - } - // Try to delete the file if the read finished successfully - if (recognised && !exception && !f.delete()) { - LOG.info("Failed to delete recognised file"); - } - } - - @Override - public TransportId getId() { - return ID; - } - - @Override - public void start() { - } - - @Override - public void stop() { - } - - @Override - public State getState() { - return ACTIVE; - } - - @Override - public int getReasonsDisabled() { - return 0; - } - - @Override - public int getMaxIdleTime() { - // Unused for simplex transports - throw new UnsupportedOperationException(); - } - - @Override - public boolean shouldPoll() { - return false; - } - - @Override - public int getPollingInterval() { - throw new UnsupportedOperationException(); - } - - @Override - public void poll( - Collection> properties) { - throw new UnsupportedOperationException(); + OutputStream openOutputStream(TransportProperties p) throws IOException { + String path = p.get(PROP_PATH); + if (isNullOrEmpty(path)) throw new IllegalArgumentException(); + return new FileOutputStream(path); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java index 781902678..5d833805d 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginFactory.java @@ -36,6 +36,6 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory { @Nullable @Override public SimplexPlugin createPlugin(PluginCallback callback) { - return new RemovableDrivePlugin(callback, MAX_LATENCY); + return new RemovableDrivePlugin(MAX_LATENCY); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportInputStreamReader.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportInputStreamReader.java new file mode 100644 index 000000000..8971136c9 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportInputStreamReader.java @@ -0,0 +1,34 @@ +package org.briarproject.bramble.plugin.file; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.TransportConnectionReader; + +import java.io.InputStream; +import java.util.logging.Logger; + +import static java.util.logging.Level.WARNING; +import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.util.IoUtils.tryToClose; + +@NotNullByDefault +class TransportInputStreamReader implements TransportConnectionReader { + + private static final Logger LOG = + getLogger(TransportInputStreamReader.class.getName()); + + private final InputStream in; + + TransportInputStreamReader(InputStream in) { + this.in = in; + } + + @Override + public InputStream getInputStream() { + return in; + } + + @Override + public void dispose(boolean exception, boolean recognised) { + tryToClose(in, LOG, WARNING); + } +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportOutputStreamWriter.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportOutputStreamWriter.java new file mode 100644 index 000000000..be40fbca0 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/TransportOutputStreamWriter.java @@ -0,0 +1,47 @@ +package org.briarproject.bramble.plugin.file; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.Plugin; +import org.briarproject.bramble.api.plugin.TransportConnectionWriter; + +import java.io.OutputStream; +import java.util.logging.Logger; + +import static java.util.logging.Level.WARNING; +import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.util.IoUtils.tryToClose; + +@NotNullByDefault +class TransportOutputStreamWriter implements TransportConnectionWriter { + + private static final Logger LOG = + getLogger(TransportOutputStreamWriter.class.getName()); + + private final Plugin plugin; + private final OutputStream out; + + TransportOutputStreamWriter(Plugin plugin, OutputStream out) { + this.plugin = plugin; + this.out = out; + } + + @Override + public int getMaxLatency() { + return plugin.getMaxLatency(); + } + + @Override + public int getMaxIdleTime() { + return plugin.getMaxIdleTime(); + } + + @Override + public OutputStream getOutputStream() { + return out; + } + + @Override + public void dispose(boolean exception) { + tryToClose(out, LOG, WARNING); + } +} From 524c8d26f82526101d092e3c40a71410468d4c2e Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 7 May 2021 17:48:39 +0100 Subject: [PATCH 5/5] Don't inject default RemovableDrivePluginFactory on Android. --- .../java/org/briarproject/briar/android/AppModule.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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 f5d13cf35..634c984b8 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 @@ -24,7 +24,6 @@ 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.bluetooth.AndroidBluetoothPluginFactory; -import org.briarproject.bramble.plugin.file.RemovableDrivePluginFactory; import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory; import org.briarproject.bramble.plugin.tor.AndroidTorPluginFactory; import org.briarproject.bramble.util.AndroidUtils; @@ -68,6 +67,7 @@ import dagger.Provides; import static android.content.Context.MODE_PRIVATE; import static android.os.Build.VERSION.SDK_INT; 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.reporting.ReportingConstants.DEV_ONION_ADDRESS; @@ -151,8 +151,7 @@ public class AppModule { @Provides @Singleton PluginConfig providePluginConfig(AndroidBluetoothPluginFactory bluetooth, - AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan, - RemovableDrivePluginFactory drive) { + AndroidTorPluginFactory tor, AndroidLanTcpPluginFactory lan) { @NotNullByDefault PluginConfig pluginConfig = new PluginConfig() { @@ -163,7 +162,7 @@ public class AppModule { @Override public Collection getSimplexFactories() { - return singletonList(drive); + return emptyList(); } @Override