Snap for 7595830 from 07eab21cb76b90b4a296a25b9e88143bba057bb2 to sc-release
Change-Id: Ia0dd23e4bea9876afb86ba42f65c8dfca2a069ea
diff --git a/src/com/google/android/iwlan/IwlanDataService.java b/src/com/google/android/iwlan/IwlanDataService.java
index 3537776..8b02ddb 100644
--- a/src/com/google/android/iwlan/IwlanDataService.java
+++ b/src/com/google/android/iwlan/IwlanDataService.java
@@ -205,6 +205,7 @@
static final int TUNNEL_IN_BRINGUP = 2;
static final int TUNNEL_UP = 3;
static final int TUNNEL_IN_BRINGDOWN = 4;
+ static final int TUNNEL_IN_FORCE_CLEAN_WAS_IN_BRINGUP = 5;
private DataServiceCallback dataServiceCallback;
private int mState;
private int mPduSessionId;
@@ -304,6 +305,9 @@
case TUNNEL_IN_BRINGDOWN:
tunnelState = "IN BRINGDOWN";
break;
+ case TUNNEL_IN_FORCE_CLEAN_WAS_IN_BRINGUP:
+ tunnelState = "IN FORCE CLEAN WAS IN BRINGUP";
+ break;
}
sb.append("\tCurrent State of this tunnel: " + mState + " " + tunnelState);
sb.append("\n\tTunnel state is in Handover: " + mIsHandover);
@@ -363,7 +367,9 @@
mTunnelStats.reportTunnelDown(apnName, tunnelState);
mTunnelStateForApn.remove(apnName);
- if (tunnelState.getState() == TunnelState.TUNNEL_IN_BRINGUP) {
+ if (tunnelState.getState() == TunnelState.TUNNEL_IN_BRINGUP
+ || tunnelState.getState()
+ == TunnelState.TUNNEL_IN_FORCE_CLEAN_WAS_IN_BRINGUP) {
DataCallResponse.Builder respBuilder = new DataCallResponse.Builder();
respBuilder
.setId(apnName.hashCode())
@@ -379,12 +385,18 @@
.HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL);
}
- respBuilder.setCause(
- ErrorPolicyManager.getInstance(mContext, getSlotIndex())
- .getDataFailCause(apnName));
- respBuilder.setRetryDurationMillis(
- ErrorPolicyManager.getInstance(mContext, getSlotIndex())
- .getCurrentRetryTimeMs(apnName));
+ if (tunnelState.getState() == TunnelState.TUNNEL_IN_BRINGUP) {
+ respBuilder.setCause(
+ ErrorPolicyManager.getInstance(mContext, getSlotIndex())
+ .getDataFailCause(apnName));
+ respBuilder.setRetryDurationMillis(
+ ErrorPolicyManager.getInstance(mContext, getSlotIndex())
+ .getCurrentRetryTimeMs(apnName));
+ } else if (tunnelState.getState()
+ == TunnelState.TUNNEL_IN_FORCE_CLEAN_WAS_IN_BRINGUP) {
+ respBuilder.setCause(DataFailCause.IWLAN_NETWORK_FAILURE);
+ respBuilder.setRetryDurationMillis(5000);
+ }
deliverCallback(
CALLBACK_TYPE_SETUP_DATACALL_COMPLETE,
@@ -1022,6 +1034,7 @@
// updating network for tunnels that are already up.
// This may not result in actual closing of Ike Session since
// epdg selection may not be complete yet.
+ tunnelState.setState(TunnelState.TUNNEL_IN_FORCE_CLEAN_WAS_IN_BRINGUP);
getTunnelManager().closeTunnel(entry.getKey(), true);
} else {
if (mIwlanDataService.isNetworkConnected(
@@ -1170,7 +1183,7 @@
sDefaultDataTransport = transport;
sNetwork = network;
if (!networkConnected) {
- //reset link protocol type
+ // reset link protocol type
sLinkProtocolType = LinkProtocolType.UNKNOWN;
}
}