summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakuo Kitame <kitame@gmail.com>2010-07-12 19:27:19 +0900
committerChris Soyars <ctsoyars@gmail.com>2010-07-13 17:58:34 +0000
commit90f7c2ffab9d9cc1025ad9a98e1d55562ee8b50c (patch)
tree20766b8b74187219b6695a6bac7d0b8806cb3bbc
parent8955545ee7037c3e2d8e2d7e7c4e29da59447f92 (diff)
downloadframeworks_base-90f7c2ffab9d9cc1025ad9a98e1d55562ee8b50c.zip
frameworks_base-90f7c2ffab9d9cc1025ad9a98e1d55562ee8b50c.tar.gz
frameworks_base-90f7c2ffab9d9cc1025ad9a98e1d55562ee8b50c.tar.bz2
OpenVPN: Added configurable options cipher, keysize and extra custom arguments.
It would possibly close issues 1177, 1476 and 1519
-rw-r--r--packages/VpnServices/src/com/android/server/vpn/OpenvpnService.java13
-rw-r--r--vpn/java/android/net/vpn/OpenvpnProfile.java49
2 files changed, 59 insertions, 3 deletions
diff --git a/packages/VpnServices/src/com/android/server/vpn/OpenvpnService.java b/packages/VpnServices/src/com/android/server/vpn/OpenvpnService.java
index 1aeb436..6bb6496 100644
--- a/packages/VpnServices/src/com/android/server/vpn/OpenvpnService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/OpenvpnService.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.Scanner;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
@@ -108,11 +109,23 @@ class OpenvpnService extends VpnService<OpenvpnProfile> {
args.add(p.getLocalAddr());
args.add(p.getRemoteAddr());
}
+ if (p.getCipher() != null) {
+ args.add("--cipher");
+ args.add(p.getCipher());
+ }
+ if (p.getKeySize() != null && !p.getKeySize().equals("")) {
+ args.add("--keysize");
+ args.add(p.getKeySize());
+ }
args.add("--up");
args.add("/system/xbin/openvpn-up.sh");
args.add("--script-security");
args.add("2");
+ if (p.getExtra() != null && !p.getExtra().equals("")) {
+ Scanner s = new Scanner(p.getExtra());
+ while(s.hasNext()) args.add(s.next());
+ }
DaemonProxy mtpd = getDaemons().startDaemon(MTPD);
mtpd.sendCommand(args.toArray(new String[args.size()]));
}
diff --git a/vpn/java/android/net/vpn/OpenvpnProfile.java b/vpn/java/android/net/vpn/OpenvpnProfile.java
index 34696fe..f1fd2f6 100644
--- a/vpn/java/android/net/vpn/OpenvpnProfile.java
+++ b/vpn/java/android/net/vpn/OpenvpnProfile.java
@@ -19,7 +19,7 @@ package android.net.vpn;
import android.os.Parcel;
/**
- * The profile for Openvpn type of VPN.
+ * The profile for Openvpn type of VPN.
* {@hide}
*/
public class OpenvpnProfile extends VpnProfile {
@@ -57,6 +57,12 @@ public class OpenvpnProfile extends VpnProfile {
private String mDevice = DEVICE_TUN;
+ private String mCipher;
+
+ private int mKeySize;
+
+ private String mExtra;
+
@Override
public VpnType getType() {
return VpnType.OPENVPN;
@@ -145,11 +151,11 @@ public class OpenvpnProfile extends VpnProfile {
public void setRedirectGateway(boolean b) {
mRedirectGateway = b;
}
-
+
public boolean getRedirectGateway() {
return mRedirectGateway;
}
-
+
public void setSupplyAddr(boolean b) {
mSupplyAddr = b;
}
@@ -174,6 +180,37 @@ public class OpenvpnProfile extends VpnProfile {
return mRemoteAddr;
}
+ public void setCipher(String cipher) {
+ mCipher = cipher;
+ }
+
+ public String getCipher() {
+ return mCipher;
+ }
+
+ public void setKeySize(String keysize) {
+ try {
+ if (keysize.equals("0"))
+ mKeySize = 0;
+ else
+ mKeySize = Integer.parseInt(keysize);
+ } catch (NumberFormatException e) {
+ // no update
+ }
+ }
+
+ public String getKeySize() {
+ return Integer.toString(mKeySize);
+ }
+
+ public void setExtra(String extra) {
+ mExtra = extra;
+ }
+
+ public String getExtra() {
+ return mExtra;
+ }
+
@Override
protected void readFromParcel(Parcel in) {
super.readFromParcel(in);
@@ -188,6 +225,9 @@ public class OpenvpnProfile extends VpnProfile {
mLocalAddr = in.readString();
mRemoteAddr = in.readString();
mDevice = in.readString();
+ mCipher = in.readString();
+ mKeySize = in.readInt();
+ mExtra = in.readString();
}
@Override
@@ -204,5 +244,8 @@ public class OpenvpnProfile extends VpnProfile {
parcel.writeString(mLocalAddr);
parcel.writeString(mRemoteAddr);
parcel.writeString(mDevice);
+ parcel.writeString(mCipher);
+ parcel.writeInt(mKeySize);
+ parcel.writeString(mExtra);
}
}