blob: f06d15456ac0040303fe58530cb4b65eb777a82c [file] [log] [blame]
Wink Savillef8458ff2014-06-25 16:08:02 -07001/*
2 * Copyright (c) 2013 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
17package com.android.ims;
18
19import android.os.Parcel;
20import android.os.Parcelable;
21
22/**
23 * This class enables an application to get details on why a method call failed.
24 *
25 * @hide
26 */
27public class ImsReasonInfo implements Parcelable {
Wink Savillef8458ff2014-06-25 16:08:02 -070028 /**
29 * Specific code of each types
30 */
31 public static final int CODE_UNSPECIFIED = 0;
32
33 /**
34 * LOCAL
35 */
36 // IMS -> Telephony
37 // The passed argument is an invalid
38 public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101;
39 // The operation is invoked in invalid call state
40 public static final int CODE_LOCAL_ILLEGAL_STATE = 102;
41 // IMS service internal error
42 public static final int CODE_LOCAL_INTERNAL_ERROR = 103;
43 // IMS service goes down (service connection is lost)
44 public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106;
45 // No pending incoming call exists
46 public static final int CODE_LOCAL_NO_PENDING_CALL = 107;
47
48 // IMS -> Telephony
49 // Service unavailable; by power off
50 public static final int CODE_LOCAL_POWER_OFF = 111;
51 // Service unavailable; by low battery
52 public static final int CODE_LOCAL_LOW_BATTERY = 112;
53 // Service unavailable; by out of service (data service state)
54 public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121;
55 // Service unavailable; by no LTE coverage
56 // (VoLTE is not supported even though IMS is registered)
57 public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122;
58 // Service unavailable; by located in roaming area
59 public static final int CODE_LOCAL_NETWORK_ROAMING = 123;
60 // Service unavailable; by IP changed
61 public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124;
62 // Service unavailable; other
63 public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131;
64 // Service unavailable; IMS connection is lost (IMS is not registered)
65 public static final int CODE_LOCAL_NOT_REGISTERED = 132;
66
67 // IMS <-> Telephony
68 // Max call exceeded
69 public static final int CODE_LOCAL_CALL_EXCEEDED = 141;
70 // IMS <- Telephony
71 // Call busy
72 public static final int CODE_LOCAL_CALL_BUSY = 142;
73 // Call decline
74 public static final int CODE_LOCAL_CALL_DECLINE = 143;
75 // IMS -> Telephony
76 // SRVCC is in progress
77 public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144;
78 // Resource reservation is failed (QoS precondition)
79 public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145;
80 // Retry CS call; VoLTE service can't be provided by the network or remote end
81 // Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set
82 public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146;
83 // Retry VoLTE call; VoLTE service can't be provided by the network temporarily
84 public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147;
85 // IMS call is already terminated (in TERMINATED state)
86 public static final int CODE_LOCAL_CALL_TERMINATED = 148;
Omkar Kolangade66742f22016-01-28 16:52:47 -080087 // Handover not feasible
88 public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149;
Wink Savillef8458ff2014-06-25 16:08:02 -070089
90 /**
91 * TIMEOUT (IMS -> Telephony)
92 */
93 // 1xx waiting timer is expired after sending INVITE request (MO only)
94 public static final int CODE_TIMEOUT_1XX_WAITING = 201;
95 // User no answer during call setup operation (MO/MT)
96 // MO : 200 OK to INVITE request is not received,
97 // MT : No action from user after alerting the call
98 public static final int CODE_TIMEOUT_NO_ANSWER = 202;
99 // User no answer during call update operation (MO/MT)
100 // MO : 200 OK to re-INVITE request is not received,
101 // MT : No action from user after alerting the call
102 public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203;
103
Shriram Ganeshddf570e2015-05-31 09:18:48 -0700104 //Call failures for FDN
105 public static final int CODE_FDN_BLOCKED = 241;
106
Wink Savillef8458ff2014-06-25 16:08:02 -0700107 /**
108 * STATUSCODE (SIP response code) (IMS -> Telephony)
109 */
110 // 3xx responses
111 // SIP request is redirected
112 public static final int CODE_SIP_REDIRECTED = 321;
113 // 4xx responses
114 // 400 : Bad Request
115 public static final int CODE_SIP_BAD_REQUEST = 331;
116 // 403 : Forbidden
117 public static final int CODE_SIP_FORBIDDEN = 332;
118 // 404 : Not Found
119 public static final int CODE_SIP_NOT_FOUND = 333;
120 // 415 : Unsupported Media Type
121 // 416 : Unsupported URI Scheme
122 // 420 : Bad Extension
123 public static final int CODE_SIP_NOT_SUPPORTED = 334;
124 // 408 : Request Timeout
125 public static final int CODE_SIP_REQUEST_TIMEOUT = 335;
126 // 480 : Temporarily Unavailable
127 public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336;
128 // 484 : Address Incomplete
129 public static final int CODE_SIP_BAD_ADDRESS = 337;
130 // 486 : Busy Here
131 // 600 : Busy Everywhere
132 public static final int CODE_SIP_BUSY = 338;
133 // 487 : Request Terminated
134 public static final int CODE_SIP_REQUEST_CANCELLED = 339;
135 // 406 : Not Acceptable
136 // 488 : Not Acceptable Here
137 // 606 : Not Acceptable
138 public static final int CODE_SIP_NOT_ACCEPTABLE = 340;
139 // 410 : Gone
140 // 604 : Does Not Exist Anywhere
141 public static final int CODE_SIP_NOT_REACHABLE = 341;
142 // Others
143 public static final int CODE_SIP_CLIENT_ERROR = 342;
144 // 5xx responses
145 // 501 : Server Internal Error
146 public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351;
147 // 503 : Service Unavailable
148 public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352;
149 // 504 : Server Time-out
150 public static final int CODE_SIP_SERVER_TIMEOUT = 353;
151 // Others
152 public static final int CODE_SIP_SERVER_ERROR = 354;
153 // 6xx responses
154 // 603 : Decline
155 public static final int CODE_SIP_USER_REJECTED = 361;
156 // Others
157 public static final int CODE_SIP_GLOBAL_ERROR = 362;
Omkar Kolangade66742f22016-01-28 16:52:47 -0800158 // Emergency failure
159 public static final int CODE_EMERGENCY_TEMP_FAILURE = 363;
160 public static final int CODE_EMERGENCY_PERM_FAILURE = 364;
Wink Savillef8458ff2014-06-25 16:08:02 -0700161
162 /**
163 * MEDIA (IMS -> Telephony)
164 */
165 // Media resource initialization failed
166 public static final int CODE_MEDIA_INIT_FAILED = 401;
167 // RTP timeout (no audio / video traffic in the session)
168 public static final int CODE_MEDIA_NO_DATA = 402;
169 // Media is not supported; so dropped the call
170 public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403;
171 // Unknown media related errors
172 public static final int CODE_MEDIA_UNSPECIFIED = 404;
173
174 /**
175 * USER
176 */
177 // Telephony -> IMS
178 // User triggers the call end
179 public static final int CODE_USER_TERMINATED = 501;
180 // No action while an incoming call is ringing
181 public static final int CODE_USER_NOANSWER = 502;
182 // User ignores an incoming call
183 public static final int CODE_USER_IGNORE = 503;
184 // User declines an incoming call
185 public static final int CODE_USER_DECLINE = 504;
Omkar Kolangade93c33d72014-12-01 16:23:25 -0800186 // Device declines/ends a call due to low battery
187 public static final int CODE_LOW_BATTERY = 505;
188 // Device declines call due to blacklisted call ID
189 public static final int CODE_BLACKLISTED_CALL_ID = 506;
Wink Savillef8458ff2014-06-25 16:08:02 -0700190 // IMS -> Telephony
191 // The call is terminated by the network or remote user
192 public static final int CODE_USER_TERMINATED_BY_REMOTE = 510;
193
194 /**
195 * Extra codes for the specific code value
196 * This value can be referred when the code is CODE_LOCAL_CALL_CS_RETRY_REQUIRED.
197 */
198 // Try to connect CS call; normal
199 public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1;
200 // Try to connect CS call without the notification to user
201 public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2;
202 // Try to connect CS call by the settings of the menu
203 public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3;
204
205 /**
206 * UT
207 */
208 public static final int CODE_UT_NOT_SUPPORTED = 801;
209 public static final int CODE_UT_SERVICE_UNAVAILABLE = 802;
210 public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803;
Shriram Ganesh61aac3a2014-07-08 18:48:35 -0700211 public static final int CODE_UT_NETWORK_ERROR = 804;
Wink Savillef8458ff2014-06-25 16:08:02 -0700212 public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821;
213
Uma Maheswari Ramalingam1c182852014-07-31 15:54:52 -0700214 /**
215 * ECBM
216 */
217 public static final int CODE_ECBM_NOT_SUPPORTED = 901;
Wink Savillef8458ff2014-06-25 16:08:02 -0700218
Omkar Kolangade827fcb72014-12-03 18:35:10 -0800219 /**
Rekha Kumarb54d2182015-02-24 11:45:36 -0800220 * Ims Registration error code
221 */
222 public static final int CODE_REGISTRATION_ERROR = 1000;
223
224 /**
225 * CALL DROP error codes (Call could drop because of many reasons like Network not available,
226 * handover, failed, etc)
227 */
228
229 /**
230 * CALL DROP error code for the case when a device is ePDG capable and when the user is on an
231 * active wifi call and at the edge of coverage and there is no qualified LTE network available
232 * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error
233 * code is received as part of the handover message.
234 */
235 public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100;
236
237 /**
Shriram Ganeshddf570e2015-05-31 09:18:48 -0700238 * MT call has ended due to a release from the network
239 * because the call was answered elsewhere
240 */
241 public static final int CODE_ANSWERED_ELSEWHERE = 1014;
242
243 /**
Anju Mathapatif604fc32016-03-10 12:57:21 -0800244 * For MultiEndpoint - Call Pull request has failed
Omkar Kolangadef38780b2016-02-24 11:53:06 -0800245 */
246 public static final int CODE_CALL_PULL_OUT_OF_SYNC = 1015;
247
248 /**
Anju Mathapatif604fc32016-03-10 12:57:21 -0800249 * For MultiEndpoint - Call has been pulled from primary to secondary
Omkar Kolangadef38780b2016-02-24 11:53:06 -0800250 */
251 public static final int CODE_CALL_END_CAUSE_CALL_PULL = 1016;
252
253 /**
Omkar Kolangade66742f22016-01-28 16:52:47 -0800254 * Supplementary services (HOLD/RESUME) failure error codes.
255 * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision.
256 */
257 public static final int CODE_SUPP_SVC_FAILED = 1201;
258 public static final int CODE_SUPP_SVC_CANCELLED = 1202;
259 public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203;
260
261 /**
Nathan Harold4b6d3892016-02-23 13:25:12 -0800262 * DPD Procedure received no response or send failed
263 */
264 public static final int CODE_IWLAN_DPD_FAILURE = 1300;
265
266 /**
267 * Establishment of the ePDG Tunnel Failed
268 */
269 public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400;
270
271 /**
272 * Re-keying of the ePDG Tunnel Failed; may not always result in teardown
273 */
274 public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401;
275
276 /**
277 * Connection to the packet gateway is lost
278 */
279 public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402;
280
281 /**
Omkar Kolangade827fcb72014-12-03 18:35:10 -0800282 * Network string error messages.
283 * mExtraMessage may have these values.
284 */
285 public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED
286 = "Forbidden. Not Authorized for Service";
287
Nathan Harold4b6d3892016-02-23 13:25:12 -0800288
Wink Savillef8458ff2014-06-25 16:08:02 -0700289 // For main reason code
290 public int mCode;
291 // For the extra code value; it depends on the code value.
292 public int mExtraCode;
293 // For the additional message of the reason info.
294 public String mExtraMessage;
Wink Savillef8458ff2014-06-25 16:08:02 -0700295 public ImsReasonInfo() {
Wink Savillef8458ff2014-06-25 16:08:02 -0700296 mCode = CODE_UNSPECIFIED;
297 mExtraCode = CODE_UNSPECIFIED;
298 mExtraMessage = null;
299 }
300
301 public ImsReasonInfo(Parcel in) {
302 readFromParcel(in);
303 }
304
305 public ImsReasonInfo(int code, int extraCode) {
Wink Savillef8458ff2014-06-25 16:08:02 -0700306 mCode = code;
307 mExtraCode = extraCode;
308 mExtraMessage = null;
309 }
310
311 public ImsReasonInfo(int code, int extraCode, String extraMessage) {
Wink Savillef8458ff2014-06-25 16:08:02 -0700312 mCode = code;
313 mExtraCode = extraCode;
314 mExtraMessage = extraMessage;
315 }
316
317 /**
318 *
319 */
320 public int getCode() {
321 return mCode;
322 }
323
324 /**
325 *
326 */
327 public int getExtraCode() {
328 return mExtraCode;
329 }
330
331 /**
332 *
333 */
334 public String getExtraMessage() {
335 return mExtraMessage;
336 }
337
338 /**
Wink Savillef8458ff2014-06-25 16:08:02 -0700339 * Returns the string format of {@link ImsReasonInfo}
340 *
341 * @return the string format of {@link ImsReasonInfo}
342 */
343 public String toString() {
Rekha Kumarb54d2182015-02-24 11:45:36 -0800344 return "ImsReasonInfo :: {" + mCode + ", " + mExtraCode + ", " + mExtraMessage + "}";
Wink Savillef8458ff2014-06-25 16:08:02 -0700345 }
346
347 @Override
348 public int describeContents() {
349 return 0;
350 }
351
352 @Override
353 public void writeToParcel(Parcel out, int flags) {
Wink Savillef8458ff2014-06-25 16:08:02 -0700354 out.writeInt(mCode);
355 out.writeInt(mExtraCode);
356 out.writeString(mExtraMessage);
357 }
358
359 private void readFromParcel(Parcel in) {
Wink Savillef8458ff2014-06-25 16:08:02 -0700360 mCode = in.readInt();
361 mExtraCode = in.readInt();
362 mExtraMessage = in.readString();
363 }
364
365 public static final Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() {
366 @Override
367 public ImsReasonInfo createFromParcel(Parcel in) {
368 return new ImsReasonInfo(in);
369 }
370
371 @Override
372 public ImsReasonInfo[] newArray(int size) {
373 return new ImsReasonInfo[size];
374 }
375 };
376}