• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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