DcFailCause.java revision cd3800ef6d32f5173e647924620501f7b5fcdb3f
1ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville/*
2ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Copyright (C) 2006 The Android Open Source Project
3ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
4ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * you may not use this file except in compliance with the License.
6ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * You may obtain a copy of the License at
7ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
8ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
10ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Unless required by applicable law or agreed to in writing, software
11ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * See the License for the specific language governing permissions and
14ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * limitations under the License.
15ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */
16ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepackage com.android.internal.telephony.dataconnection;
17ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
181ed331920d5a765da8b926e6aad2cb668203be53Hui Wangimport android.content.res.Resources;
19ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport java.util.HashMap;
20ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
21ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville/**
22ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Returned as the reason for a connection failure as defined
23ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * by RIL_DataCallFailCause in ril.h and some local errors.
24ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */
25ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepublic enum DcFailCause {
26ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    NONE(0),
27ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
28ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // This series of errors as specified by the standards
29ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // specified in ril.h
302ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    OPERATOR_BARRED(0x08),                  /* no retry */
31cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    NAS_SIGNALLING(0x0E),
32cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    LLC_SNDCP(0x19),
33ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    INSUFFICIENT_RESOURCES(0x1A),
342ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    MISSING_UNKNOWN_APN(0x1B),              /* no retry */
352ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    UNKNOWN_PDP_ADDRESS_TYPE(0x1C),         /* no retry */
362ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    USER_AUTHENTICATION(0x1D),              /* no retry */
372ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    ACTIVATION_REJECT_GGSN(0x1E),           /* no retry */
38ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    ACTIVATION_REJECT_UNSPECIFIED(0x1F),
392ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    SERVICE_OPTION_NOT_SUPPORTED(0x20),     /* no retry */
402ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    SERVICE_OPTION_NOT_SUBSCRIBED(0x21),    /* no retry */
41ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    SERVICE_OPTION_OUT_OF_ORDER(0x22),
422ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    NSAPI_IN_USE(0x23),                     /* no retry */
431ed331920d5a765da8b926e6aad2cb668203be53Hui Wang    REGULAR_DEACTIVATION(0x24),             /* possibly restart radio, based on config */
44cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    QOS_NOT_ACCEPTED(0x25),
45cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    NETWORK_FAILURE(0x26),
46cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    UMTS_REACTIVATION_REQ(0x27),
47cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    FEATURE_NOT_SUPP(0x28),
48cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    TFT_SEMANTIC_ERROR(0x29),
49cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    TFT_SYTAX_ERROR(0x2A),
50cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    UNKNOWN_PDP_CONTEXT(0x2B),
51cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    FILTER_SEMANTIC_ERROR(0x2C),
52cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    FILTER_SYTAX_ERROR(0x2D),
53cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    PDP_WITHOUT_ACTIVE_TFT(0x2E),
542ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    ONLY_IPV4_ALLOWED(0x32),                /* no retry */
552ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    ONLY_IPV6_ALLOWED(0x33),                /* no retry */
56ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    ONLY_SINGLE_BEARER_ALLOWED(0x34),
57cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    ESM_INFO_NOT_RECEIVED(0x35),
58cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    PDN_CONN_DOES_NOT_EXIST(0x36),
59cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED(0x37),
60cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    MAX_ACTIVE_PDP_CONTEXT_REACHED(0x41),
61cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    UNSUPPORTED_APN_IN_CURRENT_PLMN(0x42),
62cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    INVALID_TRANSACTION_ID(0x51),
63cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    MESSAGE_INCORRECT_SEMANTIC(0x5F),
64cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    INVALID_MANDATORY_INFO(0x60),
65cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    MESSAGE_TYPE_UNSUPPORTED(0x61),
66cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    MSG_TYPE_NONCOMPATIBLE_STATE(0x62),
67cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    UNKNOWN_INFO_ELEMENT(0x63),
68cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    CONDITIONAL_IE_ERROR(0x64),
69cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE(0x65),
702ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    PROTOCOL_ERRORS(0x6F),                  /* no retry */
71cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    APN_TYPE_CONFLICT(0x70),
72cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    INVALID_PCSCF_ADDR(0x71),
73cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN(0x72),
74cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    EMM_ACCESS_BARRED(0x73),
75cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    EMERGENCY_IFACE_ONLY(0x74),
76cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    IFACE_MISMATCH(0x75),
77cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    COMPANION_IFACE_IN_USE(0x76),
78cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    IP_ADDRESS_MISMATCH(0x77),
79cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    IFACE_AND_POL_FAMILY_MISMATCH(0x78),
80cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    EMM_ACCESS_BARRED_INFINITE_RETRY(0x79),
81cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    AUTH_FAILURE_ON_EMERGENCY_CALL(0x7A),
82cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe
83cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    // OEM sepecific error codes. To be used by OEMs when they don't
84cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    // want to reveal error code which would be replaced by ERROR_UNSPECIFIED
85cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_1(0x1001),
86cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_2(0x1002),
87cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_3(0x1003),
88cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_4(0x1004),
89cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_5(0x1005),
90cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_6(0x1006),
91cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_7(0x1007),
92cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_8(0x1008),
93cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_9(0x1009),
94cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_10(0x100A),
95cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_11(0x100B),
96cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_12(0x100C),
97cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_13(0x100D),
98cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_14(0x100E),
99cd3800ef6d32f5173e647924620501f7b5fcdb3fSanket Padawe    OEM_DCFAILCAUSE_15(0x100F),
100ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
101ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // Local errors generated by Vendor RIL
102ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // specified in ril.h
103ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    REGISTRATION_FAIL(-1),
104ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    GPRS_REGISTRATION_FAIL(-2),
1051ec85a29a26bfab4e21ad68000afc637e0cf171cWink Saville    SIGNAL_LOST(-3),
1062ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    PREF_RADIO_TECH_CHANGED(-4),            /* no retry */
1072ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    RADIO_POWER_OFF(-5),                    /* no retry */
1082ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    TETHERED_CALL_ACTIVE(-6),               /* no retry */
109ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    ERROR_UNSPECIFIED(0xFFFF),
110ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
111ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // Errors generated by the Framework
112ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // specified here
113ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    UNKNOWN(0x10000),
1142ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    RADIO_NOT_AVAILABLE(0x10001),                   /* no retry */
1152ae42257ebafdbb0470cedeab41c2f1b418b285cWink Saville    UNACCEPTABLE_NETWORK_PARAMETER(0x10002),        /* no retry */
116ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    CONNECTION_TO_DATACONNECTIONAC_BROKEN(0x10003),
117ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    LOST_CONNECTION(0x10004),
118ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    RESET_BY_FRAMEWORK(0x10005);
119ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
1201ed331920d5a765da8b926e6aad2cb668203be53Hui Wang    private final boolean mRestartRadioOnRegularDeactivation = Resources.getSystem().getBoolean(
1211ed331920d5a765da8b926e6aad2cb668203be53Hui Wang            com.android.internal.R.bool.config_restart_radio_on_pdp_fail_regular_deactivation);
122ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private final int mErrorCode;
123ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private static final HashMap<Integer, DcFailCause> sErrorCodeToFailCauseMap;
124ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    static {
125ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        sErrorCodeToFailCauseMap = new HashMap<Integer, DcFailCause>();
126ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        for (DcFailCause fc : values()) {
127ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            sErrorCodeToFailCauseMap.put(fc.getErrorCode(), fc);
128ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        }
129ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
130ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
131ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    DcFailCause(int errorCode) {
132ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        mErrorCode = errorCode;
133ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
134ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
135ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public int getErrorCode() {
136ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return mErrorCode;
137ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
138ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
139979786625e7ceacf4a545a25704ef8a15338a854Wink Saville    /** Radio has failed such that the radio should be restarted */
140979786625e7ceacf4a545a25704ef8a15338a854Wink Saville    public boolean isRestartRadioFail() {
1411ed331920d5a765da8b926e6aad2cb668203be53Hui Wang        return (this == REGULAR_DEACTIVATION && mRestartRadioOnRegularDeactivation);
142979786625e7ceacf4a545a25704ef8a15338a854Wink Saville    }
143979786625e7ceacf4a545a25704ef8a15338a854Wink Saville
144ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public boolean isPermanentFail() {
145ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return (this == OPERATOR_BARRED) || (this == MISSING_UNKNOWN_APN) ||
146ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == UNKNOWN_PDP_ADDRESS_TYPE) || (this == USER_AUTHENTICATION) ||
147ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == ACTIVATION_REJECT_GGSN) || (this == SERVICE_OPTION_NOT_SUPPORTED) ||
148ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == SERVICE_OPTION_NOT_SUBSCRIBED) || (this == NSAPI_IN_USE) ||
149ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == ONLY_IPV4_ALLOWED) || (this == ONLY_IPV6_ALLOWED) ||
150ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == PROTOCOL_ERRORS) ||
151ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == RADIO_POWER_OFF) || (this == TETHERED_CALL_ACTIVE) ||
152ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == RADIO_NOT_AVAILABLE) || (this == UNACCEPTABLE_NETWORK_PARAMETER) ||
153ad31aa03d7cab4d719d81c23df2db33e029c8cedAmit Mahajan                (this == SIGNAL_LOST);
154ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
155ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
156ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public boolean isEventLoggable() {
157ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return (this == OPERATOR_BARRED) || (this == INSUFFICIENT_RESOURCES) ||
158ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == UNKNOWN_PDP_ADDRESS_TYPE) || (this == USER_AUTHENTICATION) ||
159ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == ACTIVATION_REJECT_GGSN) || (this == ACTIVATION_REJECT_UNSPECIFIED) ||
160ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == SERVICE_OPTION_NOT_SUBSCRIBED) ||
161ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == SERVICE_OPTION_NOT_SUPPORTED) ||
162ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == SERVICE_OPTION_OUT_OF_ORDER) || (this == NSAPI_IN_USE) ||
163ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == ONLY_IPV4_ALLOWED) || (this == ONLY_IPV6_ALLOWED) ||
164ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == PROTOCOL_ERRORS) || (this == SIGNAL_LOST) ||
165ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == RADIO_POWER_OFF) || (this == TETHERED_CALL_ACTIVE) ||
166ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                (this == UNACCEPTABLE_NETWORK_PARAMETER);
167ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
168ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
169ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public static DcFailCause fromInt(int errorCode) {
170ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        DcFailCause fc = sErrorCodeToFailCauseMap.get(errorCode);
171ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        if (fc == null) {
172ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            fc = UNKNOWN;
173ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        }
174ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return fc;
175ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
176ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville}
177