| /* |
| * 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 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) { |
| 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; |
| } |
| |
| /** |
| * 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; |
| try { |
| authType = Integer.parseInt(a[12]); |
| } catch (Exception e) { |
| authType = 0; |
| } |
| |
| 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,protocol,roamingProtocol); |
| } |
| |
| 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); |
| 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; |
| } |
| } |