Merge "Support VPN Proxy(1/2)"

This commit is contained in:
Chalard Jean
2019-03-08 00:34:25 +00:00
committed by Gerrit Code Review
2 changed files with 31 additions and 3 deletions

View File

@@ -18,6 +18,8 @@ package com.android.internal.net;
import android.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.net.ProxyInfo;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -46,6 +48,10 @@ public class VpnProfile implements Cloneable, Parcelable {
public static final int TYPE_IPSEC_HYBRID_RSA = 5;
public static final int TYPE_MAX = 5;
// Match these constants with R.array.vpn_proxy_settings.
public static final int PROXY_NONE = 0;
public static final int PROXY_MANUAL = 1;
// Entity fields.
@UnsupportedAppUsage
public final String key; // -1
@@ -68,6 +74,7 @@ public class VpnProfile implements Cloneable, Parcelable {
public String ipsecUserCert = ""; // 12
public String ipsecCaCert = ""; // 13
public String ipsecServerCert = "";// 14
public ProxyInfo proxy = null; // 15~18
// Helper fields.
@UnsupportedAppUsage
@@ -96,6 +103,7 @@ public class VpnProfile implements Cloneable, Parcelable {
ipsecCaCert = in.readString();
ipsecServerCert = in.readString();
saveLogin = in.readInt() != 0;
proxy = in.readParcelable(null);
}
@Override
@@ -117,6 +125,7 @@ public class VpnProfile implements Cloneable, Parcelable {
out.writeString(ipsecCaCert);
out.writeString(ipsecServerCert);
out.writeInt(saveLogin ? 1 : 0);
out.writeParcelable(proxy, flags);
}
@UnsupportedAppUsage
@@ -127,8 +136,8 @@ public class VpnProfile implements Cloneable, Parcelable {
}
String[] values = new String(value, StandardCharsets.UTF_8).split("\0", -1);
// There can be 14 or 15 values in ICS MR1.
if (values.length < 14 || values.length > 15) {
// There can be 14 - 19 Bytes in values.length.
if (values.length < 14 || values.length > 19) {
return null;
}
@@ -151,7 +160,18 @@ public class VpnProfile implements Cloneable, Parcelable {
profile.ipsecUserCert = values[12];
profile.ipsecCaCert = values[13];
profile.ipsecServerCert = (values.length > 14) ? values[14] : "";
if (values.length > 15) {
String host = (values.length > 15) ? values[15] : "";
String port = (values.length > 16) ? values[16] : "";
String exclList = (values.length > 17) ? values[17] : "";
String pacFileUrl = (values.length > 18) ? values[18] : "";
if (pacFileUrl.isEmpty()) {
profile.proxy = new ProxyInfo(host, port.isEmpty() ?
0 : Integer.parseInt(port), exclList);
} else {
profile.proxy = new ProxyInfo(pacFileUrl);
}
} // else profle.proxy = null
profile.saveLogin = !profile.username.isEmpty() || !profile.password.isEmpty();
return profile;
} catch (Exception e) {
@@ -176,6 +196,13 @@ public class VpnProfile implements Cloneable, Parcelable {
builder.append('\0').append(ipsecUserCert);
builder.append('\0').append(ipsecCaCert);
builder.append('\0').append(ipsecServerCert);
if (proxy != null) {
builder.append('\0').append(proxy.getHost() != null ? proxy.getHost() : "");
builder.append('\0').append(proxy.getPort());
builder.append('\0').append(proxy.getExclusionListAsString() != null ?
proxy.getExclusionListAsString() : "");
builder.append('\0').append(proxy.getPacFileUrl().toString());
}
return builder.toString().getBytes(StandardCharsets.UTF_8);
}

View File

@@ -1840,6 +1840,7 @@ public class Vpn {
config.interfaze = iface;
config.session = profile.name;
config.isMetered = false;
config.proxyInfo = profile.proxy;
config.addLegacyRoutes(profile.routes);
if (!profile.dnsServers.isEmpty()) {