summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--telephony/java/com/android/internal/telephony/DataConnection.java94
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java2
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java19
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java45
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/PdpConnection.java75
5 files changed, 130 insertions, 105 deletions
diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java
index 6e9d1abeb8e4..7809fed62d25 100644
--- a/telephony/java/com/android/internal/telephony/DataConnection.java
+++ b/telephony/java/com/android/internal/telephony/DataConnection.java
@@ -55,57 +55,83 @@ public abstract class DataConnection extends Handler {
public enum FailCause {
NONE,
- BAD_APN,
- BAD_PAP_SECRET,
- BARRED,
+ OPERATOR_BARRED,
+ INSUFFICIENT_RESOURCES,
+ MISSING_UKNOWN_APN,
+ UNKNOWN_PDP_ADDRESS,
USER_AUTHENTICATION,
+ ACTIVATION_REJECT_GGSN,
+ ACTIVATION_REJECT_UNSPECIFIED,
SERVICE_OPTION_NOT_SUPPORTED,
SERVICE_OPTION_NOT_SUBSCRIBED,
- SIM_LOCKED,
- RADIO_OFF,
- NO_SIGNAL,
- NO_DATA_PLAN,
+ SERVICE_OPTION_OUT_OF_ORDER,
+ NSAPI_IN_USE,
+ PROTOCOL_ERRORS,
+ REGISTRATION_FAIL,
+ GPRS_REGISTRATION_FAIL,
+ UNKNOWN,
+
RADIO_NOT_AVAILABLE,
- SUSPENED_TEMPORARY,
- RADIO_ERROR_RETRY,
- UNKNOWN;
+ RADIO_ERROR_RETRY;
public boolean isPermanentFail() {
- return (this == RADIO_OFF);
+ return (this == OPERATOR_BARRED) || (this == MISSING_UKNOWN_APN) ||
+ (this == UNKNOWN_PDP_ADDRESS) || (this == USER_AUTHENTICATION) ||
+ (this == ACTIVATION_REJECT_GGSN) || (this == ACTIVATION_REJECT_UNSPECIFIED) ||
+ (this == SERVICE_OPTION_NOT_SUPPORTED) ||
+ (this == SERVICE_OPTION_NOT_SUBSCRIBED) || (this == NSAPI_IN_USE) ||
+ (this == PROTOCOL_ERRORS);
+ }
+
+ public boolean isEventLoggable() {
+ return (this == OPERATOR_BARRED) || (this == INSUFFICIENT_RESOURCES) ||
+ (this == UNKNOWN_PDP_ADDRESS) || (this == USER_AUTHENTICATION) ||
+ (this == ACTIVATION_REJECT_GGSN) || (this == ACTIVATION_REJECT_UNSPECIFIED) ||
+ (this == SERVICE_OPTION_NOT_SUBSCRIBED) ||
+ (this == SERVICE_OPTION_NOT_SUPPORTED) ||
+ (this == SERVICE_OPTION_OUT_OF_ORDER) || (this == NSAPI_IN_USE) ||
+ (this == PROTOCOL_ERRORS);
}
+ @Override
public String toString() {
switch (this) {
case NONE:
- return "no error";
- case BAD_APN:
- return "bad apn";
- case BAD_PAP_SECRET:
- return "bad pap secret";
- case BARRED:
- return "barred";
+ return "No Error";
+ case OPERATOR_BARRED:
+ return "Operator Barred";
+ case INSUFFICIENT_RESOURCES:
+ return "Insufficient Resources";
+ case MISSING_UKNOWN_APN:
+ return "Missing / Unknown APN";
+ case UNKNOWN_PDP_ADDRESS:
+ return "Unknown PDP Address";
case USER_AUTHENTICATION:
- return "error user autentication";
+ return "Error User Autentication";
+ case ACTIVATION_REJECT_GGSN:
+ return "Activation Reject GGSN";
+ case ACTIVATION_REJECT_UNSPECIFIED:
+ return "Activation Reject unspecified";
case SERVICE_OPTION_NOT_SUPPORTED:
- return "data not supported";
+ return "Data Not Supported";
case SERVICE_OPTION_NOT_SUBSCRIBED:
- return "datt not subcribed";
- case SIM_LOCKED:
- return "sim locked";
- case RADIO_OFF:
- return "radio is off";
- case NO_SIGNAL:
- return "no signal";
- case NO_DATA_PLAN:
- return "no data plan";
+ return "Data Not subscribed";
+ case SERVICE_OPTION_OUT_OF_ORDER:
+ return "Data Services Out of Order";
+ case NSAPI_IN_USE:
+ return "NSAPI in use";
+ case PROTOCOL_ERRORS:
+ return "Protocol Errors";
+ case REGISTRATION_FAIL:
+ return "Network Registration Failure";
+ case GPRS_REGISTRATION_FAIL:
+ return "Data Network Registration Failure";
case RADIO_NOT_AVAILABLE:
- return "radio not available";
- case SUSPENED_TEMPORARY:
- return "suspend temporary";
+ return "Radio Not Available";
case RADIO_ERROR_RETRY:
- return "transient radio error";
+ return "Transient Radio Rrror";
default:
- return "unknown data error";
+ return "Unknown Data Error";
}
}
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java
index a9c0f4605ae1..f2b07a880356 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java
@@ -233,7 +233,7 @@ public class CdmaDataConnection extends DataConnection {
switch (rilCause) {
case PS_NET_DOWN_REASON_OPERATOR_DETERMINED_BARRING:
- cause = FailCause.BARRED;
+ cause = FailCause.OPERATOR_BARRED;
break;
case PS_NET_DOWN_REASON_AUTH_FAILED:
cause = FailCause.USER_AUTHENTICATION;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index c922cec8a667..2a65de335b35 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -746,16 +746,9 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
// No try for permanent failure
if (cause.isPermanentFail()) {
notifyNoData(cause);
+ return;
}
-
- if (tryAgain(cause)) {
- // Wait a bit before trying again, so that
- // we're not tying up the RIL command channel
- sendMessageDelayed(obtainMessage(EVENT_TRY_SETUP_DATA, reason),
- RECONNECT_DELAY_INITIAL_MILLIS);
- } else {
- startDelayedRetry(cause, reason);
- }
+ startDelayedRetry(cause, reason);
}
}
@@ -812,14 +805,6 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
cleanUpConnection(tearDown, reason);
}
- private boolean tryAgain(FailCause cause) {
- return (cause != FailCause.RADIO_NOT_AVAILABLE)
- && (cause != FailCause.RADIO_OFF)
- && (cause != FailCause.RADIO_ERROR_RETRY)
- && (cause != FailCause.NO_SIGNAL)
- && (cause != FailCause.SIM_LOCKED);
- }
-
private void createAllDataConnectionList() {
dataConnectionList = new ArrayList<DataConnection>();
CdmaDataConnection dataConn;
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 71af4062224b..035c6901f0e6 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -588,7 +588,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
waitingApns = buildWaitingApns();
if (waitingApns.isEmpty()) {
if (DBG) log("No APN found");
- notifyNoData(PdpConnection.FailCause.BAD_APN);
+ notifyNoData(PdpConnection.FailCause.MISSING_UKNOWN_APN);
return false;
} else {
log ("Create from allApns : " + apnListToString(allApns));
@@ -1315,13 +1315,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
cause = (PdpConnection.FailCause) (ar.result);
if(DBG) log("PDP setup failed " + cause);
// Log this failure to the Event Logs.
- if (cause == PdpConnection.FailCause.BAD_APN ||
- cause == PdpConnection.FailCause.BAD_PAP_SECRET ||
- cause == PdpConnection.FailCause.BARRED ||
- cause == PdpConnection.FailCause.RADIO_ERROR_RETRY ||
- cause == PdpConnection.FailCause.SUSPENED_TEMPORARY ||
- cause == PdpConnection.FailCause.UNKNOWN ||
- cause == PdpConnection.FailCause.USER_AUTHENTICATION) {
+ if (cause.isEventLoggable()) {
int cid = -1;
GsmCellLocation loc = ((GsmCellLocation)phone.getCellLocation());
if (loc != null) cid = loc.getCid();
@@ -1335,23 +1329,20 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
// No try for permanent failure
if (cause.isPermanentFail()) {
notifyNoData(cause);
+ return;
}
- if (tryNextApn(cause)) {
- waitingApns.remove(0);
- if (waitingApns.isEmpty()) {
- // No more to try, start delayed retry
- startDelayedRetry(cause, reason);
- } else {
- // we still have more apns to try
- setState(State.SCANNING);
- // Wait a bit before trying the next APN, so that
- // we're not tying up the RIL command channel
- sendMessageDelayed(obtainMessage(EVENT_TRY_SETUP_DATA, reason),
- RECONNECT_DELAY_INITIAL_MILLIS);
- }
- } else {
+ waitingApns.remove(0);
+ if (waitingApns.isEmpty()) {
+ // No more to try, start delayed retry
startDelayedRetry(cause, reason);
+ } else {
+ // we still have more apns to try
+ setState(State.SCANNING);
+ // Wait a bit before trying the next APN, so that
+ // we're not tying up the RIL command channel
+ sendMessageDelayed(obtainMessage(EVENT_TRY_SETUP_DATA, reason),
+ RECONNECT_DELAY_INITIAL_MILLIS);
}
}
}
@@ -1406,14 +1397,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
cleanUpConnection(tearDown, reason);
}
- private boolean tryNextApn(FailCause cause) {
- return (cause != FailCause.RADIO_NOT_AVAILABLE)
- && (cause != FailCause.RADIO_OFF)
- && (cause != FailCause.RADIO_ERROR_RETRY)
- && (cause != FailCause.NO_SIGNAL)
- && (cause != FailCause.SIM_LOCKED);
- }
-
private int getRestoreDefaultApnDelay() {
String restoreApnDelayStr = SystemProperties.get(APN_RESTORE_DELAY_PROP_NAME);
@@ -1460,7 +1443,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
if (allApns.isEmpty()) {
if (DBG) log("No APN found for carrier: " + operator);
preferredApn = null;
- notifyNoData(PdpConnection.FailCause.BAD_APN);
+ notifyNoData(PdpConnection.FailCause.MISSING_UKNOWN_APN);
} else {
preferredApn = getPreferredApn();
Log.d(LOG_TAG, "Get PreferredAPN");
diff --git a/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java b/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java
index 3f794a89366d..278beef7fb2d 100644
--- a/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java
+++ b/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java
@@ -35,15 +35,24 @@ public class PdpConnection extends DataConnection {
private static final String LOG_TAG = "GSM";
private static final boolean DBG = true;
- private static final boolean FAKE_FAIL = false;
/** Fail cause of last PDP activate, from RIL_LastPDPActivateFailCause */
- private static final int PDP_FAIL_RIL_BARRED = 8;
- private static final int PDP_FAIL_RIL_BAD_APN = 27;
- private static final int PDP_FAIL_RIL_USER_AUTHENTICATION = 29;
- private static final int PDP_FAIL_RIL_SERVICE_OPTION_NOT_SUPPORTED = 32;
- private static final int PDP_FAIL_RIL_SERVICE_OPTION_NOT_SUBSCRIBED = 33;
- private static final int PDP_FAIL_RIL_ERROR_UNSPECIFIED = 0xffff;
+ private static final int PDP_FAIL_OPERATOR_BARRED = 0x08;
+ private static final int PDP_FAIL_INSUFFICIENT_RESOURCES = 0x1A;
+ private static final int PDP_FAIL_MISSING_UKNOWN_APN = 0x1B;
+ private static final int PDP_FAIL_UNKNOWN_PDP_ADDRESS_TYPE = 0x1C;
+ private static final int PDP_FAIL_USER_AUTHENTICATION = 0x1D;
+ private static final int PDP_FAIL_ACTIVATION_REJECT_GGSN = 0x1E;
+ private static final int PDP_FAIL_ACTIVATION_REJECT_UNSPECIFIED = 0x1F;
+ private static final int PDP_FAIL_SERVICE_OPTION_NOT_SUPPORTED = 0x20;
+ private static final int PDP_FAIL_SERVICE_OPTION_NOT_SUBSCRIBED = 0x21;
+ private static final int PDP_FAIL_SERVICE_OPTION_OUT_OF_ORDER = 0x22;
+ private static final int PDP_FAIL_NSAPI_IN_USE = 0x23;
+ private static final int PDP_FAIL_PROTOCOL_ERRORS = 0x6F;
+ private static final int PDP_FAIL_ERROR_UNSPECIFIED = 0xffff;
+
+ private static final int PDP_FAIL_REGISTRATION_FAIL = -1;
+ private static final int PDP_FAIL_GPRS_REGISTRATION_FAIL = -2;
//***** Instance Variables
private String pdp_name;
@@ -83,14 +92,6 @@ public class PdpConnection extends DataConnection {
lastFailCause = FailCause.NONE;
receivedDisconnectReq = false;
- if (FAKE_FAIL) {
- // for debug before baseband implement error in setup PDP
- if (apn.apn.equalsIgnoreCase("badapn")){
- notifyFail(FailCause.BAD_APN, onConnectCompleted);
- return;
- }
- }
-
phone.mCM.setupDataCall(Integer.toString(RILConstants.GSM_PHONE), null, apn.apn, apn.user,
apn.password, obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE));
}
@@ -190,21 +191,51 @@ public class PdpConnection extends DataConnection {
FailCause cause;
switch (rilCause) {
- case PDP_FAIL_RIL_BARRED:
- cause = FailCause.BARRED;
+ case PDP_FAIL_OPERATOR_BARRED:
+ cause = FailCause.OPERATOR_BARRED;
+ break;
+ case PDP_FAIL_INSUFFICIENT_RESOURCES:
+ cause = FailCause.INSUFFICIENT_RESOURCES;
break;
- case PDP_FAIL_RIL_BAD_APN:
- cause = FailCause.BAD_APN;
+ case PDP_FAIL_MISSING_UKNOWN_APN:
+ cause = FailCause.MISSING_UKNOWN_APN;
break;
- case PDP_FAIL_RIL_USER_AUTHENTICATION:
+ case PDP_FAIL_UNKNOWN_PDP_ADDRESS_TYPE:
+ cause = FailCause.UNKNOWN_PDP_ADDRESS;
+ break;
+ case PDP_FAIL_USER_AUTHENTICATION:
cause = FailCause.USER_AUTHENTICATION;
break;
- case PDP_FAIL_RIL_SERVICE_OPTION_NOT_SUPPORTED:
+ case PDP_FAIL_ACTIVATION_REJECT_GGSN:
+ cause = FailCause.ACTIVATION_REJECT_GGSN;
+ break;
+ case PDP_FAIL_ACTIVATION_REJECT_UNSPECIFIED:
+ cause = FailCause.ACTIVATION_REJECT_UNSPECIFIED;
+ break;
+ case PDP_FAIL_SERVICE_OPTION_OUT_OF_ORDER:
+ cause = FailCause.SERVICE_OPTION_OUT_OF_ORDER;
+ break;
+ case PDP_FAIL_SERVICE_OPTION_NOT_SUPPORTED:
cause = FailCause.SERVICE_OPTION_NOT_SUPPORTED;
break;
- case PDP_FAIL_RIL_SERVICE_OPTION_NOT_SUBSCRIBED:
+ case PDP_FAIL_SERVICE_OPTION_NOT_SUBSCRIBED:
cause = FailCause.SERVICE_OPTION_NOT_SUBSCRIBED;
break;
+ case PDP_FAIL_NSAPI_IN_USE:
+ cause = FailCause.NSAPI_IN_USE;
+ break;
+ case PDP_FAIL_PROTOCOL_ERRORS:
+ cause = FailCause.PROTOCOL_ERRORS;
+ break;
+ case PDP_FAIL_ERROR_UNSPECIFIED:
+ cause = FailCause.UNKNOWN;
+ break;
+ case PDP_FAIL_REGISTRATION_FAIL:
+ cause = FailCause.REGISTRATION_FAIL;
+ break;
+ case PDP_FAIL_GPRS_REGISTRATION_FAIL:
+ cause = FailCause.GPRS_REGISTRATION_FAIL;
+ break;
default:
cause = FailCause.UNKNOWN;
}