diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2012-07-19 17:26:39 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-07-19 17:26:39 -0700 |
| commit | c5e4125c7d45bb3db03633cebcbf301b804fa47b (patch) | |
| tree | 8c76c31b3fa4800fd10e171770d4d5a3881bbb37 /core/java | |
| parent | ff705452124c6ae331f244e288f473a677a770a9 (diff) | |
| parent | 971a3cfa51b89aa0f3ab47ee082f05586a1f16f0 (diff) | |
Merge "Migrate VpnProfile definition to framework."
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/com/android/internal/net/VpnProfile.java | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/core/java/com/android/internal/net/VpnProfile.java b/core/java/com/android/internal/net/VpnProfile.java new file mode 100644 index 000000000000..154b16bf5bb5 --- /dev/null +++ b/core/java/com/android/internal/net/VpnProfile.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.net; + +import java.nio.charset.Charsets; + +/** + * Parcel-like entity class for VPN profiles. To keep things simple, all + * fields are package private. Methods are provided for serialization, so + * storage can be implemented easily. Two rules are set for this class. + * First, all fields must be kept non-null. Second, always make a copy + * using clone() before modifying. + * + * @hide + */ +public class VpnProfile implements Cloneable { + // Match these constants with R.array.vpn_types. + public static final int TYPE_PPTP = 0; + public static final int TYPE_L2TP_IPSEC_PSK = 1; + public static final int TYPE_L2TP_IPSEC_RSA = 2; + public static final int TYPE_IPSEC_XAUTH_PSK = 3; + public static final int TYPE_IPSEC_XAUTH_RSA = 4; + public static final int TYPE_IPSEC_HYBRID_RSA = 5; + public static final int TYPE_MAX = 5; + + // Entity fields. + public final String key; // -1 + public String name = ""; // 0 + public int type = TYPE_PPTP; // 1 + public String server = ""; // 2 + public String username = ""; // 3 + public String password = ""; // 4 + public String dnsServers = ""; // 5 + public String searchDomains = ""; // 6 + public String routes = ""; // 7 + public boolean mppe = true; // 8 + public String l2tpSecret = ""; // 9 + public String ipsecIdentifier = "";// 10 + public String ipsecSecret = ""; // 11 + public String ipsecUserCert = ""; // 12 + public String ipsecCaCert = ""; // 13 + public String ipsecServerCert = "";// 14 + + // Helper fields. + public boolean saveLogin = false; + + public VpnProfile(String key) { + this.key = key; + } + + public static VpnProfile decode(String key, byte[] value) { + try { + if (key == null) { + return null; + } + + String[] values = new String(value, Charsets.UTF_8).split("\0", -1); + // There can be 14 or 15 values in ICS MR1. + if (values.length < 14 || values.length > 15) { + return null; + } + + VpnProfile profile = new VpnProfile(key); + profile.name = values[0]; + profile.type = Integer.valueOf(values[1]); + if (profile.type < 0 || profile.type > TYPE_MAX) { + return null; + } + profile.server = values[2]; + profile.username = values[3]; + profile.password = values[4]; + profile.dnsServers = values[5]; + profile.searchDomains = values[6]; + profile.routes = values[7]; + profile.mppe = Boolean.valueOf(values[8]); + profile.l2tpSecret = values[9]; + profile.ipsecIdentifier = values[10]; + profile.ipsecSecret = values[11]; + profile.ipsecUserCert = values[12]; + profile.ipsecCaCert = values[13]; + profile.ipsecServerCert = (values.length > 14) ? values[14] : ""; + + profile.saveLogin = !profile.username.isEmpty() || !profile.password.isEmpty(); + return profile; + } catch (Exception e) { + // ignore + } + return null; + } + + public byte[] encode() { + StringBuilder builder = new StringBuilder(name); + builder.append('\0').append(type); + builder.append('\0').append(server); + builder.append('\0').append(saveLogin ? username : ""); + builder.append('\0').append(saveLogin ? password : ""); + builder.append('\0').append(dnsServers); + builder.append('\0').append(searchDomains); + builder.append('\0').append(routes); + builder.append('\0').append(mppe); + builder.append('\0').append(l2tpSecret); + builder.append('\0').append(ipsecIdentifier); + builder.append('\0').append(ipsecSecret); + builder.append('\0').append(ipsecUserCert); + builder.append('\0').append(ipsecCaCert); + builder.append('\0').append(ipsecServerCert); + return builder.toString().getBytes(Charsets.UTF_8); + } +} |
