2 * Copyright (C) 2011 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.settings.vpn2;
19 import java.nio.charset.Charsets;
22 * Parcel-like entity class for VPN profiles. To keep things simple, all
23 * fields are package private. Methods are provided for serialization, so
24 * storage can be implemented easily. Two rules are set for this class.
25 * First, all fields must be kept non-null. Second, always make a copy
26 * using clone() before modifying.
28 class VpnProfile implements Cloneable {
29 // Match these constants with R.array.vpn_types.
30 static final int TYPE_PPTP = 0;
31 static final int TYPE_L2TP_IPSEC_PSK = 1;
32 static final int TYPE_L2TP_IPSEC_RSA = 2;
33 static final int TYPE_IPSEC_XAUTH_PSK = 3;
34 static final int TYPE_IPSEC_XAUTH_RSA = 4;
35 static final int TYPE_IPSEC_HYBRID_RSA = 5;
36 static final int TYPE_MAX = 5;
39 final String key; // -1
40 String name = ""; // 0
41 int type = TYPE_PPTP; // 1
42 String server = ""; // 2
43 String username = ""; // 3
44 String password = ""; // 4
45 String dnsServers = ""; // 5
46 String searchDomains = ""; // 6
47 String routes = ""; // 7
48 boolean mppe = true; // 8
49 String l2tpSecret = ""; // 9
50 String ipsecIdentifier = "";// 10
51 String ipsecSecret = ""; // 11
52 String ipsecUserCert = ""; // 12
53 String ipsecCaCert = ""; // 13
54 String ipsecServerCert = "";// 14
57 boolean saveLogin = false;
59 VpnProfile(String key) {
63 static VpnProfile decode(String key, byte[] value) {
69 String[] values = new String(value, Charsets.UTF_8).split("\0", -1);
70 // There can be 14 or 15 values in ICS MR1.
71 if (values.length < 14 || values.length > 15) {
75 VpnProfile profile = new VpnProfile(key);
76 profile.name = values[0];
77 profile.type = Integer.valueOf(values[1]);
78 if (profile.type < 0 || profile.type > TYPE_MAX) {
81 profile.server = values[2];
82 profile.username = values[3];
83 profile.password = values[4];
84 profile.dnsServers = values[5];
85 profile.searchDomains = values[6];
86 profile.routes = values[7];
87 profile.mppe = Boolean.valueOf(values[8]);
88 profile.l2tpSecret = values[9];
89 profile.ipsecIdentifier = values[10];
90 profile.ipsecSecret = values[11];
91 profile.ipsecUserCert = values[12];
92 profile.ipsecCaCert = values[13];
93 profile.ipsecServerCert = (values.length > 14) ? values[14] : "";
95 profile.saveLogin = !profile.username.isEmpty() || !profile.password.isEmpty();
97 } catch (Exception e) {
104 StringBuilder builder = new StringBuilder(name);
105 builder.append('\0').append(type);
106 builder.append('\0').append(server);
107 builder.append('\0').append(saveLogin ? username : "");
108 builder.append('\0').append(saveLogin ? password : "");
109 builder.append('\0').append(dnsServers);
110 builder.append('\0').append(searchDomains);
111 builder.append('\0').append(routes);
112 builder.append('\0').append(mppe);
113 builder.append('\0').append(l2tpSecret);
114 builder.append('\0').append(ipsecIdentifier);
115 builder.append('\0').append(ipsecSecret);
116 builder.append('\0').append(ipsecUserCert);
117 builder.append('\0').append(ipsecCaCert);
118 builder.append('\0').append(ipsecServerCert);
119 return builder.toString().getBytes(Charsets.UTF_8);