summaryrefslogtreecommitdiffstats
path: root/telephony/java
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2010-12-29 09:55:29 -0800
committerLorenzo Colitti <lorenzo@google.com>2011-02-28 11:17:05 -0800
commit3c4e929cfdfe5573e1be3ee0331fc6029e45c382 (patch)
tree3533e3560c4e1d895a927bb4bf072674d0c3a06a /telephony/java
parent93faa3239e4bd8d70efb85405bc9c8849ab77897 (diff)
downloadframeworks_base-3c4e929cfdfe5573e1be3ee0331fc6029e45c382.zip
frameworks_base-3c4e929cfdfe5573e1be3ee0331fc6029e45c382.tar.gz
frameworks_base-3c4e929cfdfe5573e1be3ee0331fc6029e45c382.tar.bz2
Add a protocol property to the APNs and use it.
1. Database changes: - Add a protocol and a roaming_protocol column to the carriers table in the telephony provider database. - Set the protocol and roaming_protocol fields when creating APN objects from the database. 2. ApnSetting class changes: - Add protocol and roamingProtocol fields to the ApnSetting class that encapsulates APN settings within the framework. - Add the fields to ApnSetting.toString and support a new syntax containing the fields in ApnSetting.fromString. - Add a unit test for ApnSetting. 3. Telephony changes: - Specify the APN protocol when setting up a data call, using protocol when not roaming and roaming_protocol when roaming. This change depends on #86896 in the telephony provider, which adds the new column to the database schema on upgrades. Bug: 3333633 Change-Id: If3d9ed4c851d0192849df0d64581db03b066e052
Diffstat (limited to 'telephony/java')
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java3
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/ApnSetting.java103
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java10
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java5
4 files changed, 92 insertions, 29 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 9f2a44b..fa80063 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -432,7 +432,8 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
} else {
types = mDefaultApnTypes;
}
- mActiveApn = new ApnSetting(0, "", "", "", "", "", "", "", "", "", "", 0, types);
+ mActiveApn = new ApnSetting(0, "", "", "", "", "", "", "", "", "", "",
+ 0, types, "IP", "IP");
Message msg = obtainMessage();
msg.what = EVENT_DATA_SETUP_COMPLETE;
diff --git a/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java b/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java
index 05527af..e96ad72 100644
--- a/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java
+++ b/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java
@@ -22,6 +22,8 @@ import com.android.internal.telephony.*;
*/
public class ApnSetting {
+ static final String V2_FORMAT_REGEX = "^\\[ApnSettingV2\\]\\s*";
+
String carrier;
String apn;
String proxy;
@@ -35,11 +37,14 @@ public class ApnSetting {
public String[] types;
int id;
String numeric;
+ String protocol;
+ String roamingProtocol;
-
- public ApnSetting(int id, String numeric, String carrier, String apn, String proxy, String port,
+ 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 user, String password, int authType, String[] types,
+ String protocol, String roamingProtocol) {
this.id = id;
this.numeric = numeric;
this.carrier = carrier;
@@ -53,40 +58,81 @@ public class ApnSetting {
this.password = password;
this.authType = authType;
this.types = types;
+ this.protocol = protocol;
+ this.roamingProtocol = roamingProtocol;
}
- // data[0] = name
- // data[1] = apn
- // data[2] = proxy
- // data[3] = port
- // data[4] = username
- // data[5] = password
- // data[6] = server
- // data[7] = mmsc
- // data[8] = mmsproxy
- // data[9] = mmsport
- // data[10] = mcc
- // data[11] = mnc
- // data[12] = auth
- // data[13] = first type...
+ /**
+ * 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>
+ *
+ * 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 = 0;
+ if (a.length < 14) {
+ return null;
+ }
+
+ int authType;
try {
authType = Integer.parseInt(a[12]);
} catch (Exception e) {
+ authType = 0;
}
- String[] typeArray = new String[a.length - 13];
- System.arraycopy(a, 13, typeArray, 0, a.length - 13);
+
+ String[] typeArray;
+ String protocol, roamingProtocol;
+ 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;
+ } else {
+ if (a.length < 16) {
+ return null;
+ }
+ typeArray = a[13].split("\\s*\\|\\s*");
+ protocol = a[14];
+ roamingProtocol = a[15];
+ }
+
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);
+ a[9],a[4],a[5],authType,typeArray,protocol,roamingProtocol);
}
public String toString() {
StringBuilder sb = new StringBuilder();
- sb.append(carrier)
+ sb.append("[ApnSettingV2] ")
+ .append(carrier)
.append(", ").append(id)
.append(", ").append(numeric)
.append(", ").append(apn)
@@ -95,10 +141,15 @@ public class ApnSetting {
.append(", ").append(mmsProxy)
.append(", ").append(mmsPort)
.append(", ").append(port)
- .append(", ").append(authType);
- for (String t : types) {
- sb.append(", ").append(t);
+ .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);
return sb.toString();
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java
index 7437ba9..3de4c27 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java
@@ -104,11 +104,19 @@ public class GsmDataConnection extends DataConnection {
authType = (apn.user != null) ? RILConstants.SETUP_DATA_AUTH_PAP_CHAP :
RILConstants.SETUP_DATA_AUTH_NONE;
}
+
+ String protocol;
+ if (phone.getServiceState().getRoaming()) {
+ protocol = apn.roamingProtocol;
+ } else {
+ protocol = apn.protocol;
+ }
+
phone.mCM.setupDataCall(
Integer.toString(RILConstants.SETUP_DATA_TECH_GSM),
Integer.toString(RILConstants.DATA_PROFILE_DEFAULT),
apn.apn, apn.user, apn.password, Integer.toString(authType),
- RILConstants.SETUP_DATA_PROTOCOL_IP, msg);
+ protocol, msg);
}
@Override
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index ab9cf2a..10988b1 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -559,7 +559,10 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.USER)),
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PASSWORD)),
cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.AUTH_TYPE)),
- types);
+ types,
+ cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PROTOCOL)),
+ cursor.getString(cursor.getColumnIndexOrThrow(
+ Telephony.Carriers.ROAMING_PROTOCOL)));
result.add(apn);
} while (cursor.moveToNext());
}