Moved reliability layer into its own package.

This commit is contained in:
akwizgran
2012-12-15 02:07:46 +00:00
parent f5628e5581
commit 5876583f7c
24 changed files with 68 additions and 114 deletions

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -0,0 +1,6 @@
package net.sf.briar.api.reliability;
public interface ReliabilityLayerFactory {
ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler);
}

View File

@@ -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;
}

View File

@@ -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));

View File

@@ -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;

View File

@@ -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;

View File

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

View File

@@ -1,6 +0,0 @@
package net.sf.briar.plugins.modem;
interface ReliabilityLayerFactory {
ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler);
}

View File

@@ -1,4 +1,4 @@
package net.sf.briar.plugins.modem;
package net.sf.briar.reliability;
import net.sf.briar.util.ByteUtils;

View File

@@ -1,4 +1,4 @@
package net.sf.briar.plugins.modem;
package net.sf.briar.reliability;
class Crc32 {

View File

@@ -1,4 +1,4 @@
package net.sf.briar.plugins.modem;
package net.sf.briar.reliability;
class Data extends Frame {

View File

@@ -1,4 +1,4 @@
package net.sf.briar.plugins.modem;
package net.sf.briar.reliability;
import net.sf.briar.util.ByteUtils;

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package net.sf.briar.plugins.modem;
package net.sf.briar.reliability;
import java.io.IOException;
import java.io.InputStream;

View File

@@ -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;

View File

@@ -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

View File

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

View File

@@ -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

View File

@@ -1,4 +1,4 @@
package net.sf.briar.plugins.modem;
package net.sf.briar.reliability;
import java.io.IOException;
import java.io.OutputStream;

View File

@@ -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

View File

@@ -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

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}