mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 02:39:05 +01:00
Moved reliability layer into its own package.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.api.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
interface ReadHandler {
|
||||
public interface ReadHandler {
|
||||
|
||||
void handleRead(byte[] b) throws IOException;
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.api.reliability;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
|
||||
interface ReliabilityLayer extends ReadHandler, WriteHandler {
|
||||
public interface ReliabilityLayer extends ReadHandler, WriteHandler {
|
||||
|
||||
void start();
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package net.sf.briar.api.reliability;
|
||||
|
||||
public interface ReliabilityLayerFactory {
|
||||
|
||||
ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler);
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.api.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
interface WriteHandler {
|
||||
public interface WriteHandler {
|
||||
|
||||
void handleWrite(byte[] b) throws IOException;
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import net.sf.briar.api.plugins.duplex.DuplexPluginConfig;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
||||
import net.sf.briar.api.plugins.simplex.SimplexPluginConfig;
|
||||
import net.sf.briar.api.plugins.simplex.SimplexPluginFactory;
|
||||
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||
import net.sf.briar.plugins.bluetooth.BluetoothPluginFactory;
|
||||
import net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory;
|
||||
import net.sf.briar.plugins.file.RemovableDrivePluginFactory;
|
||||
@@ -62,6 +63,7 @@ public class PluginsModule extends AbstractModule {
|
||||
DuplexPluginConfig getDuplexPluginConfig(
|
||||
@PluginExecutor Executor pluginExecutor,
|
||||
AndroidExecutor androidExecutor, Context appContext,
|
||||
ReliabilityLayerFactory reliabilityFactory,
|
||||
ShutdownManager shutdownManager) {
|
||||
final Collection<DuplexPluginFactory> factories =
|
||||
new ArrayList<DuplexPluginFactory>();
|
||||
@@ -70,7 +72,8 @@ public class PluginsModule extends AbstractModule {
|
||||
androidExecutor, appContext));
|
||||
} else {
|
||||
factories.add(new BluetoothPluginFactory(pluginExecutor));
|
||||
factories.add(new ModemPluginFactory(pluginExecutor));
|
||||
factories.add(new ModemPluginFactory(pluginExecutor,
|
||||
reliabilityFactory));
|
||||
}
|
||||
factories.add(new LanTcpPluginFactory(pluginExecutor));
|
||||
factories.add(new WanTcpPluginFactory(pluginExecutor, shutdownManager));
|
||||
|
||||
@@ -2,6 +2,8 @@ package net.sf.briar.plugins.modem;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||
|
||||
class ModemFactoryImpl implements ModemFactory {
|
||||
|
||||
private final Executor executor;
|
||||
|
||||
@@ -12,6 +12,10 @@ import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Semaphore;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.sf.briar.api.reliability.ReliabilityLayer;
|
||||
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||
import net.sf.briar.api.reliability.WriteHandler;
|
||||
|
||||
import jssc.SerialPort;
|
||||
import jssc.SerialPortEvent;
|
||||
import jssc.SerialPortEventListener;
|
||||
|
||||
@@ -7,6 +7,7 @@ import net.sf.briar.api.plugins.duplex.DuplexPlugin;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
||||
import net.sf.briar.api.protocol.TransportId;
|
||||
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||
|
||||
import org.h2.util.StringUtils;
|
||||
|
||||
@@ -15,9 +16,12 @@ public class ModemPluginFactory implements DuplexPluginFactory {
|
||||
private static final long POLLING_INTERVAL = 60L * 60L * 1000L; // 1 hour
|
||||
|
||||
private final Executor pluginExecutor;
|
||||
private final ModemFactory modemFactory;
|
||||
|
||||
public ModemPluginFactory(@PluginExecutor Executor pluginExecutor) {
|
||||
public ModemPluginFactory(@PluginExecutor Executor pluginExecutor,
|
||||
ReliabilityLayerFactory reliabilityFactory) {
|
||||
this.pluginExecutor = pluginExecutor;
|
||||
modemFactory = new ModemFactoryImpl(pluginExecutor, reliabilityFactory);
|
||||
}
|
||||
|
||||
public TransportId getId() {
|
||||
@@ -28,10 +32,6 @@ public class ModemPluginFactory implements DuplexPluginFactory {
|
||||
// This plugin is not enabled by default
|
||||
String enabled = callback.getConfig().get("enabled");
|
||||
if(StringUtils.isNullOrEmpty(enabled)) return null;
|
||||
ReliabilityLayerFactory reliabilityFactory =
|
||||
new ReliabilityLayerFactoryImpl(pluginExecutor);
|
||||
ModemFactory modemFactory = new ModemFactoryImpl(pluginExecutor,
|
||||
reliabilityFactory);
|
||||
return new ModemPlugin(pluginExecutor, modemFactory, callback,
|
||||
POLLING_INTERVAL);
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
|
||||
interface ReliabilityLayerFactory {
|
||||
|
||||
ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import net.sf.briar.util.ByteUtils;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
class Crc32 {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
class Data extends Frame {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import net.sf.briar.util.ByteUtils;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Comparator;
|
||||
@@ -6,6 +6,8 @@ import java.util.Iterator;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import net.sf.briar.api.reliability.ReadHandler;
|
||||
|
||||
class Receiver implements ReadHandler {
|
||||
|
||||
static final int MAX_WINDOW_SIZE = 8 * Data.MAX_PAYLOAD_LENGTH;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -1,7 +1,11 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import net.sf.briar.api.reliability.ReliabilityLayer;
|
||||
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||
import net.sf.briar.api.reliability.WriteHandler;
|
||||
|
||||
class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
|
||||
|
||||
private final Executor executor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
@@ -11,6 +11,9 @@ import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.sf.briar.api.reliability.ReliabilityLayer;
|
||||
import net.sf.briar.api.reliability.WriteHandler;
|
||||
|
||||
class ReliabilityLayerImpl implements ReliabilityLayer {
|
||||
|
||||
private static final int TICK_INTERVAL = 500; // Milliseconds
|
||||
@@ -0,0 +1,14 @@
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class ReliabilityModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(ReliabilityLayerFactory.class).to(
|
||||
ReliabilityLayerFactoryImpl.class);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@@ -6,6 +6,8 @@ import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.briar.api.reliability.WriteHandler;
|
||||
|
||||
class Sender {
|
||||
|
||||
// All times are in milliseconds
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
@@ -1,7 +1,9 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.sf.briar.api.reliability.ReadHandler;
|
||||
|
||||
class SlipDecoder implements ReadHandler {
|
||||
|
||||
// https://tools.ietf.org/html/rfc1055
|
||||
@@ -1,7 +1,9 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
package net.sf.briar.reliability;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.sf.briar.api.reliability.WriteHandler;
|
||||
|
||||
class SlipEncoder implements WriteHandler {
|
||||
|
||||
// https://tools.ietf.org/html/rfc1055
|
||||
@@ -1,47 +0,0 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
|
||||
import static java.util.logging.Level.INFO;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.sf.briar.api.ContactId;
|
||||
import net.sf.briar.api.TransportConfig;
|
||||
import net.sf.briar.api.TransportProperties;
|
||||
import net.sf.briar.plugins.DuplexClientTest;
|
||||
|
||||
//This is not a JUnit test - it has to be run manually while the server test
|
||||
//is running on another machine
|
||||
public class ModemClientTest extends DuplexClientTest {
|
||||
|
||||
private ModemClientTest(Executor executor, String number) {
|
||||
// Store the server's phone number
|
||||
TransportProperties p = new TransportProperties();
|
||||
p.put("number", number);
|
||||
Map<ContactId, TransportProperties> remote =
|
||||
Collections.singletonMap(contactId, p);
|
||||
// Create the plugin
|
||||
callback = new ClientCallback(new TransportConfig(),
|
||||
new TransportProperties(), remote);
|
||||
plugin = new ModemPlugin(executor, new ModemFactoryImpl(executor,
|
||||
new ReliabilityLayerFactoryImpl(executor)), callback, 0L);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if(args.length != 1) {
|
||||
System.err.println("Please specify the server's phone number");
|
||||
System.exit(1);
|
||||
}
|
||||
Logger.getLogger("net.sf.briar").setLevel(INFO);
|
||||
ExecutorService executor = Executors.newCachedThreadPool();
|
||||
try {
|
||||
new ModemClientTest(executor, args[0]).run();
|
||||
} finally {
|
||||
executor.shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package net.sf.briar.plugins.modem;
|
||||
|
||||
import static java.util.logging.Level.INFO;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.sf.briar.api.TransportConfig;
|
||||
import net.sf.briar.api.TransportProperties;
|
||||
import net.sf.briar.plugins.DuplexServerTest;
|
||||
|
||||
//This is not a JUnit test - it has to be run manually while the client test
|
||||
//is running on another machine
|
||||
public class ModemServerTest extends DuplexServerTest {
|
||||
|
||||
private ModemServerTest(Executor executor) {
|
||||
// Create the plugin
|
||||
callback = new ServerCallback(new TransportConfig(),
|
||||
new TransportProperties(), Collections.singletonMap(contactId,
|
||||
new TransportProperties()));
|
||||
plugin = new ModemPlugin(executor, new ModemFactoryImpl(executor,
|
||||
new ReliabilityLayerFactoryImpl(executor)), callback, 0L);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
Logger.getLogger("net.sf.briar").setLevel(INFO);
|
||||
ExecutorService executor = Executors.newCachedThreadPool();
|
||||
try {
|
||||
new ModemServerTest(executor).run();
|
||||
} finally {
|
||||
executor.shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user