Code cleanup, fixed potential NullPointerException if never connected.

This commit is contained in:
akwizgran
2012-11-27 00:00:52 +00:00
parent a0c015352d
commit 14f2fd1995
2 changed files with 10 additions and 12 deletions

View File

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

View File

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