Merge branch '2091-supported-property' into '1802-sync-via-removable-storage'

Add a transport property to signal support for removable drives

See merge request briar/briar!1496
This commit is contained in:
Torsten Grote
2021-06-30 14:53:15 +00:00
8 changed files with 42 additions and 9 deletions

View File

@@ -4,6 +4,7 @@ import android.app.Application;
import android.net.Uri; import android.net.Uri;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.PluginCallback;
import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.properties.TransportProperties;
import java.io.IOException; import java.io.IOException;
@@ -21,8 +22,9 @@ class AndroidRemovableDrivePlugin extends RemovableDrivePlugin {
private final Application app; private final Application app;
AndroidRemovableDrivePlugin(Application app, int maxLatency) { AndroidRemovableDrivePlugin(Application app, PluginCallback callback,
super(maxLatency); int maxLatency) {
super(callback, maxLatency);
this.app = app; this.app = app;
} }

View File

@@ -42,6 +42,6 @@ public class AndroidRemovableDrivePluginFactory implements
@Nullable @Nullable
@Override @Override
public SimplexPlugin createPlugin(PluginCallback callback) { public SimplexPlugin createPlugin(PluginCallback callback) {
return new AndroidRemovableDrivePlugin(app, MAX_LATENCY); return new AndroidRemovableDrivePlugin(app, callback, MAX_LATENCY);
} }
} }

View File

@@ -8,4 +8,5 @@ public interface RemovableDriveConstants {
String PROP_PATH = "path"; String PROP_PATH = "path";
String PROP_URI = "uri"; String PROP_URI = "uri";
String PROP_SUPPORTED = "supported";
} }

View File

@@ -39,6 +39,12 @@ public interface RemovableDriveManager {
*/ */
RemovableDriveTask startWriterTask(ContactId c, TransportProperties p); 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. * Returns true if there is anything to send to the given contact.
*/ */

View File

@@ -3,6 +3,7 @@ package org.briarproject.bramble.plugin.file;
import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.ConnectionHandler; 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.TransportConnectionReader;
import org.briarproject.bramble.api.plugin.TransportConnectionWriter; import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.TransportId;
@@ -17,10 +18,12 @@ import java.util.logging.Logger;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import static java.util.Collections.singletonMap;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger; import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; 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.ID;
import static org.briarproject.bramble.api.plugin.file.RemovableDriveConstants.PROP_SUPPORTED;
import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.logException;
@Immutable @Immutable
@@ -31,6 +34,7 @@ abstract class AbstractRemovableDrivePlugin implements SimplexPlugin {
getLogger(AbstractRemovableDrivePlugin.class.getName()); getLogger(AbstractRemovableDrivePlugin.class.getName());
private final int maxLatency; private final int maxLatency;
private final PluginCallback callback;
abstract InputStream openInputStream(TransportProperties p) abstract InputStream openInputStream(TransportProperties p)
throws IOException; throws IOException;
@@ -38,7 +42,8 @@ abstract class AbstractRemovableDrivePlugin implements SimplexPlugin {
abstract OutputStream openOutputStream(TransportProperties p) abstract OutputStream openOutputStream(TransportProperties p)
throws IOException; throws IOException;
AbstractRemovableDrivePlugin(int maxLatency) { AbstractRemovableDrivePlugin(PluginCallback callback, int maxLatency) {
this.callback = callback;
this.maxLatency = maxLatency; this.maxLatency = maxLatency;
} }
@@ -60,6 +65,8 @@ abstract class AbstractRemovableDrivePlugin implements SimplexPlugin {
@Override @Override
public void start() { public void start() {
callback.mergeLocalProperties(
new TransportProperties(singletonMap(PROP_SUPPORTED, "true")));
} }
@Override @Override

View File

@@ -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.RemovableDriveManager;
import org.briarproject.bramble.api.plugin.file.RemovableDriveTask; import org.briarproject.bramble.api.plugin.file.RemovableDriveTask;
import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.properties.TransportProperties;
import org.briarproject.bramble.api.properties.TransportPropertyManager;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -16,6 +17,8 @@ import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe; import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject; 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; import static org.briarproject.bramble.plugin.file.RemovableDrivePluginFactory.MAX_LATENCY;
@ThreadSafe @ThreadSafe
@@ -25,6 +28,7 @@ class RemovableDriveManagerImpl
private final Executor ioExecutor; private final Executor ioExecutor;
private final DatabaseComponent db; private final DatabaseComponent db;
private final TransportPropertyManager transportPropertyManager;
private final RemovableDriveTaskFactory taskFactory; private final RemovableDriveTaskFactory taskFactory;
private final Object lock = new Object(); private final Object lock = new Object();
@@ -34,10 +38,14 @@ class RemovableDriveManagerImpl
private RemovableDriveTask writer = null; private RemovableDriveTask writer = null;
@Inject @Inject
RemovableDriveManagerImpl(@IoExecutor Executor ioExecutor, RemovableDriveManagerImpl(
DatabaseComponent db, RemovableDriveTaskFactory taskFactory) { @IoExecutor Executor ioExecutor,
DatabaseComponent db,
TransportPropertyManager transportPropertyManager,
RemovableDriveTaskFactory taskFactory) {
this.ioExecutor = ioExecutor; this.ioExecutor = ioExecutor;
this.db = db; this.db = db;
this.transportPropertyManager = transportPropertyManager;
this.taskFactory = taskFactory; this.taskFactory = taskFactory;
} }
@@ -80,6 +88,14 @@ class RemovableDriveManagerImpl
return created; return created;
} }
@Override
public boolean isTransportSupportedByContact(ContactId c)
throws DbException {
TransportProperties p =
transportPropertyManager.getRemoteProperties(c, ID);
return "true".equals(p.get(PROP_SUPPORTED));
}
@Override @Override
public boolean isWriterTaskNeeded(ContactId c) throws DbException { public boolean isWriterTaskNeeded(ContactId c) throws DbException {
return db.transactionWithResult(true, txn -> return db.transactionWithResult(true, txn ->

View File

@@ -1,6 +1,7 @@
package org.briarproject.bramble.plugin.file; package org.briarproject.bramble.plugin.file;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.PluginCallback;
import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.properties.TransportProperties;
import java.io.FileInputStream; import java.io.FileInputStream;
@@ -18,8 +19,8 @@ import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty;
@NotNullByDefault @NotNullByDefault
class RemovableDrivePlugin extends AbstractRemovableDrivePlugin { class RemovableDrivePlugin extends AbstractRemovableDrivePlugin {
RemovableDrivePlugin(int maxLatency) { RemovableDrivePlugin(PluginCallback callback, int maxLatency) {
super(maxLatency); super(callback, maxLatency);
} }
@Override @Override

View File

@@ -36,6 +36,6 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory {
@Nullable @Nullable
@Override @Override
public SimplexPlugin createPlugin(PluginCallback callback) { public SimplexPlugin createPlugin(PluginCallback callback) {
return new RemovableDrivePlugin(MAX_LATENCY); return new RemovableDrivePlugin(callback, MAX_LATENCY);
} }
} }