From a4712140e604a075483714a197513aa7a1d72580 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 6 Dec 2012 15:09:04 +0000 Subject: [PATCH] Made serial port's state volatile, added method for stopping modem. --- briar-core/libs/jssc-0.9-briar.jar | Bin 120364 -> 120365 bytes .../src/net/sf/briar/plugins/modem/Modem.java | 8 +++++++- .../net/sf/briar/plugins/modem/ModemImpl.java | 19 ++++++++++++++---- .../sf/briar/plugins/modem/ModemPlugin.java | 11 ++++++++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/briar-core/libs/jssc-0.9-briar.jar b/briar-core/libs/jssc-0.9-briar.jar index e977fe43f8f79abde82413a41ea140a5b6c2cdbf..3c4ae47c7c60ac49e6d25798daecba9eabc0cd83 100644 GIT binary patch delta 3605 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 diff --git a/briar-core/src/net/sf/briar/plugins/modem/Modem.java b/briar-core/src/net/sf/briar/plugins/modem/Modem.java index 87ac4532c..ffb372f98 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/Modem.java +++ b/briar-core/src/net/sf/briar/plugins/modem/Modem.java @@ -13,7 +13,13 @@ interface Modem { /** * Call this method after creating the modem and before making any calls. */ - void init() throws IOException; + void start() throws IOException; + + /** + * Call this method when the modem is no longer needed. If a call is in + * progress it will be terminated. + */ + void stop() throws IOException; /** * Initiates an outgoing call and returns true if the call connects. If the diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java index 2576d7dac..633ac1181 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java @@ -51,7 +51,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { reliabilityLayer = new ReliabilityLayer(this); } - public void init() throws IOException { + public void start() throws IOException { if(LOG.isLoggable(INFO)) LOG.info("Initialising"); try { if(!port.openPort()) @@ -90,6 +90,14 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { throw new IOException("Modem did not respond"); } + public void stop() throws IOException { + try { + port.closePort(); + } catch(SerialPortException e) { + throw new IOException(e.toString()); + } + } + public boolean dial(String number) throws IOException { if(!offHook.tryAcquire()) { if(LOG.isLoggable(INFO)) @@ -178,9 +186,8 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { if(LOG.isLoggable(INFO)) LOG.info("Modem status: " + s); if(s.startsWith("CONNECT")) { synchronized(connected) { - if(connected.getAndSet(true)) - throw new IOException("Connected twice"); - connected.notifyAll(); + if(!connected.getAndSet(true)) + connected.notifyAll(); } // There might be data in the buffer as well as text int off = i + 1; @@ -190,6 +197,10 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { reliabilityLayer.handleRead(data); } return; + } else if(s.equals("BUSY") || s.equals("NO DIALTONE")) { + synchronized(connected) { + connected.notifyAll(); + } } else if(s.equals("OK")) { synchronized(initialised) { if(!initialised.getAndSet(true)) diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java index 1b65b619e..eaa8536bd 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java @@ -72,7 +72,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback { LOG.info("Trying to initialise modem on " + portName); modem = modemFactory.createModem(this, portName); try { - modem.init(); + modem.start(); if(LOG.isLoggable(INFO)) LOG.info("Initialised modem on " + portName); running = true; @@ -86,6 +86,13 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback { public void stop() { running = false; + if(modem != null) { + try { + modem.stop(); + } catch(IOException e) { + if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + } + } } private boolean resetModem() { @@ -93,7 +100,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback { for(String portName : SerialPortList.getPortNames()) { modem = modemFactory.createModem(this, portName); try { - modem.init(); + modem.start(); if(LOG.isLoggable(INFO)) LOG.info("Initialised modem on " + portName); return true;