mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 12:49:55 +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;
|
import java.io.IOException;
|
||||||
|
|
||||||
interface ReadHandler {
|
public interface ReadHandler {
|
||||||
|
|
||||||
void handleRead(byte[] b) throws IOException;
|
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.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
interface ReliabilityLayer extends ReadHandler, WriteHandler {
|
public interface ReliabilityLayer extends ReadHandler, WriteHandler {
|
||||||
|
|
||||||
void start();
|
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;
|
import java.io.IOException;
|
||||||
|
|
||||||
interface WriteHandler {
|
public interface WriteHandler {
|
||||||
|
|
||||||
void handleWrite(byte[] b) throws IOException;
|
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.duplex.DuplexPluginFactory;
|
||||||
import net.sf.briar.api.plugins.simplex.SimplexPluginConfig;
|
import net.sf.briar.api.plugins.simplex.SimplexPluginConfig;
|
||||||
import net.sf.briar.api.plugins.simplex.SimplexPluginFactory;
|
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.bluetooth.BluetoothPluginFactory;
|
||||||
import net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory;
|
import net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory;
|
||||||
import net.sf.briar.plugins.file.RemovableDrivePluginFactory;
|
import net.sf.briar.plugins.file.RemovableDrivePluginFactory;
|
||||||
@@ -62,6 +63,7 @@ public class PluginsModule extends AbstractModule {
|
|||||||
DuplexPluginConfig getDuplexPluginConfig(
|
DuplexPluginConfig getDuplexPluginConfig(
|
||||||
@PluginExecutor Executor pluginExecutor,
|
@PluginExecutor Executor pluginExecutor,
|
||||||
AndroidExecutor androidExecutor, Context appContext,
|
AndroidExecutor androidExecutor, Context appContext,
|
||||||
|
ReliabilityLayerFactory reliabilityFactory,
|
||||||
ShutdownManager shutdownManager) {
|
ShutdownManager shutdownManager) {
|
||||||
final Collection<DuplexPluginFactory> factories =
|
final Collection<DuplexPluginFactory> factories =
|
||||||
new ArrayList<DuplexPluginFactory>();
|
new ArrayList<DuplexPluginFactory>();
|
||||||
@@ -70,7 +72,8 @@ public class PluginsModule extends AbstractModule {
|
|||||||
androidExecutor, appContext));
|
androidExecutor, appContext));
|
||||||
} else {
|
} else {
|
||||||
factories.add(new BluetoothPluginFactory(pluginExecutor));
|
factories.add(new BluetoothPluginFactory(pluginExecutor));
|
||||||
factories.add(new ModemPluginFactory(pluginExecutor));
|
factories.add(new ModemPluginFactory(pluginExecutor,
|
||||||
|
reliabilityFactory));
|
||||||
}
|
}
|
||||||
factories.add(new LanTcpPluginFactory(pluginExecutor));
|
factories.add(new LanTcpPluginFactory(pluginExecutor));
|
||||||
factories.add(new WanTcpPluginFactory(pluginExecutor, shutdownManager));
|
factories.add(new WanTcpPluginFactory(pluginExecutor, shutdownManager));
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package net.sf.briar.plugins.modem;
|
|||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||||
|
|
||||||
class ModemFactoryImpl implements ModemFactory {
|
class ModemFactoryImpl implements ModemFactory {
|
||||||
|
|
||||||
private final Executor executor;
|
private final Executor executor;
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ import java.util.concurrent.Executor;
|
|||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
import java.util.logging.Logger;
|
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.SerialPort;
|
||||||
import jssc.SerialPortEvent;
|
import jssc.SerialPortEvent;
|
||||||
import jssc.SerialPortEventListener;
|
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.DuplexPluginCallback;
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
||||||
import net.sf.briar.api.protocol.TransportId;
|
import net.sf.briar.api.protocol.TransportId;
|
||||||
|
import net.sf.briar.api.reliability.ReliabilityLayerFactory;
|
||||||
|
|
||||||
import org.h2.util.StringUtils;
|
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 static final long POLLING_INTERVAL = 60L * 60L * 1000L; // 1 hour
|
||||||
|
|
||||||
private final Executor pluginExecutor;
|
private final Executor pluginExecutor;
|
||||||
|
private final ModemFactory modemFactory;
|
||||||
|
|
||||||
public ModemPluginFactory(@PluginExecutor Executor pluginExecutor) {
|
public ModemPluginFactory(@PluginExecutor Executor pluginExecutor,
|
||||||
|
ReliabilityLayerFactory reliabilityFactory) {
|
||||||
this.pluginExecutor = pluginExecutor;
|
this.pluginExecutor = pluginExecutor;
|
||||||
|
modemFactory = new ModemFactoryImpl(pluginExecutor, reliabilityFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportId getId() {
|
public TransportId getId() {
|
||||||
@@ -28,10 +32,6 @@ public class ModemPluginFactory implements DuplexPluginFactory {
|
|||||||
// This plugin is not enabled by default
|
// This plugin is not enabled by default
|
||||||
String enabled = callback.getConfig().get("enabled");
|
String enabled = callback.getConfig().get("enabled");
|
||||||
if(StringUtils.isNullOrEmpty(enabled)) return null;
|
if(StringUtils.isNullOrEmpty(enabled)) return null;
|
||||||
ReliabilityLayerFactory reliabilityFactory =
|
|
||||||
new ReliabilityLayerFactoryImpl(pluginExecutor);
|
|
||||||
ModemFactory modemFactory = new ModemFactoryImpl(pluginExecutor,
|
|
||||||
reliabilityFactory);
|
|
||||||
return new ModemPlugin(pluginExecutor, modemFactory, callback,
|
return new ModemPlugin(pluginExecutor, modemFactory, callback,
|
||||||
POLLING_INTERVAL);
|
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;
|
import net.sf.briar.util.ByteUtils;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package net.sf.briar.plugins.modem;
|
package net.sf.briar.reliability;
|
||||||
|
|
||||||
class Crc32 {
|
class Crc32 {
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package net.sf.briar.plugins.modem;
|
package net.sf.briar.reliability;
|
||||||
|
|
||||||
class Data extends Frame {
|
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;
|
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.io.IOException;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@@ -6,6 +6,8 @@ import java.util.Iterator;
|
|||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import net.sf.briar.api.reliability.ReadHandler;
|
||||||
|
|
||||||
class Receiver implements ReadHandler {
|
class Receiver implements ReadHandler {
|
||||||
|
|
||||||
static final int MAX_WINDOW_SIZE = 8 * Data.MAX_PAYLOAD_LENGTH;
|
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.IOException;
|
||||||
import java.io.InputStream;
|
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 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 {
|
class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
|
||||||
|
|
||||||
private final Executor executor;
|
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.concurrent.TimeUnit.MILLISECONDS;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
@@ -11,6 +11,9 @@ import java.util.concurrent.Executor;
|
|||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import net.sf.briar.api.reliability.ReliabilityLayer;
|
||||||
|
import net.sf.briar.api.reliability.WriteHandler;
|
||||||
|
|
||||||
class ReliabilityLayerImpl implements ReliabilityLayer {
|
class ReliabilityLayerImpl implements ReliabilityLayer {
|
||||||
|
|
||||||
private static final int TICK_INTERVAL = 500; // Milliseconds
|
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.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -6,6 +6,8 @@ import java.util.Iterator;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sf.briar.api.reliability.WriteHandler;
|
||||||
|
|
||||||
class Sender {
|
class Sender {
|
||||||
|
|
||||||
// All times are in milliseconds
|
// 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.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package net.sf.briar.plugins.modem;
|
package net.sf.briar.reliability;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import net.sf.briar.api.reliability.ReadHandler;
|
||||||
|
|
||||||
class SlipDecoder implements ReadHandler {
|
class SlipDecoder implements ReadHandler {
|
||||||
|
|
||||||
// https://tools.ietf.org/html/rfc1055
|
// 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 java.io.IOException;
|
||||||
|
|
||||||
|
import net.sf.briar.api.reliability.WriteHandler;
|
||||||
|
|
||||||
class SlipEncoder implements WriteHandler {
|
class SlipEncoder implements WriteHandler {
|
||||||
|
|
||||||
// https://tools.ietf.org/html/rfc1055
|
// 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