Home | History | Annotate | Download | only in ims
      1 /*
      2  * Copyright (C) 2018 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 android.telephony.ims;
     18 
     19 import android.annotation.SystemApi;
     20 import android.os.Parcel;
     21 import android.os.Parcelable;
     22 
     23 /**
     24  * This class enables an application to get details on why a method call failed.
     25  *
     26  * @hide
     27  */
     28 @SystemApi
     29 public final class ImsReasonInfo implements Parcelable {
     30 
     31     /**
     32      * Specific code of each types
     33      */
     34     public static final int CODE_UNSPECIFIED = 0;
     35 
     36     /**
     37      * LOCAL
     38      */
     39     // IMS -> Telephony
     40     // The passed argument is an invalid
     41     public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101;
     42     // The operation is invoked in invalid call state
     43     public static final int CODE_LOCAL_ILLEGAL_STATE = 102;
     44     // IMS service internal error
     45     public static final int CODE_LOCAL_INTERNAL_ERROR = 103;
     46     // IMS service goes down (service connection is lost)
     47     public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106;
     48     // No pending incoming call exists
     49     public static final int CODE_LOCAL_NO_PENDING_CALL = 107;
     50     // IMS Call ended during conference merge process
     51     public static final int CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE = 108;
     52 
     53     // IMS -> Telephony
     54     // Service unavailable; by power off
     55     public static final int CODE_LOCAL_POWER_OFF = 111;
     56     // Service unavailable; by low battery
     57     public static final int CODE_LOCAL_LOW_BATTERY = 112;
     58     // Service unavailable; by out of service (data service state)
     59     public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121;
     60     // Service unavailable; by no LTE coverage
     61     // (VoLTE is not supported even though IMS is registered)
     62     public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122;
     63     // Service unavailable; by located in roaming area
     64     public static final int CODE_LOCAL_NETWORK_ROAMING = 123;
     65     // Service unavailable; by IP changed
     66     public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124;
     67     // Service unavailable; other
     68     public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131;
     69     // Service unavailable; IMS connection is lost (IMS is not registered)
     70     public static final int CODE_LOCAL_NOT_REGISTERED = 132;
     71 
     72     // IMS <-> Telephony
     73     // Max call exceeded
     74     public static final int CODE_LOCAL_CALL_EXCEEDED = 141;
     75     // IMS <- Telephony
     76     // Call busy
     77     public static final int CODE_LOCAL_CALL_BUSY = 142;
     78     // Call decline
     79     public static final int CODE_LOCAL_CALL_DECLINE = 143;
     80     // IMS -> Telephony
     81     // SRVCC is in progress
     82     public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144;
     83     // Resource reservation is failed (QoS precondition)
     84     public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145;
     85     // Retry CS call; VoLTE service can't be provided by the network or remote end
     86     // Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set
     87     public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146;
     88     // Retry VoLTE call; VoLTE service can't be provided by the network temporarily
     89     public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147;
     90     // IMS call is already terminated (in TERMINATED state)
     91     public static final int CODE_LOCAL_CALL_TERMINATED = 148;
     92     // Handover not feasible
     93     public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149;
     94 
     95     /**
     96      * TIMEOUT (IMS -> Telephony)
     97      */
     98     // 1xx waiting timer is expired after sending INVITE request (MO only)
     99     public static final int CODE_TIMEOUT_1XX_WAITING = 201;
    100     // User no answer during call setup operation (MO/MT)
    101     // MO : 200 OK to INVITE request is not received,
    102     // MT : No action from user after alerting the call
    103     public static final int CODE_TIMEOUT_NO_ANSWER = 202;
    104     // User no answer during call update operation (MO/MT)
    105     // MO : 200 OK to re-INVITE request is not received,
    106     // MT : No action from user after alerting the call
    107     public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203;
    108 
    109     //Call was blocked by call barring
    110     public static final int CODE_CALL_BARRED = 240;
    111 
    112     //Call failures for FDN
    113     public static final int CODE_FDN_BLOCKED = 241;
    114 
    115     // Network does not accept the emergency call request because IMEI was used as identification
    116     // and this capability is not supported by the network.
    117     public static final int CODE_IMEI_NOT_ACCEPTED = 243;
    118 
    119     //STK CC errors
    120     public static final int CODE_DIAL_MODIFIED_TO_USSD = 244;
    121     public static final int CODE_DIAL_MODIFIED_TO_SS = 245;
    122     public static final int CODE_DIAL_MODIFIED_TO_DIAL = 246;
    123     public static final int CODE_DIAL_MODIFIED_TO_DIAL_VIDEO = 247;
    124     public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL = 248;
    125     public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 249;
    126     public static final int CODE_DIAL_VIDEO_MODIFIED_TO_SS = 250;
    127     public static final int CODE_DIAL_VIDEO_MODIFIED_TO_USSD = 251;
    128 
    129     /**
    130      * STATUSCODE (SIP response code) (IMS -> Telephony)
    131      */
    132     // 3xx responses
    133     // SIP request is redirected
    134     public static final int CODE_SIP_REDIRECTED = 321;
    135     // 4xx responses
    136     // 400 : Bad Request
    137     public static final int CODE_SIP_BAD_REQUEST = 331;
    138     // 403 : Forbidden
    139     public static final int CODE_SIP_FORBIDDEN = 332;
    140     // 404 : Not Found
    141     public static final int CODE_SIP_NOT_FOUND = 333;
    142     // 415 : Unsupported Media Type
    143     // 416 : Unsupported URI Scheme
    144     // 420 : Bad Extension
    145     public static final int CODE_SIP_NOT_SUPPORTED = 334;
    146     // 408 : Request Timeout
    147     public static final int CODE_SIP_REQUEST_TIMEOUT = 335;
    148     // 480 : Temporarily Unavailable
    149     public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336;
    150     // 484 : Address Incomplete
    151     public static final int CODE_SIP_BAD_ADDRESS = 337;
    152     // 486 : Busy Here
    153     // 600 : Busy Everywhere
    154     public static final int CODE_SIP_BUSY = 338;
    155     // 487 : Request Terminated
    156     public static final int CODE_SIP_REQUEST_CANCELLED = 339;
    157     // 406 : Not Acceptable
    158     // 488 : Not Acceptable Here
    159     // 606 : Not Acceptable
    160     public static final int CODE_SIP_NOT_ACCEPTABLE = 340;
    161     // 410 : Gone
    162     // 604 : Does Not Exist Anywhere
    163     public static final int CODE_SIP_NOT_REACHABLE = 341;
    164     // Others
    165     public static final int CODE_SIP_CLIENT_ERROR = 342;
    166     // 5xx responses
    167     // 501 : Server Internal Error
    168     public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351;
    169     // 503 : Service Unavailable
    170     public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352;
    171     // 504 : Server Time-out
    172     public static final int CODE_SIP_SERVER_TIMEOUT = 353;
    173     // Others
    174     public static final int CODE_SIP_SERVER_ERROR = 354;
    175     // 6xx responses
    176     // 603 : Decline
    177     public static final int CODE_SIP_USER_REJECTED = 361;
    178     // Others
    179     public static final int CODE_SIP_GLOBAL_ERROR = 362;
    180     // Emergency failure
    181     public static final int CODE_EMERGENCY_TEMP_FAILURE = 363;
    182     public static final int CODE_EMERGENCY_PERM_FAILURE = 364;
    183 
    184     /**
    185      * MEDIA (IMS -> Telephony)
    186      */
    187     // Media resource initialization failed
    188     public static final int CODE_MEDIA_INIT_FAILED = 401;
    189     // RTP timeout (no audio / video traffic in the session)
    190     public static final int CODE_MEDIA_NO_DATA = 402;
    191     // Media is not supported; so dropped the call
    192     public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403;
    193     // Unknown media related errors
    194     public static final int CODE_MEDIA_UNSPECIFIED = 404;
    195 
    196     /**
    197      * USER
    198      */
    199     // Telephony -> IMS
    200     // User triggers the call end
    201     public static final int CODE_USER_TERMINATED = 501;
    202     // No action while an incoming call is ringing
    203     public static final int CODE_USER_NOANSWER = 502;
    204     // User ignores an incoming call
    205     public static final int CODE_USER_IGNORE = 503;
    206     // User declines an incoming call
    207     public static final int CODE_USER_DECLINE = 504;
    208     // Device declines/ends a call due to low battery
    209     public static final int CODE_LOW_BATTERY = 505;
    210     // Device declines call due to blacklisted call ID
    211     public static final int CODE_BLACKLISTED_CALL_ID = 506;
    212     // IMS -> Telephony
    213     // The call is terminated by the network or remote user
    214     public static final int CODE_USER_TERMINATED_BY_REMOTE = 510;
    215 
    216     /**
    217      * Extra codes for the specific code value
    218      * This value can be referred when the code is CODE_LOCAL_CALL_CS_RETRY_REQUIRED.
    219      */
    220     // Try to connect CS call; normal
    221     public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1;
    222     // Try to connect CS call without the notification to user
    223     public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2;
    224     // Try to connect CS call by the settings of the menu
    225     public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3;
    226 
    227     /**
    228      * UT
    229      */
    230     public static final int CODE_UT_NOT_SUPPORTED = 801;
    231     public static final int CODE_UT_SERVICE_UNAVAILABLE = 802;
    232     public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803;
    233     public static final int CODE_UT_NETWORK_ERROR = 804;
    234     public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821;
    235     //STK CC errors
    236     public static final int CODE_UT_SS_MODIFIED_TO_DIAL = 822;
    237     public static final int CODE_UT_SS_MODIFIED_TO_USSD = 823;
    238     public static final int CODE_UT_SS_MODIFIED_TO_SS = 824;
    239     public static final int CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO = 825;
    240 
    241     /**
    242      * ECBM
    243      */
    244     public static final int CODE_ECBM_NOT_SUPPORTED = 901;
    245 
    246     /**
    247      * Fail code used to indicate that Multi-endpoint is not supported by the Ims framework.
    248      */
    249     public static final int CODE_MULTIENDPOINT_NOT_SUPPORTED = 902;
    250 
    251     /**
    252      * Ims Registration error code
    253      */
    254     public static final int CODE_REGISTRATION_ERROR = 1000;
    255 
    256     /**
    257      * CALL DROP error codes (Call could drop because of many reasons like Network not available,
    258      *  handover, failed, etc)
    259      */
    260 
    261     /**
    262      * CALL DROP error code for the case when a device is ePDG capable and when the user is on an
    263      * active wifi call and at the edge of coverage and there is no qualified LTE network available
    264      * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error
    265      * code is received as part of the handover message.
    266      */
    267     public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100;
    268 
    269     /**
    270      * MT call has ended due to a release from the network
    271      * because the call was answered elsewhere
    272      */
    273     public static final int CODE_ANSWERED_ELSEWHERE = 1014;
    274 
    275     /**
    276      * For MultiEndpoint - Call Pull request has failed
    277      */
    278     public static final int CODE_CALL_PULL_OUT_OF_SYNC = 1015;
    279 
    280     /**
    281      * For MultiEndpoint - Call has been pulled from primary to secondary
    282      */
    283     public static final int CODE_CALL_END_CAUSE_CALL_PULL = 1016;
    284 
    285     /**
    286      * Supplementary services (HOLD/RESUME) failure error codes.
    287      * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision.
    288      */
    289     public static final int CODE_SUPP_SVC_FAILED = 1201;
    290     public static final int CODE_SUPP_SVC_CANCELLED = 1202;
    291     public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203;
    292 
    293     /**
    294      * DPD Procedure received no response or send failed
    295      */
    296     public static final int CODE_IWLAN_DPD_FAILURE = 1300;
    297 
    298     /**
    299      * Establishment of the ePDG Tunnel Failed
    300      */
    301     public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400;
    302 
    303     /**
    304      * Re-keying of the ePDG Tunnel Failed; may not always result in teardown
    305      */
    306     public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401;
    307 
    308     /**
    309      * Connection to the packet gateway is lost
    310      */
    311     public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402;
    312 
    313     /**
    314      * The maximum number of calls allowed has been reached.  Used in a multi-endpoint scenario
    315      * where the number of calls across all connected devices has reached the maximum.
    316      */
    317     public static final int CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED = 1403;
    318 
    319     /**
    320      * Similar to {@link #CODE_LOCAL_CALL_DECLINE}, except indicates that a remote device has
    321      * declined the call.  Used in a multi-endpoint scenario where a remote device declined an
    322      * incoming call.
    323      */
    324     public static final int CODE_REMOTE_CALL_DECLINE = 1404;
    325 
    326     /**
    327      * Indicates the call was disconnected due to the user reaching their data limit.
    328      */
    329     public static final int CODE_DATA_LIMIT_REACHED = 1405;
    330 
    331     /**
    332      * Indicates the call was disconnected due to the user disabling cellular data.
    333      */
    334     public static final int CODE_DATA_DISABLED = 1406;
    335 
    336     /**
    337      * Indicates a call was disconnected due to loss of wifi signal.
    338      */
    339     public static final int CODE_WIFI_LOST = 1407;
    340 
    341     /**
    342      * Indicates the registration attempt on IWLAN failed due to IKEv2 authetication failure
    343      * during tunnel establishment.
    344      */
    345     public static final int CODE_IKEV2_AUTH_FAILURE = 1408;
    346 
    347     /** The call cannot be established because RADIO is OFF */
    348     public static final int CODE_RADIO_OFF = 1500;
    349 
    350     /** The call cannot be established because of no valid SIM */
    351     public static final int CODE_NO_VALID_SIM = 1501;
    352 
    353     /** The failure is due internal error at modem */
    354     public static final int CODE_RADIO_INTERNAL_ERROR = 1502;
    355 
    356     /** The failure is due to UE timer expired while waiting for a response from network */
    357     public static final int CODE_NETWORK_RESP_TIMEOUT = 1503;
    358 
    359     /** The failure is due to explicit reject from network */
    360     public static final int CODE_NETWORK_REJECT = 1504;
    361 
    362     /** The failure is due to radio access failure. ex. RACH failure */
    363     public static final int CODE_RADIO_ACCESS_FAILURE = 1505;
    364 
    365     /** Call/IMS registration failed/dropped because of a RLF */
    366     public static final int CODE_RADIO_LINK_FAILURE = 1506;
    367 
    368     /** Call/IMS registration failed/dropped because of radio link lost */
    369     public static final int CODE_RADIO_LINK_LOST = 1507;
    370 
    371     /** The call Call/IMS registration failed because of a radio uplink issue */
    372     public static final int CODE_RADIO_UPLINK_FAILURE = 1508;
    373 
    374     /** Call failed because of a RRC connection setup failure */
    375     public static final int CODE_RADIO_SETUP_FAILURE = 1509;
    376 
    377     /** Call failed/dropped because of RRC connection release from NW */
    378     public static final int CODE_RADIO_RELEASE_NORMAL = 1510;
    379 
    380     /** Call failed/dropped because of RRC abnormally released by modem/network */
    381     public static final int CODE_RADIO_RELEASE_ABNORMAL = 1511;
    382 
    383     /** Call failed because of access class barring */
    384     public static final int CODE_ACCESS_CLASS_BLOCKED = 1512;
    385 
    386     /** Call/IMS registration is failed/dropped because of a network detach */
    387     public static final int CODE_NETWORK_DETACH = 1513;
    388 
    389     /**
    390      * Call failed due to SIP code 380 (Alternative Service response) while dialing an "undetected
    391      * emergency number".  This scenario is important in some regions where the carrier network will
    392      * identify other non-emergency help numbers (e.g. mountain rescue) when attempting to dial.
    393      */
    394     public static final int CODE_SIP_ALTERNATE_EMERGENCY_CALL = 1514;
    395 
    396     /**
    397      * Call failed because of unobtainable number
    398      * @hide
    399      */
    400     public static final int CODE_UNOBTAINABLE_NUMBER = 1515;
    401 
    402     /* OEM specific error codes. To be used by OEMs when they don't want to
    403    reveal error code which would be replaced by ERROR_UNSPECIFIED */
    404     public static final int CODE_OEM_CAUSE_1 = 0xf001;
    405     public static final int CODE_OEM_CAUSE_2 = 0xf002;
    406     public static final int CODE_OEM_CAUSE_3 = 0xf003;
    407     public static final int CODE_OEM_CAUSE_4 = 0xf004;
    408     public static final int CODE_OEM_CAUSE_5 = 0xf005;
    409     public static final int CODE_OEM_CAUSE_6 = 0xf006;
    410     public static final int CODE_OEM_CAUSE_7 = 0xf007;
    411     public static final int CODE_OEM_CAUSE_8 = 0xf008;
    412     public static final int CODE_OEM_CAUSE_9 = 0xf009;
    413     public static final int CODE_OEM_CAUSE_10 = 0xf00a;
    414     public static final int CODE_OEM_CAUSE_11 = 0xf00b;
    415     public static final int CODE_OEM_CAUSE_12 = 0xf00c;
    416     public static final int CODE_OEM_CAUSE_13 = 0xf00d;
    417     public static final int CODE_OEM_CAUSE_14 = 0xf00e;
    418     public static final int CODE_OEM_CAUSE_15 = 0xf00f;
    419 
    420     /**
    421      * Network string error messages.
    422      * mExtraMessage may have these values.
    423      */
    424     public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED
    425             = "Forbidden. Not Authorized for Service";
    426 
    427 
    428     // For main reason code
    429     /** @hide */
    430     public int mCode;
    431     // For the extra code value; it depends on the code value.
    432     /** @hide */
    433     public int mExtraCode;
    434     // For the additional message of the reason info.
    435     /** @hide */
    436     public String mExtraMessage;
    437 
    438     /** @hide */
    439     public ImsReasonInfo() {
    440         mCode = CODE_UNSPECIFIED;
    441         mExtraCode = CODE_UNSPECIFIED;
    442         mExtraMessage = null;
    443     }
    444 
    445     private ImsReasonInfo(Parcel in) {
    446         mCode = in.readInt();
    447         mExtraCode = in.readInt();
    448         mExtraMessage = in.readString();
    449     }
    450 
    451     /** @hide */
    452     public ImsReasonInfo(int code, int extraCode) {
    453         mCode = code;
    454         mExtraCode = extraCode;
    455         mExtraMessage = null;
    456     }
    457 
    458     public ImsReasonInfo(int code, int extraCode, String extraMessage) {
    459         mCode = code;
    460         mExtraCode = extraCode;
    461         mExtraMessage = extraMessage;
    462     }
    463 
    464     /**
    465      *
    466      */
    467     public int getCode() {
    468         return mCode;
    469     }
    470 
    471     /**
    472      *
    473      */
    474     public int getExtraCode() {
    475         return mExtraCode;
    476     }
    477 
    478     /**
    479      *
    480      */
    481     public String getExtraMessage() {
    482         return mExtraMessage;
    483     }
    484 
    485     /**
    486      * Returns the string format of {@link ImsReasonInfo}
    487      *
    488      * @return the string format of {@link ImsReasonInfo}
    489      */
    490     public String toString() {
    491         return "ImsReasonInfo :: {" + mCode + ", " + mExtraCode + ", " + mExtraMessage + "}";
    492     }
    493 
    494     @Override
    495     public int describeContents() {
    496         return 0;
    497     }
    498 
    499     @Override
    500     public void writeToParcel(Parcel out, int flags) {
    501         out.writeInt(mCode);
    502         out.writeInt(mExtraCode);
    503         out.writeString(mExtraMessage);
    504     }
    505 
    506     public static final Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() {
    507         @Override
    508         public ImsReasonInfo createFromParcel(Parcel in) {
    509             return new ImsReasonInfo(in);
    510         }
    511 
    512         @Override
    513         public ImsReasonInfo[] newArray(int size) {
    514             return new ImsReasonInfo[size];
    515         }
    516     };
    517 }
    518