/* * Copyright (c) 2012-2016 Arne Schwabe * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt */ package de.blinkt.openvpn.core; import android.text.TextUtils; import java.io.Serializable; import java.util.Locale; public class Connection implements Serializable, Cloneable { public String mServerName = "openvpn.example.com"; public String mServerPort = "1194"; public boolean mUseUdp = true; public String mCustomConfiguration = ""; public boolean mUseCustomConfig = false; public boolean mEnabled = true; public int mConnectTimeout = 0; public static final int CONNECTION_DEFAULT_TIMEOUT = 120; public ProxyType mProxyType = ProxyType.NONE; public String mProxyName = "proxy.example.com"; public String mProxyPort = "8080"; public boolean mUseProxyAuth; public String mProxyAuthUser = null; public String mProxyAuthPassword = null; public enum ProxyType { NONE, HTTP, SOCKS5, ORBOT } private static final long serialVersionUID = 92031902903829089L; public String getConnectionBlock(boolean isOpenVPN3) { String cfg = ""; // Server Address cfg += "remote "; cfg += mServerName; cfg += " "; cfg += mServerPort; if (mUseUdp) cfg += " udp\n"; else cfg += " tcp-client\n"; if (mConnectTimeout != 0) cfg += String.format(Locale.US, " connect-timeout %d\n", mConnectTimeout); // OpenVPN 2.x manages proxy connection via management interface if ((isOpenVPN3 || usesExtraProxyOptions()) && mProxyType == ProxyType.HTTP) { cfg+=String.format(Locale.US,"http-proxy %s %s\n", mProxyName, mProxyPort); if (mUseProxyAuth) cfg+=String.format(Locale.US, "\n%s\n%s\n\n", mProxyAuthUser, mProxyAuthPassword); } if (usesExtraProxyOptions() && mProxyType == ProxyType.SOCKS5) { cfg+=String.format(Locale.US,"socks-proxy %s %s\n", mProxyName, mProxyPort); } if (!TextUtils.isEmpty(mCustomConfiguration) && mUseCustomConfig) { cfg += mCustomConfiguration; cfg += "\n"; } return cfg; } public boolean usesExtraProxyOptions() { return (mUseCustomConfig && mCustomConfiguration.contains("http-proxy-option ")); } @Override public Connection clone() throws CloneNotSupportedException { return (Connection) super.clone(); } public boolean isOnlyRemote() { return TextUtils.isEmpty(mCustomConfiguration) || !mUseCustomConfig; } public int getTimeout() { if (mConnectTimeout <= 0) return CONNECTION_DEFAULT_TIMEOUT; else return mConnectTimeout; } }