From 939901a89abb169648423473056260335d3af639 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Thu, 6 Apr 2023 01:08:05 +0200 Subject: first pass on obfs4-hop pt integration --- .../blinkt/openvpn/core/connection/Connection.java | 56 ++++++++++++++++++++-- .../openvpn/core/connection/Obfs4Connection.java | 6 +-- .../core/connection/Obfs4HopConnection.java | 48 +++++++++++++++++++ 3 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4HopConnection.java (limited to 'app/src/main/java/de/blinkt/openvpn/core/connection') diff --git a/app/src/main/java/de/blinkt/openvpn/core/connection/Connection.java b/app/src/main/java/de/blinkt/openvpn/core/connection/Connection.java index 137b3f16..6dc78a30 100644 --- a/app/src/main/java/de/blinkt/openvpn/core/connection/Connection.java +++ b/app/src/main/java/de/blinkt/openvpn/core/connection/Connection.java @@ -5,6 +5,8 @@ package de.blinkt.openvpn.core.connection; +import static de.blinkt.openvpn.core.connection.Connection.TransportType.*; + import android.text.TextUtils; import com.google.gson.annotations.JsonAdapter; @@ -42,7 +44,7 @@ public abstract class Connection implements Serializable, Cloneable { TCP("tcp"), KCP("kcp"); - String protocol; + final String protocol; TransportProtocol(String transportProtocol) { this.protocol = transportProtocol; @@ -55,11 +57,12 @@ public abstract class Connection implements Serializable, Cloneable { } public enum TransportType { OBFS4("obfs4"), + OBFS4_HOP("obfs4Hop"), OPENVPN("openvpn"), PT("metaTransport"); - String transport; + final String transport; TransportType(String transportType) { this.transport = transportType; @@ -70,12 +73,57 @@ public abstract class Connection implements Serializable, Cloneable { return transport; } + public int toInt() { + switch (this) { + case PT: + return 0; + case OPENVPN: + return 1; + case OBFS4: + return 2; + case OBFS4_HOP: + return 3; + default: + return -1; + } + } + + public static TransportType fromString(String value) { + switch (value) { + case "obfs4": + return OBFS4; + case "obfs4-hop": + return OBFS4_HOP; + case "metaTransport": + return PT; + case "openvpn": + return OPENVPN; + default: + throw new IllegalArgumentException(value + " is not a valid value for TransportType."); + } + } + + public static TransportType fromInt(int value) { + switch (value) { + case 0: + return PT; + case 1: + return OPENVPN; + case 2: + return OBFS4; + case 3: + return OBFS4_HOP; + default: + return null; + } + } + public boolean isPluggableTransport() { - return this == OBFS4 || this == PT; + return this == OBFS4 || this == OBFS4_HOP || this == PT; } public TransportType getMetaType() { - if (this == OBFS4 || this == PT) { + if (this == OBFS4 || this == OBFS4_HOP || this == PT) { return PT; } return OPENVPN; diff --git a/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4Connection.java b/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4Connection.java index c77c23fd..73bfccdc 100644 --- a/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4Connection.java +++ b/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4Connection.java @@ -19,8 +19,8 @@ public class Obfs4Connection extends Connection { public Obfs4Connection(Obfs4Options options) { if (useObfsVpn()) { - setServerName(options.remoteIP); - setServerPort(options.remotePort); + setServerName(options.gatewayIP); + setServerPort(options.transport.getPorts()[0]); setProxyName(ObfsVpnClient.SOCKS_IP); setProxyPort(String.valueOf(ObfsVpnClient.SOCKS_PORT.get())); setProxyType(ProxyType.SOCKS5); @@ -53,7 +53,7 @@ public class Obfs4Connection extends Connection { } - public Obfs4Options getDispatcherOptions() { + public Obfs4Options getObfs4Options() { return options; } diff --git a/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4HopConnection.java b/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4HopConnection.java new file mode 100644 index 00000000..f983ae20 --- /dev/null +++ b/app/src/main/java/de/blinkt/openvpn/core/connection/Obfs4HopConnection.java @@ -0,0 +1,48 @@ +package de.blinkt.openvpn.core.connection; + +import se.leap.bitmaskclient.pluggableTransports.HoppingObfsVpnClient; +import se.leap.bitmaskclient.pluggableTransports.Obfs4Options; + + +/** + * Created by cyberta on 08.03.19. + */ + +public class Obfs4HopConnection extends Connection { + + private static final String TAG = Obfs4HopConnection.class.getName(); + private Obfs4Options options; + + public Obfs4HopConnection(Obfs4Options options) { + setServerName(HoppingObfsVpnClient.IP); + setServerPort(String.valueOf(HoppingObfsVpnClient.PORT)); + setProxyName(""); + setProxyPort(""); + setProxyType(ProxyType.NONE); + + + setUseUdp(true); + setProxyAuthUser(null); + setProxyAuthPassword(null); + setUseProxyAuth(false); + this.options = options; + } + + @Override + public Connection clone() throws CloneNotSupportedException { + Obfs4HopConnection connection = (Obfs4HopConnection) super.clone(); + connection.options = this.options; + return connection; + } + + @Override + public TransportType getTransportType() { + return TransportType.OBFS4_HOP; + } + + + public Obfs4Options getObfs4Options() { + return options; + } + +} -- cgit v1.2.3