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); + } +}