/* * Copyright (c) 2013 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.ims; import android.os.Parcel; import android.os.Parcelable; /** * This class enables an application to get details on why a method call failed. * * @hide */ public class ImsReasonInfo implements Parcelable { /** * Specific code of each types */ public static final int CODE_UNSPECIFIED = 0; /** * LOCAL */ // IMS -> Telephony // The passed argument is an invalid public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101; // The operation is invoked in invalid call state public static final int CODE_LOCAL_ILLEGAL_STATE = 102; // IMS service internal error public static final int CODE_LOCAL_INTERNAL_ERROR = 103; // IMS service goes down (service connection is lost) public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106; // No pending incoming call exists public static final int CODE_LOCAL_NO_PENDING_CALL = 107; // IMS Call ended during conference merge process public static final int CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE = 108; // IMS -> Telephony // Service unavailable; by power off public static final int CODE_LOCAL_POWER_OFF = 111; // Service unavailable; by low battery public static final int CODE_LOCAL_LOW_BATTERY = 112; // Service unavailable; by out of service (data service state) public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121; // Service unavailable; by no LTE coverage // (VoLTE is not supported even though IMS is registered) public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122; // Service unavailable; by located in roaming area public static final int CODE_LOCAL_NETWORK_ROAMING = 123; // Service unavailable; by IP changed public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124; // Service unavailable; other public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131; // Service unavailable; IMS connection is lost (IMS is not registered) public static final int CODE_LOCAL_NOT_REGISTERED = 132; // IMS <-> Telephony // Max call exceeded public static final int CODE_LOCAL_CALL_EXCEEDED = 141; // IMS <- Telephony // Call busy public static final int CODE_LOCAL_CALL_BUSY = 142; // Call decline public static final int CODE_LOCAL_CALL_DECLINE = 143; // IMS -> Telephony // SRVCC is in progress public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144; // Resource reservation is failed (QoS precondition) public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145; // Retry CS call; VoLTE service can't be provided by the network or remote end // Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146; // Retry VoLTE call; VoLTE service can't be provided by the network temporarily public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147; // IMS call is already terminated (in TERMINATED state) public static final int CODE_LOCAL_CALL_TERMINATED = 148; // Handover not feasible public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149; /** * TIMEOUT (IMS -> Telephony) */ // 1xx waiting timer is expired after sending INVITE request (MO only) public static final int CODE_TIMEOUT_1XX_WAITING = 201; // User no answer during call setup operation (MO/MT) // MO : 200 OK to INVITE request is not received, // MT : No action from user after alerting the call public static final int CODE_TIMEOUT_NO_ANSWER = 202; // User no answer during call update operation (MO/MT) // MO : 200 OK to re-INVITE request is not received, // MT : No action from user after alerting the call public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203; //Call failures for FDN public static final int CODE_FDN_BLOCKED = 241; // Network does not accept the emergency call request because IMEI was used as identification // and this capability is not supported by the network. public static final int CODE_IMEI_NOT_ACCEPTED = 243; /** * STATUSCODE (SIP response code) (IMS -> Telephony) */ // 3xx responses // SIP request is redirected public static final int CODE_SIP_REDIRECTED = 321; // 4xx responses // 400 : Bad Request public static final int CODE_SIP_BAD_REQUEST = 331; // 403 : Forbidden public static final int CODE_SIP_FORBIDDEN = 332; // 404 : Not Found public static final int CODE_SIP_NOT_FOUND = 333; // 415 : Unsupported Media Type // 416 : Unsupported URI Scheme // 420 : Bad Extension public static final int CODE_SIP_NOT_SUPPORTED = 334; // 408 : Request Timeout public static final int CODE_SIP_REQUEST_TIMEOUT = 335; // 480 : Temporarily Unavailable public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336; // 484 : Address Incomplete public static final int CODE_SIP_BAD_ADDRESS = 337; // 486 : Busy Here // 600 : Busy Everywhere public static final int CODE_SIP_BUSY = 338; // 487 : Request Terminated public static final int CODE_SIP_REQUEST_CANCELLED = 339; // 406 : Not Acceptable // 488 : Not Acceptable Here // 606 : Not Acceptable public static final int CODE_SIP_NOT_ACCEPTABLE = 340; // 410 : Gone // 604 : Does Not Exist Anywhere public static final int CODE_SIP_NOT_REACHABLE = 341; // Others public static final int CODE_SIP_CLIENT_ERROR = 342; // 5xx responses // 501 : Server Internal Error public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351; // 503 : Service Unavailable public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352; // 504 : Server Time-out public static final int CODE_SIP_SERVER_TIMEOUT = 353; // Others public static final int CODE_SIP_SERVER_ERROR = 354; // 6xx responses // 603 : Decline public static final int CODE_SIP_USER_REJECTED = 361; // Others public static final int CODE_SIP_GLOBAL_ERROR = 362; // Emergency failure public static final int CODE_EMERGENCY_TEMP_FAILURE = 363; public static final int CODE_EMERGENCY_PERM_FAILURE = 364; /** * MEDIA (IMS -> Telephony) */ // Media resource initialization failed public static final int CODE_MEDIA_INIT_FAILED = 401; // RTP timeout (no audio / video traffic in the session) public static final int CODE_MEDIA_NO_DATA = 402; // Media is not supported; so dropped the call public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403; // Unknown media related errors public static final int CODE_MEDIA_UNSPECIFIED = 404; /** * USER */ // Telephony -> IMS // User triggers the call end public static final int CODE_USER_TERMINATED = 501; // No action while an incoming call is ringing public static final int CODE_USER_NOANSWER = 502; // User ignores an incoming call public static final int CODE_USER_IGNORE = 503; // User declines an incoming call public static final int CODE_USER_DECLINE = 504; // Device declines/ends a call due to low battery public static final int CODE_LOW_BATTERY = 505; // Device declines call due to blacklisted call ID public static final int CODE_BLACKLISTED_CALL_ID = 506; // IMS -> Telephony // The call is terminated by the network or remote user public static final int CODE_USER_TERMINATED_BY_REMOTE = 510; /** * Extra codes for the specific code value * This value can be referred when the code is CODE_LOCAL_CALL_CS_RETRY_REQUIRED. */ // Try to connect CS call; normal public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1; // Try to connect CS call without the notification to user public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; // Try to connect CS call by the settings of the menu public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3; /** * UT */ public static final int CODE_UT_NOT_SUPPORTED = 801; public static final int CODE_UT_SERVICE_UNAVAILABLE = 802; public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803; public static final int CODE_UT_NETWORK_ERROR = 804; public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821; /** * ECBM */ public static final int CODE_ECBM_NOT_SUPPORTED = 901; /** * Fail code used to indicate that Multi-endpoint is not supported by the Ims framework. */ public static final int CODE_MULTIENDPOINT_NOT_SUPPORTED = 902; /** * Ims Registration error code */ public static final int CODE_REGISTRATION_ERROR = 1000; /** * CALL DROP error codes (Call could drop because of many reasons like Network not available, * handover, failed, etc) */ /** * CALL DROP error code for the case when a device is ePDG capable and when the user is on an * active wifi call and at the edge of coverage and there is no qualified LTE network available * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error * code is received as part of the handover message. */ public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100; /** * MT call has ended due to a release from the network * because the call was answered elsewhere */ public static final int CODE_ANSWERED_ELSEWHERE = 1014; /** * For MultiEndpoint - Call Pull request has failed */ public static final int CODE_CALL_PULL_OUT_OF_SYNC = 1015; /** * For MultiEndpoint - Call has been pulled from primary to secondary */ public static final int CODE_CALL_END_CAUSE_CALL_PULL = 1016; /** * Supplementary services (HOLD/RESUME) failure error codes. * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision. */ public static final int CODE_SUPP_SVC_FAILED = 1201; public static final int CODE_SUPP_SVC_CANCELLED = 1202; public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203; /** * DPD Procedure received no response or send failed */ public static final int CODE_IWLAN_DPD_FAILURE = 1300; /** * Establishment of the ePDG Tunnel Failed */ public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400; /** * Re-keying of the ePDG Tunnel Failed; may not always result in teardown */ public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401; /** * Connection to the packet gateway is lost */ public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402; /** * The maximum number of calls allowed has been reached. Used in a multi-endpoint scenario * where the number of calls across all connected devices has reached the maximum. */ public static final int CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED = 1403; /** * Similar to {@link #CODE_LOCAL_CALL_DECLINE}, except indicates that a remote device has * declined the call. Used in a multi-endpoint scenario where a remote device declined an * incoming call. */ public static final int CODE_REMOTE_CALL_DECLINE = 1404; /** * Indicates the call was disconnected due to the user reaching their data limit. */ public static final int CODE_DATA_LIMIT_REACHED = 1405; /** * Indicates the call was disconnected due to the user disabling cellular data. */ public static final int CODE_DATA_DISABLED = 1406; /** * Indicates a call was disconnected due to loss of wifi signal. */ public static final int CODE_WIFI_LOST = 1407; /** * Indicates the registration attempt on IWLAN failed due to IKEv2 authetication failure * during tunnel establishment. */ public static final int CODE_IKEV2_AUTH_FAILURE = 1408; /** The call cannot be established because RADIO is OFF */ public static final int CODE_RADIO_OFF = 1500; /** The call cannot be established because of no valid SIM */ public static final int CODE_NO_VALID_SIM = 1501; /** The failure is due internal error at modem */ public static final int CODE_RADIO_INTERNAL_ERROR = 1502; /** The failure is due to UE timer expired while waiting for a response from network */ public static final int CODE_NETWORK_RESP_TIMEOUT = 1503; /** The failure is due to explicit reject from network */ public static final int CODE_NETWORK_REJECT = 1504; /** The failure is due to radio access failure. ex. RACH failure */ public static final int CODE_RADIO_ACCESS_FAILURE = 1505; /** Call/IMS registration failed/dropped because of a RLF */ public static final int CODE_RADIO_LINK_FAILURE = 1506; /** Call/IMS registration failed/dropped because of radio link lost */ public static final int CODE_RADIO_LINK_LOST = 1507; /** The call Call/IMS registration failed because of a radio uplink issue */ public static final int CODE_RADIO_UPLINK_FAILURE = 1508; /** Call failed because of a RRC connection setup failure */ public static final int CODE_RADIO_SETUP_FAILURE = 1509; /** Call failed/dropped because of RRC connection release from NW */ public static final int CODE_RADIO_RELEASE_NORMAL = 1510; /** Call failed/dropped because of RRC abnormally released by modem/network */ public static final int CODE_RADIO_RELEASE_ABNORMAL = 1511; /** Call failed because of access class barring */ public static final int CODE_ACCESS_CLASS_BLOCKED = 1512; /** Call/IMS registration is failed/dropped because of a network detach */ public static final int CODE_NETWORK_DETACH = 1513; /* OEM specific error codes. To be used by OEMs when they don't want to reveal error code which would be replaced by ERROR_UNSPECIFIED */ public static final int CODE_OEM_CAUSE_1 = 0xf001; public static final int CODE_OEM_CAUSE_2 = 0xf002; public static final int CODE_OEM_CAUSE_3 = 0xf003; public static final int CODE_OEM_CAUSE_4 = 0xf004; public static final int CODE_OEM_CAUSE_5 = 0xf005; public static final int CODE_OEM_CAUSE_6 = 0xf006; public static final int CODE_OEM_CAUSE_7 = 0xf007; public static final int CODE_OEM_CAUSE_8 = 0xf008; public static final int CODE_OEM_CAUSE_9 = 0xf009; public static final int CODE_OEM_CAUSE_10 = 0xf00a; public static final int CODE_OEM_CAUSE_11 = 0xf00b; public static final int CODE_OEM_CAUSE_12 = 0xf00c; public static final int CODE_OEM_CAUSE_13 = 0xf00d; public static final int CODE_OEM_CAUSE_14 = 0xf00e; public static final int CODE_OEM_CAUSE_15 = 0xf00f; /** * Network string error messages. * mExtraMessage may have these values. */ public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service"; // For main reason code public int mCode; // For the extra code value; it depends on the code value. public int mExtraCode; // For the additional message of the reason info. public String mExtraMessage; public ImsReasonInfo() { mCode = CODE_UNSPECIFIED; mExtraCode = CODE_UNSPECIFIED; mExtraMessage = null; } public ImsReasonInfo(Parcel in) { readFromParcel(in); } public ImsReasonInfo(int code, int extraCode) { mCode = code; mExtraCode = extraCode; mExtraMessage = null; } public ImsReasonInfo(int code, int extraCode, String extraMessage) { mCode = code; mExtraCode = extraCode; mExtraMessage = extraMessage; } /** * */ public int getCode() { return mCode; } /** * */ public int getExtraCode() { return mExtraCode; } /** * */ public String getExtraMessage() { return mExtraMessage; } /** * Returns the string format of {@link ImsReasonInfo} * * @return the string format of {@link ImsReasonInfo} */ public String toString() { return "ImsReasonInfo :: {" + mCode + ", " + mExtraCode + ", " + mExtraMessage + "}"; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(mCode); out.writeInt(mExtraCode); out.writeString(mExtraMessage); } private void readFromParcel(Parcel in) { mCode = in.readInt(); mExtraCode = in.readInt(); mExtraMessage = in.readString(); } public static final Creator CREATOR = new Creator() { @Override public ImsReasonInfo createFromParcel(Parcel in) { return new ImsReasonInfo(in); } @Override public ImsReasonInfo[] newArray(int size) { return new ImsReasonInfo[size]; } }; }