From 7f1b01bee1809a8b8b59073eb32a3facdcbea848 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Thu, 22 Nov 2012 14:06:14 +0000
Subject: [PATCH] Skeleton of modem plugin.

---
 .../sf/briar/plugins/PluginManagerImpl.java   |  4 +-
 .../sf/briar/plugins/modem/ModemPlugin.java   | 84 +++++++++++++++++++
 .../plugins/modem/ModemPluginFactory.java     | 27 ++++++
 3 files changed, 114 insertions(+), 1 deletion(-)
 create mode 100644 src/net/sf/briar/plugins/modem/ModemPlugin.java
 create mode 100644 src/net/sf/briar/plugins/modem/ModemPluginFactory.java

diff --git a/src/net/sf/briar/plugins/PluginManagerImpl.java b/src/net/sf/briar/plugins/PluginManagerImpl.java
index 110e201c02..ce9799afc2 100644
--- a/src/net/sf/briar/plugins/PluginManagerImpl.java
+++ b/src/net/sf/briar/plugins/PluginManagerImpl.java
@@ -52,7 +52,8 @@ class PluginManagerImpl implements PluginManager {
 	private static final String[] ANDROID_DUPLEX_FACTORIES = new String[] {
 		"net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory",
 		"net.sf.briar.plugins.tcp.LanTcpPluginFactory",
-		"net.sf.briar.plugins.tcp.WanTcpPluginFactory"
+		"net.sf.briar.plugins.tcp.WanTcpPluginFactory",
+		"net.sf.briar.plugins.tor.TorPluginFactory"
 	};
 
 	private static final String[] J2SE_SIMPLEX_FACTORIES = new String[] {
@@ -61,6 +62,7 @@ class PluginManagerImpl implements PluginManager {
 
 	private static final String[] J2SE_DUPLEX_FACTORIES = new String[] {
 		"net.sf.briar.plugins.bluetooth.BluetoothPluginFactory",
+		"net.sf.briar.plugins.modem.ModemPluginFactory",
 		"net.sf.briar.plugins.tcp.LanTcpPluginFactory",
 		"net.sf.briar.plugins.tcp.WanTcpPluginFactory",
 		"net.sf.briar.plugins.tor.TorPluginFactory"
diff --git a/src/net/sf/briar/plugins/modem/ModemPlugin.java b/src/net/sf/briar/plugins/modem/ModemPlugin.java
new file mode 100644
index 0000000000..b985fbb644
--- /dev/null
+++ b/src/net/sf/briar/plugins/modem/ModemPlugin.java
@@ -0,0 +1,84 @@
+package net.sf.briar.plugins.modem;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import net.sf.briar.api.ContactId;
+import net.sf.briar.api.crypto.PseudoRandom;
+import net.sf.briar.api.plugins.PluginCallback;
+import net.sf.briar.api.plugins.PluginExecutor;
+import net.sf.briar.api.plugins.duplex.DuplexPlugin;
+import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
+import net.sf.briar.api.protocol.TransportId;
+import net.sf.briar.util.StringUtils;
+
+class ModemPlugin implements DuplexPlugin {
+
+	private static final byte[] TRANSPORT_ID =
+			StringUtils.fromHexString("8f573867bedf54884b5868ee5d902832" +
+					"ee5e522da84d0d431712bd672fbd2f79" +
+					"262d27b93879b94ee9afbb80e7fc87fb");
+	private static final TransportId ID = new TransportId(TRANSPORT_ID);
+	private static final Logger LOG =
+			Logger.getLogger(ModemPlugin.class.getName());
+
+	private final Executor pluginExecutor;
+	private final PluginCallback callback;
+	private final long pollingInterval;
+
+	ModemPlugin(@PluginExecutor Executor pluginExecutor,
+			PluginCallback callback, long pollingInterval) {
+		this.pluginExecutor = pluginExecutor;
+		this.callback = callback;
+		this.pollingInterval = pollingInterval;
+	}
+
+	public TransportId getId() {
+		return ID;
+	}
+
+	public String getName() {
+		return "MODEM_PLUGIN_NAME";
+	}
+
+	public void start() throws IOException {
+		// FIXME
+	}
+
+	public void stop() throws IOException {
+		// FIXME
+	}
+
+	public boolean shouldPoll() {
+		return true;
+	}
+
+	public long getPollingInterval() {
+		return pollingInterval;
+	}
+
+	public void poll(Collection<ContactId> connected) {
+		// FIXME
+	}
+
+	public DuplexTransportConnection createConnection(ContactId c) {
+		// FIXME
+		return null;
+	}
+
+	public boolean supportsInvitations() {
+		return false;
+	}
+
+	public DuplexTransportConnection sendInvitation(PseudoRandom r,
+			long timeout) {
+		throw new UnsupportedOperationException();
+	}
+
+	public DuplexTransportConnection acceptInvitation(PseudoRandom r,
+			long timeout) {
+		throw new UnsupportedOperationException();
+	}
+}
diff --git a/src/net/sf/briar/plugins/modem/ModemPluginFactory.java b/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
new file mode 100644
index 0000000000..5b2c4fab1d
--- /dev/null
+++ b/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
@@ -0,0 +1,27 @@
+package net.sf.briar.plugins.modem;
+
+import java.util.concurrent.Executor;
+
+import org.h2.util.StringUtils;
+
+import net.sf.briar.api.android.AndroidExecutor;
+import net.sf.briar.api.lifecycle.ShutdownManager;
+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.DuplexPluginFactory;
+import android.content.Context;
+
+public class ModemPluginFactory implements DuplexPluginFactory {
+
+	private static final long POLLING_INTERVAL = 60L * 60L * 1000L; // 1 hour
+
+	public DuplexPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
+			AndroidExecutor androidExecutor, Context appContext,
+			ShutdownManager shutdownManager, DuplexPluginCallback callback) {
+		// This plugin is not enabled by default
+		String enabled = callback.getConfig().get("enabled");
+		if(StringUtils.isNullOrEmpty(enabled)) return null;
+		return new ModemPlugin(pluginExecutor, callback, POLLING_INTERVAL);
+	}
+}
-- 
GitLab