From 22ea4ced0d488666e509f94445b78ab6ed3ee603 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 28 Jun 2021 15:02:34 +0100 Subject: [PATCH 1/2] Add transport property to indicate support for removable drives. --- .../bramble/plugin/file/AndroidRemovableDrivePlugin.java | 6 ++++-- .../plugin/file/AndroidRemovableDrivePluginFactory.java | 2 +- .../bramble/api/plugin/file/RemovableDriveConstants.java | 1 + .../plugin/file/AbstractRemovableDrivePlugin.java | 9 ++++++++- .../bramble/plugin/file/RemovableDrivePlugin.java | 5 +++-- .../bramble/plugin/file/RemovableDrivePluginFactory.java | 2 +- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java index 05e569f7c..964088367 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePlugin.java @@ -4,6 +4,7 @@ import android.app.Application; import android.net.Uri; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.properties.TransportProperties; import java.io.IOException; @@ -21,8 +22,9 @@ class AndroidRemovableDrivePlugin extends RemovableDrivePlugin { private final Application app; - AndroidRemovableDrivePlugin(Application app, int maxLatency) { - super(maxLatency); + AndroidRemovableDrivePlugin(Application app, PluginCallback callback, + int maxLatency) { + super(callback, maxLatency); this.app = app; } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java index 64f6cf534..7c82bd4ee 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/file/AndroidRemovableDrivePluginFactory.java @@ -42,6 +42,6 @@ public class AndroidRemovableDrivePluginFactory implements @Nullable @Override public SimplexPlugin createPlugin(PluginCallback callback) { - return new AndroidRemovableDrivePlugin(app, MAX_LATENCY); + return new AndroidRemovableDrivePlugin(app, callback, MAX_LATENCY); } } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveConstants.java index 927e197df..d414b88e0 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveConstants.java @@ -8,4 +8,5 @@ public interface RemovableDriveConstants { String PROP_PATH = "path"; String PROP_URI = "uri"; + String PROP_SUPPORTED = "supported"; } 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 index 8e8d35488..33d0165a5 100644 --- 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 @@ -3,6 +3,7 @@ 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.TransportConnectionReader; import org.briarproject.bramble.api.plugin.TransportConnectionWriter; import org.briarproject.bramble.api.plugin.TransportId; @@ -17,10 +18,12 @@ import java.util.logging.Logger; import javax.annotation.concurrent.Immutable; +import static java.util.Collections.singletonMap; 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.file.RemovableDriveConstants.ID; +import static org.briarproject.bramble.api.plugin.file.RemovableDriveConstants.PROP_SUPPORTED; import static org.briarproject.bramble.util.LogUtils.logException; @Immutable @@ -31,6 +34,7 @@ abstract class AbstractRemovableDrivePlugin implements SimplexPlugin { getLogger(AbstractRemovableDrivePlugin.class.getName()); private final int maxLatency; + private final PluginCallback callback; abstract InputStream openInputStream(TransportProperties p) throws IOException; @@ -38,7 +42,8 @@ abstract class AbstractRemovableDrivePlugin implements SimplexPlugin { abstract OutputStream openOutputStream(TransportProperties p) throws IOException; - AbstractRemovableDrivePlugin(int maxLatency) { + AbstractRemovableDrivePlugin(PluginCallback callback, int maxLatency) { + this.callback = callback; this.maxLatency = maxLatency; } @@ -60,6 +65,8 @@ abstract class AbstractRemovableDrivePlugin implements SimplexPlugin { @Override public void start() { + callback.mergeLocalProperties( + new TransportProperties(singletonMap(PROP_SUPPORTED, "true"))); } @Override 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 cb6653134..6995371b9 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,6 +1,7 @@ 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.properties.TransportProperties; import java.io.FileInputStream; @@ -18,8 +19,8 @@ import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty; @NotNullByDefault class RemovableDrivePlugin extends AbstractRemovableDrivePlugin { - RemovableDrivePlugin(int maxLatency) { - super(maxLatency); + RemovableDrivePlugin(PluginCallback callback, int maxLatency) { + super(callback, maxLatency); } @Override 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 d0bc374ed..921cbafa1 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(MAX_LATENCY); + return new RemovableDrivePlugin(callback, MAX_LATENCY); } } From 8c1f721015dc918e0d35273c70dd1e391f74c2e9 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 28 Jun 2021 15:52:26 +0100 Subject: [PATCH 2/2] Add method for checking whether contact supports transport. --- .../plugin/file/RemovableDriveManager.java | 6 ++++++ .../file/RemovableDriveManagerImpl.java | 20 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveManager.java index 8c74497b0..2838f87cf 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/file/RemovableDriveManager.java @@ -39,6 +39,12 @@ public interface RemovableDriveManager { */ RemovableDriveTask startWriterTask(ContactId c, TransportProperties p); + /** + * Returns true if the given contact has indicated support for the + * removable drive transport. + */ + boolean isTransportSupportedByContact(ContactId c) throws DbException; + /** * Returns true if there is anything to send to the given contact. */ diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveManagerImpl.java index 2c96d5d53..a0d1848cd 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/RemovableDriveManagerImpl.java @@ -8,6 +8,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.file.RemovableDriveManager; import org.briarproject.bramble.api.plugin.file.RemovableDriveTask; import org.briarproject.bramble.api.properties.TransportProperties; +import org.briarproject.bramble.api.properties.TransportPropertyManager; import java.util.concurrent.Executor; @@ -16,6 +17,8 @@ import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; import javax.inject.Inject; +import static org.briarproject.bramble.api.plugin.file.RemovableDriveConstants.ID; +import static org.briarproject.bramble.api.plugin.file.RemovableDriveConstants.PROP_SUPPORTED; import static org.briarproject.bramble.plugin.file.RemovableDrivePluginFactory.MAX_LATENCY; @ThreadSafe @@ -25,6 +28,7 @@ class RemovableDriveManagerImpl private final Executor ioExecutor; private final DatabaseComponent db; + private final TransportPropertyManager transportPropertyManager; private final RemovableDriveTaskFactory taskFactory; private final Object lock = new Object(); @@ -34,10 +38,14 @@ class RemovableDriveManagerImpl private RemovableDriveTask writer = null; @Inject - RemovableDriveManagerImpl(@IoExecutor Executor ioExecutor, - DatabaseComponent db, RemovableDriveTaskFactory taskFactory) { + RemovableDriveManagerImpl( + @IoExecutor Executor ioExecutor, + DatabaseComponent db, + TransportPropertyManager transportPropertyManager, + RemovableDriveTaskFactory taskFactory) { this.ioExecutor = ioExecutor; this.db = db; + this.transportPropertyManager = transportPropertyManager; this.taskFactory = taskFactory; } @@ -80,6 +88,14 @@ class RemovableDriveManagerImpl return created; } + @Override + public boolean isTransportSupportedByContact(ContactId c) + throws DbException { + TransportProperties p = + transportPropertyManager.getRemoteProperties(c, ID); + return "true".equals(p.get(PROP_SUPPORTED)); + } + @Override public boolean isWriterTaskNeeded(ContactId c) throws DbException { return db.transactionWithResult(true, txn ->