Loading src/java/com/android/internal/telephony/data/DataNetwork.java +35 −39 Original line number Diff line number Diff line Loading @@ -83,7 +83,6 @@ import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.RIL; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEntry; Loading Loading @@ -576,11 +575,6 @@ public class DataNetwork extends StateMachine { */ private @DataFailureCause int mFailCause = DataFailCause.NONE; /** * The retry delay in milliseconds from setup data failure. */ private long mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; /** * Indicates if data network is suspended. Note this is slightly different from the * {@link TelephonyManager#DATA_SUSPENDED}, which is only possible when data network is in Loading Loading @@ -1066,8 +1060,10 @@ public class DataNetwork extends StateMachine { UUID.fromString("58c56403-7ea7-4e56-a0c7-e467114d09b8"), message); // Setup data failed. Use the retry logic defined in // CarrierConfigManager.KEY_TELEPHONY_DATA_SETUP_RETRY_RULES_STRING_ARRAY. mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; mFailCause = DataFailCause.NO_RETRY_FAILURE; mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, mAttachedNetworkRequestList, DataFailCause.NO_RETRY_FAILURE, DataCallResponse.RETRY_DURATION_UNDEFINED)); transitionTo(mDisconnectedState); break; default: Loading Loading @@ -1344,18 +1340,6 @@ public class DataNetwork extends StateMachine { @Override public void enter() { logl("Data network disconnected. mEverConnected=" + mEverConnected); if (mEverConnected) { mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, mFailCause)); if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) { unregisterForWwanEvents(); } } else { mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, new NetworkRequestList(mAttachedNetworkRequestList), mFailCause, mRetryDelayMillis)); } // The detach all network requests must be the last message to handle. sendMessage(EVENT_DETACH_ALL_NETWORK_REQUESTS); // Gracefully handle all the un-processed events then quit the state machine. Loading Loading @@ -2071,8 +2055,12 @@ public class DataNetwork extends StateMachine { transitionTo(mConnectedState); } else { // Setup data failed. mRetryDelayMillis = response != null ? response.getRetryDurationMillis() long retryDelayMillis = response != null ? response.getRetryDurationMillis() : DataCallResponse.RETRY_DURATION_UNDEFINED; NetworkRequestList requestList = new NetworkRequestList(mAttachedNetworkRequestList); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback.onSetupDataFailed( DataNetwork.this, requestList, mFailCause, retryDelayMillis)); transitionTo(mDisconnectedState); } Loading @@ -2099,7 +2087,9 @@ public class DataNetwork extends StateMachine { + DataServiceCallback.resultCodeToString(resultCode)); if (resultCode == DataServiceCallback.RESULT_ERROR_INVALID_RESPONSE) { log("Remove network since deactivate request returned an error."); mFailCause = DataFailCause.RADIO_NOT_AVAILABLE; mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onDisconnected( DataNetwork.this, DataFailCause.RADIO_NOT_AVAILABLE)); transitionTo(mDisconnectedState); } } Loading Loading @@ -2195,24 +2185,23 @@ public class DataNetwork extends StateMachine { log("onDataStateChanged: " + response); mDataCallResponse = response; if (response.getLinkStatus() != DataCallResponse.LINK_STATUS_INACTIVE) { if (mPhone.getHalVersion().greaterOrEqual(RIL.RADIO_HAL_VERSION_1_6) && response.getTrafficDescriptors().isEmpty()) { log("onDataStateChanged: No traffic descriptors reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mFailCause = DataFailCause.NO_TRAFFIC_DESCRIPTORS; mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; transitionTo(mDisconnectedState); } else { updateDataNetwork(response); } } else { log("onDataStateChanged: PDN inactive reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mFailCause = mEverConnected ? response.getCause() : DataFailCause.NO_RETRY_FAILURE; mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; if (mEverConnected) { mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onDisconnected( DataNetwork.this, response.getCause())); } else { log("onDataStateChanged: never in connected state. Treated as a setup " + "failure."); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, mAttachedNetworkRequestList, DataFailCause.NO_RETRY_FAILURE, DataCallResponse.RETRY_DURATION_UNDEFINED)); } transitionTo(mDisconnectedState); } } Loading @@ -2222,9 +2211,16 @@ public class DataNetwork extends StateMachine { // for that log("onDataStateChanged: PDN disconnected reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mFailCause = mEverConnected ? DataFailCause.LOST_CONNECTION : DataFailCause.NO_RETRY_FAILURE; mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; if (mEverConnected) { mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, DataFailCause.LOST_CONNECTION)); } else { log("onDataStateChanged: never in connected state. Treated as a setup failure."); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, mAttachedNetworkRequestList, DataFailCause.NO_RETRY_FAILURE, DataCallResponse.RETRY_DURATION_UNDEFINED)); } transitionTo(mDisconnectedState); } } Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +0 −24 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ import android.testing.TestableLooper; import android.util.Pair; import android.util.SparseArray; import com.android.internal.telephony.RIL; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataNetwork.DataNetworkCallback; Loading Loading @@ -704,27 +703,4 @@ public class DataNetworkTest extends TelephonyTest { DataFailCause.RADIO_NOT_AVAILABLE)); assertThat(mDataNetworkUT.isConnected()).isFalse(); } @Test public void tearTearDownNoTrafficDescriptors() throws Exception { doReturn(RIL.RADIO_HAL_VERSION_1_6).when(mPhone).getHalVersion(); testCreateDataNetwork(); assertThat(mDataNetworkUT.isConnected()).isTrue(); mDataNetworkUT.sendMessage(8/*EVENT_DATA_STATE_CHANGED*/, new AsyncResult(AccessNetworkConstants.TRANSPORT_TYPE_WWAN, new ArrayList<>(Arrays.asList(new DataCallResponse.Builder() .setCause(DataFailCause.NONE) .setRetryDurationMillis(DataCallResponse.RETRY_DURATION_UNDEFINED) .setId(123) .setLinkStatus(DataCallResponse.LINK_STATUS_ACTIVE) .setProtocolType(ApnSetting.PROTOCOL_IPV4V6) .setQosBearerSessions(new ArrayList<>()) .setTrafficDescriptors(new ArrayList<>()) .build())), null)); processAllMessages(); verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT), eq(DataFailCause.NO_TRAFFIC_DESCRIPTORS)); assertThat(mDataNetworkUT.isConnected()).isFalse(); } } Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +35 −39 Original line number Diff line number Diff line Loading @@ -83,7 +83,6 @@ import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.RIL; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEntry; Loading Loading @@ -576,11 +575,6 @@ public class DataNetwork extends StateMachine { */ private @DataFailureCause int mFailCause = DataFailCause.NONE; /** * The retry delay in milliseconds from setup data failure. */ private long mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; /** * Indicates if data network is suspended. Note this is slightly different from the * {@link TelephonyManager#DATA_SUSPENDED}, which is only possible when data network is in Loading Loading @@ -1066,8 +1060,10 @@ public class DataNetwork extends StateMachine { UUID.fromString("58c56403-7ea7-4e56-a0c7-e467114d09b8"), message); // Setup data failed. Use the retry logic defined in // CarrierConfigManager.KEY_TELEPHONY_DATA_SETUP_RETRY_RULES_STRING_ARRAY. mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; mFailCause = DataFailCause.NO_RETRY_FAILURE; mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, mAttachedNetworkRequestList, DataFailCause.NO_RETRY_FAILURE, DataCallResponse.RETRY_DURATION_UNDEFINED)); transitionTo(mDisconnectedState); break; default: Loading Loading @@ -1344,18 +1340,6 @@ public class DataNetwork extends StateMachine { @Override public void enter() { logl("Data network disconnected. mEverConnected=" + mEverConnected); if (mEverConnected) { mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, mFailCause)); if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) { unregisterForWwanEvents(); } } else { mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, new NetworkRequestList(mAttachedNetworkRequestList), mFailCause, mRetryDelayMillis)); } // The detach all network requests must be the last message to handle. sendMessage(EVENT_DETACH_ALL_NETWORK_REQUESTS); // Gracefully handle all the un-processed events then quit the state machine. Loading Loading @@ -2071,8 +2055,12 @@ public class DataNetwork extends StateMachine { transitionTo(mConnectedState); } else { // Setup data failed. mRetryDelayMillis = response != null ? response.getRetryDurationMillis() long retryDelayMillis = response != null ? response.getRetryDurationMillis() : DataCallResponse.RETRY_DURATION_UNDEFINED; NetworkRequestList requestList = new NetworkRequestList(mAttachedNetworkRequestList); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback.onSetupDataFailed( DataNetwork.this, requestList, mFailCause, retryDelayMillis)); transitionTo(mDisconnectedState); } Loading @@ -2099,7 +2087,9 @@ public class DataNetwork extends StateMachine { + DataServiceCallback.resultCodeToString(resultCode)); if (resultCode == DataServiceCallback.RESULT_ERROR_INVALID_RESPONSE) { log("Remove network since deactivate request returned an error."); mFailCause = DataFailCause.RADIO_NOT_AVAILABLE; mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onDisconnected( DataNetwork.this, DataFailCause.RADIO_NOT_AVAILABLE)); transitionTo(mDisconnectedState); } } Loading Loading @@ -2195,24 +2185,23 @@ public class DataNetwork extends StateMachine { log("onDataStateChanged: " + response); mDataCallResponse = response; if (response.getLinkStatus() != DataCallResponse.LINK_STATUS_INACTIVE) { if (mPhone.getHalVersion().greaterOrEqual(RIL.RADIO_HAL_VERSION_1_6) && response.getTrafficDescriptors().isEmpty()) { log("onDataStateChanged: No traffic descriptors reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mFailCause = DataFailCause.NO_TRAFFIC_DESCRIPTORS; mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; transitionTo(mDisconnectedState); } else { updateDataNetwork(response); } } else { log("onDataStateChanged: PDN inactive reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mFailCause = mEverConnected ? response.getCause() : DataFailCause.NO_RETRY_FAILURE; mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; if (mEverConnected) { mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onDisconnected( DataNetwork.this, response.getCause())); } else { log("onDataStateChanged: never in connected state. Treated as a setup " + "failure."); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, mAttachedNetworkRequestList, DataFailCause.NO_RETRY_FAILURE, DataCallResponse.RETRY_DURATION_UNDEFINED)); } transitionTo(mDisconnectedState); } } Loading @@ -2222,9 +2211,16 @@ public class DataNetwork extends StateMachine { // for that log("onDataStateChanged: PDN disconnected reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mFailCause = mEverConnected ? DataFailCause.LOST_CONNECTION : DataFailCause.NO_RETRY_FAILURE; mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; if (mEverConnected) { mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, DataFailCause.LOST_CONNECTION)); } else { log("onDataStateChanged: never in connected state. Treated as a setup failure."); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSetupDataFailed(DataNetwork.this, mAttachedNetworkRequestList, DataFailCause.NO_RETRY_FAILURE, DataCallResponse.RETRY_DURATION_UNDEFINED)); } transitionTo(mDisconnectedState); } } Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +0 −24 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ import android.testing.TestableLooper; import android.util.Pair; import android.util.SparseArray; import com.android.internal.telephony.RIL; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataNetwork.DataNetworkCallback; Loading Loading @@ -704,27 +703,4 @@ public class DataNetworkTest extends TelephonyTest { DataFailCause.RADIO_NOT_AVAILABLE)); assertThat(mDataNetworkUT.isConnected()).isFalse(); } @Test public void tearTearDownNoTrafficDescriptors() throws Exception { doReturn(RIL.RADIO_HAL_VERSION_1_6).when(mPhone).getHalVersion(); testCreateDataNetwork(); assertThat(mDataNetworkUT.isConnected()).isTrue(); mDataNetworkUT.sendMessage(8/*EVENT_DATA_STATE_CHANGED*/, new AsyncResult(AccessNetworkConstants.TRANSPORT_TYPE_WWAN, new ArrayList<>(Arrays.asList(new DataCallResponse.Builder() .setCause(DataFailCause.NONE) .setRetryDurationMillis(DataCallResponse.RETRY_DURATION_UNDEFINED) .setId(123) .setLinkStatus(DataCallResponse.LINK_STATUS_ACTIVE) .setProtocolType(ApnSetting.PROTOCOL_IPV4V6) .setQosBearerSessions(new ArrayList<>()) .setTrafficDescriptors(new ArrayList<>()) .build())), null)); processAllMessages(); verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT), eq(DataFailCause.NO_TRAFFIC_DESCRIPTORS)); assertThat(mDataNetworkUT.isConnected()).isFalse(); } }