Files
frameworks_base/telephony/java/com/android/internal/telephony/ApnSetting.java
Wink Saville 9d7d62801d Do not merge: Revert the revert of "LTE Changes for Telephony including Multiple PDN support and IPV6 support"
This reverts commit eca208fae6
and is the first of the LTE commits in master being back ported
to the LTE branch.

Change-Id: I17d4a1b779ed74bc7dfb409d2c1a30f60fdb27c7
2011-03-14 12:25:04 -07:00

187 lines
5.9 KiB
Java

/*
* Copyright (C) 2006 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.telephony;
/**
* This class represents a apn setting for create PDP link
*/
public class ApnSetting {
static final String V2_FORMAT_REGEX = "^\\[ApnSettingV2\\]\\s*";
public String carrier;
public String apn;
public String proxy;
public String port;
public String mmsc;
public String mmsProxy;
public String mmsPort;
public String user;
public String password;
public int authType;
public String[] types;
public int id;
public String numeric;
public String protocol;
public String roamingProtocol;
public boolean enabled;
int timer;
int apnclass;
public ApnSetting(int id, String numeric, String carrier, String apn,
String proxy, String port,
String mmsc, String mmsProxy, String mmsPort,
String user, String password, int authType, String[] types,
String protocol, String roamingProtocol,
boolean enabled, int timer, int apnclass) {
this.id = id;
this.numeric = numeric;
this.carrier = carrier;
this.apn = apn;
this.proxy = proxy;
this.port = port;
this.mmsc = mmsc;
this.mmsProxy = mmsProxy;
this.mmsPort = mmsPort;
this.user = user;
this.password = password;
this.authType = authType;
this.types = types;
this.protocol = protocol;
this.roamingProtocol = roamingProtocol;
this.enabled = enabled;
this.timer = timer;
this.apnclass = apnclass;
}
/**
* Creates an ApnSetting object from a string.
*
* @param data the string to read.
*
* The string must be in one of two formats (newlines added for clarity,
* spaces are optional):
*
* v1 format:
* <carrier>, <apn>, <proxy>, <port>, <mmsc>, <mmsproxy>,
* <mmsport>, <user>, <password>, <authtype>, <mcc>,<mnc>,
* <type>[, <type>...]
*
* v2 format:
* [ApnSettingV2] <carrier>, <apn>, <proxy>, <port>, <mmsc>, <mmsproxy>,
* <mmsport>, <user>, <password, <authtype>, <mcc>, <mnc>,
* <type>[| <type>...], <protocol>, <roaming_protocol>, <enabled>, <timer>, <apnclass>
*
* Note that the strings generated by toString() do not contain the username
* and password and thus cannot be read by this method.
*
* @see ApnSettingTest
*/
public static ApnSetting fromString(String data) {
if (data == null) return null;
int version;
// matches() operates on the whole string, so append .* to the regex.
if (data.matches(V2_FORMAT_REGEX + ".*")) {
version = 2;
data = data.replaceFirst(V2_FORMAT_REGEX, "");
} else {
version = 1;
}
String[] a = data.split("\\s*,\\s*");
if (a.length < 14) {
return null;
}
int authType;
try {
authType = Integer.parseInt(a[12]);
} catch (Exception e) {
authType = 0;
}
String[] typeArray;
String protocol, roamingProtocol;
boolean enabled;
int timer, apnclass;
if (version == 1) {
typeArray = new String[a.length - 13];
System.arraycopy(a, 13, typeArray, 0, a.length - 13);
protocol = RILConstants.SETUP_DATA_PROTOCOL_IP;
roamingProtocol = RILConstants.SETUP_DATA_PROTOCOL_IP;
enabled = true;
timer = 0;
apnclass = 0;
} else {
if (a.length < 16) {
return null;
}
typeArray = a[13].split("\\s*\\|\\s*");
protocol = a[14];
roamingProtocol = a[15];
enabled = Integer.parseInt(a[16]) != 0;
timer = Integer.parseInt(a[17]);
apnclass = Integer.parseInt(a[18]);
}
return new ApnSetting(-1,a[10]+a[11],a[0],a[1],a[2],a[3],a[7],a[8],
a[9],a[4],a[5],authType,typeArray,protocol,roamingProtocol,
enabled,timer,apnclass);
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[ApnSettingV2] ")
.append(carrier)
.append(", ").append(id)
.append(", ").append(numeric)
.append(", ").append(apn)
.append(", ").append(proxy)
.append(", ").append(mmsc)
.append(", ").append(mmsProxy)
.append(", ").append(mmsPort)
.append(", ").append(port)
.append(", ").append(authType).append(", ");
for (int i = 0; i < types.length; i++) {
sb.append(types[i]);
if (i < types.length - 1) {
sb.append(" | ");
}
}
sb.append(", ").append(protocol);
sb.append(", ").append(roamingProtocol);
sb.append(", ").append(enabled);
sb.append(", ").append(timer);
sb.append(", ").append(apnclass);
return sb.toString();
}
public boolean canHandleType(String type) {
for (String t : types) {
// DEFAULT handles all, and HIPRI is handled by DEFAULT
if (t.equals(type) || t.equals(Phone.APN_TYPE_ALL) ||
(t.equals(Phone.APN_TYPE_DEFAULT) &&
type.equals(Phone.APN_TYPE_HIPRI))) {
return true;
}
}
return false;
}
}