mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Code cleanup, fixed potential NullPointerException if never connected.
This commit is contained in:
@@ -38,7 +38,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
|
||||
|
||||
private int lineLen = 0;
|
||||
|
||||
private volatile ReliabilityLayer reliabilityLayer = null;
|
||||
private volatile ReliabilityLayer reliabilityLayer;
|
||||
|
||||
ModemImpl(Executor executor, Callback callback, String portName) {
|
||||
this.executor = executor;
|
||||
@@ -48,6 +48,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
|
||||
offHook = new Semaphore(1);
|
||||
connected = new AtomicBoolean(false);
|
||||
line = new byte[MAX_LINE_LENGTH];
|
||||
reliabilityLayer = new ReliabilityLayer(this);
|
||||
}
|
||||
|
||||
public void init() throws IOException {
|
||||
@@ -129,6 +130,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
|
||||
throw new IOException(e.toString());
|
||||
}
|
||||
reliabilityLayer.invalidate();
|
||||
reliabilityLayer = new ReliabilityLayer(this);
|
||||
connected.set(false);
|
||||
offHook.release();
|
||||
}
|
||||
@@ -176,7 +178,6 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
|
||||
lineLen = 0;
|
||||
if(LOG.isLoggable(INFO)) LOG.info("Modem status: " + s);
|
||||
if(s.startsWith("CONNECT")) {
|
||||
reliabilityLayer = new ReliabilityLayer(this);
|
||||
synchronized(connected) {
|
||||
if(connected.getAndSet(true))
|
||||
throw new IOException("Connected twice");
|
||||
|
||||
@@ -6,26 +6,21 @@ import java.io.OutputStream;
|
||||
|
||||
class ReliabilityLayer implements ReadHandler, WriteHandler {
|
||||
|
||||
// Write side
|
||||
private final WriteHandler writeHandler;
|
||||
private final SlipEncoder encoder;
|
||||
private final Sender sender;
|
||||
private final SenderOutputStream outputStream;
|
||||
// Read side
|
||||
private final SlipDecoder decoder;
|
||||
private final Receiver receiver;
|
||||
private final ReceiverInputStream inputStream;
|
||||
private final SenderOutputStream outputStream;
|
||||
|
||||
private volatile boolean valid = true;
|
||||
|
||||
ReliabilityLayer(WriteHandler writeHandler) {
|
||||
this.writeHandler = writeHandler;
|
||||
encoder = new SlipEncoder(this);
|
||||
sender = new Sender(encoder);
|
||||
outputStream = new SenderOutputStream(sender);
|
||||
receiver = new Receiver(sender);
|
||||
SlipEncoder encoder = new SlipEncoder(this);
|
||||
Sender sender = new Sender(encoder);
|
||||
Receiver receiver = new Receiver(sender);
|
||||
decoder = new SlipDecoder(receiver);
|
||||
inputStream = new ReceiverInputStream(receiver);
|
||||
outputStream = new SenderOutputStream(sender);
|
||||
}
|
||||
|
||||
InputStream getInputStream() {
|
||||
@@ -40,11 +35,13 @@ class ReliabilityLayer implements ReadHandler, WriteHandler {
|
||||
valid = false;
|
||||
}
|
||||
|
||||
// The modem calls this method to pass data up to the SLIP decoder
|
||||
public void handleRead(byte[] b, int length) throws IOException {
|
||||
if(!valid) throw new IOException("Connection closed");
|
||||
decoder.handleRead(b, length);
|
||||
}
|
||||
|
||||
// The SLIP encoder calls this method to pass data down to the modem
|
||||
public void handleWrite(byte[] b, int length) throws IOException {
|
||||
if(!valid) throw new IOException("Connection closed");
|
||||
writeHandler.handleWrite(b, length);
|
||||
|
||||
Reference in New Issue
Block a user