summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2019-08-01 23:16:22 +0200
committercyBerta <cyberta@riseup.net>2019-08-02 01:49:37 +0200
commit5a883a2119500c1d25a7f7dc650f62d5262cb9cc (patch)
tree7336b7f0a8ca12074a24018aee56ca4246bf9dac
parent8a5c789dca4c06d6b8a9479dd97d6476af6bbb3f (diff)
add Shapeshifter class managing shapeshifter go library
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java32
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/pluggableTransports/Shapeshifter.java48
2 files changed, 66 insertions, 14 deletions
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
index 32e00f86..6f817323 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -47,6 +47,7 @@ import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.VpnNotificationManager;
import se.leap.bitmaskclient.pluggableTransports.Dispatcher;
import de.blinkt.openvpn.core.connection.Obfs4Connection;
+import se.leap.bitmaskclient.pluggableTransports.Shapeshifter;
import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_CONNECTED;
import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT;
@@ -88,7 +89,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
private Toast mlastToast;
private Runnable mOpenVPNThread;
private VpnNotificationManager notificationManager;
- private Dispatcher dispatcher;
+ private Shapeshifter shapeshifter;
private static final int PRIORITY_MIN = -2;
private static final int PRIORITY_DEFAULT = 0;
@@ -246,9 +247,12 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
if(isVpnRunning()) {
if (getManagement() != null && getManagement().stopVPN(replaceConnection)) {
if (!replaceConnection) {
- if (dispatcher != null && dispatcher.isRunning()) {
- dispatcher.stop();
+ if (shapeshifter != null) {
+ shapeshifter.stop();
}
+ /*if (dispatcher != null && dispatcher.isRunning()) {
+ dispatcher.stop();
+ }*/
VpnStatus.updateStateString("NOPROCESS", "VPN STOPPED", R.string.state_noprocess, ConnectionStatus.LEVEL_NOTCONNECTED);
}
return true;
@@ -256,9 +260,12 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
return false;
} else {
if (!replaceConnection) {
- if (dispatcher != null && dispatcher.isRunning()) {
- dispatcher.stop();
+ if (shapeshifter != null) {
+ shapeshifter.stop();
}
+ /*if (dispatcher != null && dispatcher.isRunning()) {
+ dispatcher.stop();
+ }*/
VpnStatus.updateStateString("NOPROCESS", "VPN STOPPED", R.string.state_noprocess, ConnectionStatus.LEVEL_NOTCONNECTED);
return true;
}
@@ -387,15 +394,12 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
if (mProfile.mUsePluggableTransports) {
Obfs4Connection obfs4Connection = (Obfs4Connection) connection;
- dispatcher = new Dispatcher(this, obfs4Connection.getDispatcherOptions());
- dispatcher.initSync();
-
- if (dispatcher.isRunning()) {
- connection.setServerPort(dispatcher.getPort());
- Log.d(TAG, "Dispatcher running. Profile server name and port: " +
- connection.getServerName() + ":" + connection.getServerPort());
- VpnStatus.logInfo("Dispatcher running. Profile server name and port: " +
- connection.getServerName() + ":" + connection.getServerPort());
+ //dispatcher = new Dispatcher(this, obfs4Connection.getDispatcherOptions());
+ //dispatcher.initSync();
+ shapeshifter = new Shapeshifter(obfs4Connection.getDispatcherOptions());
+ if (shapeshifter.start()) {
+ // FIXME: we already know the shapeshifter port earlier!
+ connection.setServerPort(Shapeshifter.DISPATCHER_PORT);
} else {
Log.e(TAG, "Cannot initialize dispatcher for obfs4 connection. Shutting down.");
VpnStatus.logError("Cannot initialize dispatcher for obfs4 connection. Shutting down.");
diff --git a/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/Shapeshifter.java b/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/Shapeshifter.java
new file mode 100644
index 00000000..513a310e
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/pluggableTransports/Shapeshifter.java
@@ -0,0 +1,48 @@
+package se.leap.bitmaskclient.pluggableTransports;
+
+import android.util.Log;
+
+import shapeshifter.ShapeShifter;
+
+public class Shapeshifter {
+
+ public static final String DISPATCHER_PORT = "4430";
+ public static final String DISPATCHER_IP = "127.0.0.1";
+ private static final String TAG = Shapeshifter.class.getSimpleName();
+
+ ShapeShifter shapeShifter;
+
+ public Shapeshifter(DispatcherOptions options) {
+ shapeShifter = new ShapeShifter();
+ shapeShifter.setIatMode(Long.valueOf(options.iatMode));
+ shapeShifter.setSocksAddr(DISPATCHER_IP+":"+DISPATCHER_PORT);
+ shapeShifter.setTarget(options.remoteIP+":"+options.remotePort);
+ shapeShifter.setCert(options.cert);
+ Log.d(TAG, "shapeshifter initialized with: iat - " + shapeShifter.getIatMode() +
+ "; socksAddr - " + shapeShifter.getSocksAddr() +
+ "; target addr - " + shapeShifter.getTarget() +
+ "; cert - " + shapeShifter.getCert());
+ }
+
+ public boolean start() {
+ try {
+ shapeShifter.open();
+ Log.d(TAG, "shapeshifter opened");
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ public boolean stop() {
+ try {
+ shapeShifter.close();
+ Log.d(TAG, "shapeshifter closed");
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+}