1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 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 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 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. 15 */ 16 17 package com.android.internal.telephony; 18 19 /** 20 * This class represents a apn setting for create PDP link 21 */ 22 public class ApnSetting { 23 24 static final String V2_FORMAT_REGEX = "^\\[ApnSettingV2\\]\\s*"; 25 26 public final String carrier; 27 public final String apn; 28 public final String proxy; 29 public final String port; 30 public final String mmsc; 31 public final String mmsProxy; 32 public final String mmsPort; 33 public final String user; 34 public final String password; 35 public final int authType; 36 public final String[] types; 37 public final int id; 38 public final String numeric; 39 public final String protocol; 40 public final String roamingProtocol; 41 /** 42 * Current status of APN 43 * true : enabled APN, false : disabled APN. 44 */ 45 public final boolean carrierEnabled; 46 /** 47 * Radio Access Technology info 48 * To check what values can hold, refer to ServiceState.java. 49 * This should be spread to other technologies, 50 * but currently only used for LTE(14) and EHRPD(13). 51 */ 52 public final int bearer; 53 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 carrierEnabled, int bearer)54 public ApnSetting(int id, String numeric, String carrier, String apn, 55 String proxy, String port, 56 String mmsc, String mmsProxy, String mmsPort, 57 String user, String password, int authType, String[] types, 58 String protocol, String roamingProtocol, boolean carrierEnabled, int bearer) { 59 this.id = id; 60 this.numeric = numeric; 61 this.carrier = carrier; 62 this.apn = apn; 63 this.proxy = proxy; 64 this.port = port; 65 this.mmsc = mmsc; 66 this.mmsProxy = mmsProxy; 67 this.mmsPort = mmsPort; 68 this.user = user; 69 this.password = password; 70 this.authType = authType; 71 this.types = types; 72 this.protocol = protocol; 73 this.roamingProtocol = roamingProtocol; 74 this.carrierEnabled = carrierEnabled; 75 this.bearer = bearer; 76 } 77 78 /** 79 * Creates an ApnSetting object from a string. 80 * 81 * @param data the string to read. 82 * 83 * The string must be in one of two formats (newlines added for clarity, 84 * spaces are optional): 85 * 86 * v1 format: 87 * <carrier>, <apn>, <proxy>, <port>, <mmsc>, <mmsproxy>, 88 * <mmsport>, <user>, <password>, <authtype>, <mcc>,<mnc>, 89 * <type>[, <type>...] 90 * 91 * v2 format: 92 * [ApnSettingV2] <carrier>, <apn>, <proxy>, <port>, <mmsc>, <mmsproxy>, 93 * <mmsport>, <user>, <password>, <authtype>, <mcc>, <mnc>, 94 * <type>[| <type>...], <protocol>, <roaming_protocol>, <carrierEnabled>, <bearer> 95 * 96 * Note that the strings generated by toString() do not contain the username 97 * and password and thus cannot be read by this method. 98 * 99 * @see ApnSettingTest 100 */ fromString(String data)101 public static ApnSetting fromString(String data) { 102 if (data == null) return null; 103 104 int version; 105 // matches() operates on the whole string, so append .* to the regex. 106 if (data.matches(V2_FORMAT_REGEX + ".*")) { 107 version = 2; 108 data = data.replaceFirst(V2_FORMAT_REGEX, ""); 109 } else { 110 version = 1; 111 } 112 113 String[] a = data.split("\\s*,\\s*"); 114 if (a.length < 14) { 115 return null; 116 } 117 118 int authType; 119 try { 120 authType = Integer.parseInt(a[12]); 121 } catch (Exception e) { 122 authType = 0; 123 } 124 125 String[] typeArray; 126 String protocol, roamingProtocol; 127 boolean carrierEnabled; 128 int bearer; 129 if (version == 1) { 130 typeArray = new String[a.length - 13]; 131 System.arraycopy(a, 13, typeArray, 0, a.length - 13); 132 protocol = RILConstants.SETUP_DATA_PROTOCOL_IP; 133 roamingProtocol = RILConstants.SETUP_DATA_PROTOCOL_IP; 134 carrierEnabled = true; 135 bearer = 0; 136 } else { 137 if (a.length < 18) { 138 return null; 139 } 140 typeArray = a[13].split("\\s*\\|\\s*"); 141 protocol = a[14]; 142 roamingProtocol = a[15]; 143 try { 144 carrierEnabled = Boolean.parseBoolean(a[16]); 145 } catch (Exception e) { 146 carrierEnabled = true; 147 } 148 bearer = Integer.parseInt(a[17]); 149 } 150 151 return new ApnSetting(-1,a[10]+a[11],a[0],a[1],a[2],a[3],a[7],a[8], 152 a[9],a[4],a[5],authType,typeArray,protocol,roamingProtocol,carrierEnabled,bearer); 153 } 154 toString()155 public String toString() { 156 StringBuilder sb = new StringBuilder(); 157 sb.append("[ApnSettingV2] ") 158 .append(carrier) 159 .append(", ").append(id) 160 .append(", ").append(numeric) 161 .append(", ").append(apn) 162 .append(", ").append(proxy) 163 .append(", ").append(mmsc) 164 .append(", ").append(mmsProxy) 165 .append(", ").append(mmsPort) 166 .append(", ").append(port) 167 .append(", ").append(authType).append(", "); 168 for (int i = 0; i < types.length; i++) { 169 sb.append(types[i]); 170 if (i < types.length - 1) { 171 sb.append(" | "); 172 } 173 } 174 sb.append(", ").append(protocol); 175 sb.append(", ").append(roamingProtocol); 176 sb.append(", ").append(carrierEnabled); 177 sb.append(", ").append(bearer); 178 return sb.toString(); 179 } 180 canHandleType(String type)181 public boolean canHandleType(String type) { 182 for (String t : types) { 183 // DEFAULT handles all, and HIPRI is handled by DEFAULT 184 if (t.equals(type) || t.equals(Phone.APN_TYPE_ALL) || 185 (t.equals(Phone.APN_TYPE_DEFAULT) && 186 type.equals(Phone.APN_TYPE_HIPRI))) { 187 return true; 188 } 189 } 190 return false; 191 } 192 } 193