From a4712140e604a075483714a197513aa7a1d72580 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
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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
Gn*RXM$mQq&

delta 3585
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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 87ac4532c0..ffb372f983 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 2576d7dacd..633ac11812 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 1b65b619ed..eaa8536bdd 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;
-- 
GitLab