From 3b3ab6fd1af75f1e8e5c0da8c59a6a5146ae141f Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Sat, 15 Dec 2012 16:02:35 +0000
Subject: [PATCH] Empty transport configs/properties should be treated the same
 as nulls.

---
 .../plugins/bluetooth/BluetoothPlugin.java    | 25 +++++++++---------
 .../plugins/droidtooth/DroidtoothPlugin.java  | 23 ++++++++--------
 .../sf/briar/plugins/modem/ModemPlugin.java   | 10 ++++---
 .../plugins/modem/ModemPluginFactory.java     |  3 +--
 .../sf/briar/plugins/tcp/LanTcpPlugin.java    |  3 ++-
 .../net/sf/briar/plugins/tcp/TcpPlugin.java   | 26 ++++++++++---------
 .../sf/briar/plugins/tcp/WanTcpPlugin.java    |  3 ++-
 .../net/sf/briar/plugins/tor/TorPlugin.java   |  9 ++++---
 .../briar/plugins/tor/TorPluginFactory.java   |  3 +--
 .../src/net/sf/briar/util/StringUtils.java    |  4 +++
 .../sf/briar/plugins/tor/TorPluginTest.java   |  2 +-
 11 files changed, 62 insertions(+), 49 deletions(-)

diff --git a/briar-core/src/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java b/briar-core/src/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
index 194f6c6eec..a8a4b4e105 100644
--- a/briar-core/src/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
@@ -178,18 +178,18 @@ class BluetoothPlugin implements DuplexPlugin {
 			final ContactId c = e.getKey();
 			if(connected.contains(c)) continue;
 			final String address = e.getValue().get("address");
+			if(StringUtils.isNullOrEmpty(address)) continue;
 			final String uuid = e.getValue().get("uuid");
-			if(address != null && uuid != null) {
-				pluginExecutor.execute(new Runnable() {
-					public void run() {
-						if(!running) return;
-						String url = makeUrl(address, uuid);
-						DuplexTransportConnection conn = connect(url);
-						if(conn != null)
-							callback.outgoingConnectionCreated(c, conn);
-					}
-				});
-			}
+			if(StringUtils.isNullOrEmpty(uuid)) continue;
+			pluginExecutor.execute(new Runnable() {
+				public void run() {
+					if(!running) return;
+					String url = makeUrl(address, uuid);
+					DuplexTransportConnection conn = connect(url);
+					if(conn != null)
+						callback.outgoingConnectionCreated(c, conn);
+				}
+			});
 		}
 	}
 
@@ -208,8 +208,9 @@ class BluetoothPlugin implements DuplexPlugin {
 		TransportProperties p = callback.getRemoteProperties().get(c);
 		if(p == null) return null;
 		String address = p.get("address");
+		if(StringUtils.isNullOrEmpty(address)) return null;
 		String uuid = p.get("uuid");
-		if(address == null || uuid == null) return null;
+		if(StringUtils.isNullOrEmpty(uuid)) return null;
 		String url = makeUrl(address, uuid);
 		return connect(url);
 	}
diff --git a/briar-core/src/net/sf/briar/plugins/droidtooth/DroidtoothPlugin.java b/briar-core/src/net/sf/briar/plugins/droidtooth/DroidtoothPlugin.java
index cac515891d..95e9fa0219 100644
--- a/briar-core/src/net/sf/briar/plugins/droidtooth/DroidtoothPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/droidtooth/DroidtoothPlugin.java
@@ -210,17 +210,17 @@ class DroidtoothPlugin implements DuplexPlugin {
 			final ContactId c = e.getKey();
 			if(connected.contains(c)) continue;
 			final String address = e.getValue().get("address");
+			if(StringUtils.isNullOrEmpty(address)) continue;
 			final String uuid = e.getValue().get("uuid");
-			if(address != null && uuid != null) {
-				pluginExecutor.execute(new Runnable() {
-					public void run() {
-						if(!running) return;
-						DuplexTransportConnection conn = connect(address, uuid);
-						if(conn != null)
-							callback.outgoingConnectionCreated(c, conn);
-					}
-				});
-			}
+			if(StringUtils.isNullOrEmpty(uuid)) continue;
+			pluginExecutor.execute(new Runnable() {
+				public void run() {
+					if(!running) return;
+					DuplexTransportConnection conn = connect(address, uuid);
+					if(conn != null)
+						callback.outgoingConnectionCreated(c, conn);
+				}
+			});
 		}
 	}
 
@@ -256,8 +256,9 @@ class DroidtoothPlugin implements DuplexPlugin {
 		TransportProperties p = callback.getRemoteProperties().get(c);
 		if(p == null) return null;
 		String address = p.get("address");
+		if(StringUtils.isNullOrEmpty(address)) return null;
 		String uuid = p.get("uuid");
-		if(address == null || uuid == null) return null;
+		if(StringUtils.isNullOrEmpty(uuid)) return null;
 		return connect(address, uuid);
 	}
 
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 e77444d027..975b3d5977 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java
@@ -19,6 +19,7 @@ import java.util.logging.Logger;
 
 import jssc.SerialPortList;
 import net.sf.briar.api.ContactId;
+import net.sf.briar.api.TransportConfig;
 import net.sf.briar.api.TransportProperties;
 import net.sf.briar.api.crypto.PseudoRandom;
 import net.sf.briar.api.plugins.PluginExecutor;
@@ -145,7 +146,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
 		while(it.hasNext() && running) {
 			ContactId c = it.next();
 			String number = remote.get(c).get("number");
-			if(number == null) continue;
+			if(StringUtils.isNullOrEmpty(number)) continue;
 			try {
 				if(!modem.dial(number)) continue;
 			} catch(IOException e) {
@@ -170,10 +171,13 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
 
 	public DuplexTransportConnection createConnection(ContactId c) {
 		if(!running) return null;
-		final Map<ContactId, TransportProperties> remote =
+		TransportConfig config = callback.getConfig();
+		String fromIso = config.get("iso3166");
+		if(StringUtils.isNullOrEmpty(fromIso)) return null;
+		Map<ContactId, TransportProperties> remote =
 				callback.getRemoteProperties();
 		String number = remote.get(c).get("number");
-		if(number == null) return null;
+		if(StringUtils.isNullOrEmpty(number)) return null;
 		try {
 			if(!modem.dial(number)) return null;
 		} catch(IOException e) {
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java b/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
index 272a76a297..d01ec6ab8b 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
@@ -8,8 +8,7 @@ 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;
+import net.sf.briar.util.StringUtils;
 
 public class ModemPluginFactory implements DuplexPluginFactory {
 
diff --git a/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java b/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java
index 0d9350006a..dc515219c7 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java
@@ -67,7 +67,8 @@ class LanTcpPlugin extends TcpPlugin {
 		String addrString = p.get("address");
 		String portString = p.get("port");
 		InetAddress addr = null;
-		if(addrString != null && portString != null) {
+		if(!StringUtils.isNullOrEmpty(addrString) &&
+				!StringUtils.isNullOrEmpty(portString)) {
 			try {
 				addr = InetAddress.getByName(addrString);
 				int port = Integer.valueOf(portString);
diff --git a/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java b/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java
index d9d4da9ab4..61432c4183 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java
@@ -22,6 +22,7 @@ import net.sf.briar.api.plugins.PluginExecutor;
 import net.sf.briar.api.plugins.duplex.DuplexPlugin;
 import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
 import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
+import net.sf.briar.util.StringUtils;
 
 abstract class TcpPlugin implements DuplexPlugin {
 
@@ -165,8 +166,8 @@ abstract class TcpPlugin implements DuplexPlugin {
 	public DuplexTransportConnection createConnection(ContactId c) {
 		if(!running) return null;
 		SocketAddress addr = getRemoteSocketAddress(c);
+		if(addr == null) return null;
 		Socket s = new Socket();
-		if(addr == null || s == null) return null;
 		try {
 			s.setSoTimeout(0);
 			s.connect(addr);
@@ -181,18 +182,19 @@ abstract class TcpPlugin implements DuplexPlugin {
 		TransportProperties p = callback.getRemoteProperties().get(c);
 		if(p == null) return null;
 		String addrString = p.get("address");
+		if(StringUtils.isNullOrEmpty(addrString)) return null;
 		String portString = p.get("port");
-		if(addrString != null && portString != null) {
-			try {
-				InetAddress addr = InetAddress.getByName(addrString);
-				int port = Integer.valueOf(portString);
-				return new InetSocketAddress(addr, port);
-			} catch(NumberFormatException e) {
-				if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
-			} catch(UnknownHostException e) {
-				if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
-			}
+		if(StringUtils.isNullOrEmpty(portString)) return null;
+		try {
+			InetAddress addr = InetAddress.getByName(addrString);
+			int port = Integer.valueOf(portString);
+			return new InetSocketAddress(addr, port);
+		} catch(NumberFormatException e) {
+			if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+			return null;
+		} catch(UnknownHostException e) {
+			if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+			return null;
 		}
-		return null;
 	}
 }
diff --git a/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java b/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java
index a2c115ed56..264c3906e5 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java
@@ -61,7 +61,8 @@ class WanTcpPlugin extends TcpPlugin {
 		String portString = p.get("port");
 		InetAddress addr = null;
 		int port = 0;
-		if(addrString != null && portString != null) {
+		if(!StringUtils.isNullOrEmpty(addrString) &&
+				!StringUtils.isNullOrEmpty(portString)) {
 			try {
 				addr = InetAddress.getByName(addrString);
 				port = Integer.valueOf(portString);
diff --git a/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java b/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java
index a8368450e6..71d60b47bf 100644
--- a/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java
@@ -95,9 +95,10 @@ class TorPlugin implements DuplexPlugin {
 			connected = true;
 			notifyAll();
 		}
-		// If we're configure not to create a hidden service, return
+		// If we're configured not to create a hidden service, return
 		TransportConfig c = callback.getConfig();
-		if(c.containsKey("noHiddenService")) {
+		String noHiddenService = c.get("noHiddenService");
+		if(!StringUtils.isNullOrEmpty(noHiddenService)) {
 			if(LOG.isLoggable(INFO)) LOG.info("Not creating hidden service");
 			TransportProperties p = new TransportProperties();
 			p.put("onion", null);
@@ -108,7 +109,7 @@ class TorPlugin implements DuplexPlugin {
 		TorHiddenServicePrivateNetAddress addr;
 		TorNetLayerUtil util = TorNetLayerUtil.getInstance();
 		String privateKey = c.get("privateKey");
-		if(privateKey == null) {
+		if(StringUtils.isNullOrEmpty(privateKey)) {
 			if(LOG.isLoggable(INFO))
 				LOG.info("Creating hidden service address");
 			addr = createHiddenServiceAddress(util);
@@ -264,7 +265,7 @@ class TorPlugin implements DuplexPlugin {
 		TransportProperties p = callback.getRemoteProperties().get(c);
 		if(p == null) return null;
 		String onion = p.get("onion");
-		if(onion == null) return null;
+		if(StringUtils.isNullOrEmpty(onion)) return null;
 		NetAddress addr = new TcpipNetAddress(onion, 80);
 		try {
 			if(LOG.isLoggable(INFO)) LOG.info("Connecting to hidden service");
diff --git a/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java b/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java
index c87bdef779..dc87cf2ab9 100644
--- a/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java
+++ b/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java
@@ -7,8 +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 org.h2.util.StringUtils;
+import net.sf.briar.util.StringUtils;
 
 public class TorPluginFactory implements DuplexPluginFactory {
 
diff --git a/briar-core/src/net/sf/briar/util/StringUtils.java b/briar-core/src/net/sf/briar/util/StringUtils.java
index acfdd3a911..e6017068bb 100644
--- a/briar-core/src/net/sf/briar/util/StringUtils.java
+++ b/briar-core/src/net/sf/briar/util/StringUtils.java
@@ -7,6 +7,10 @@ public class StringUtils {
 		'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
 	};
 
+	public static boolean isNullOrEmpty(String s) {
+		return s == null || s.isEmpty();
+	}
+
 	/**
 	 * Trims the given string to the given length, returning the head and
 	 * appending "..." if the string was trimmed.
diff --git a/briar-tests/src/net/sf/briar/plugins/tor/TorPluginTest.java b/briar-tests/src/net/sf/briar/plugins/tor/TorPluginTest.java
index a876cb496c..c217e6605c 100644
--- a/briar-tests/src/net/sf/briar/plugins/tor/TorPluginTest.java
+++ b/briar-tests/src/net/sf/briar/plugins/tor/TorPluginTest.java
@@ -42,7 +42,7 @@ public class TorPluginTest extends BriarTestCase {
 			assertTrue(onion.endsWith(".onion"));
 			// Create another plugin instance for the client
 			Callback clientCallback = new Callback();
-			clientCallback.config.put("noHiddenService", "");
+			clientCallback.config.put("noHiddenService", "true");
 			TransportProperties p = new TransportProperties();
 			p.put("onion", onion);
 			clientCallback.remote.put(contactId, p);
-- 
GitLab