Loading src/java/com/android/internal/telephony/dataconnection/ApnContext.java +41 −7 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.net.NetworkConfig; import android.telephony.Rlog; import android.text.TextUtils; import android.util.LocalLog; import com.android.internal.R; import com.android.internal.telephony.DctConstants; Loading Loading @@ -271,16 +272,48 @@ public class ApnContext { } } public void incRefCount() { private final ArrayList<LocalLog> mLocalLogs = new ArrayList<LocalLog>(); public void requestLog(String str) { synchronized (mRefCountLock) { for (LocalLog l : mLocalLogs) { l.log(str); } } } public void incRefCount(LocalLog log) { synchronized (mRefCountLock) { if (mRefCount == 0) { // we wanted to leave the last in so it could actually capture the tear down // of the network requestLog("clearing log with size=" + mLocalLogs.size()); mLocalLogs.clear(); } if (mLocalLogs.contains(log)) { log.log("ApnContext.incRefCount has duplicate add - " + mRefCount); } else { mLocalLogs.add(log); log.log("ApnContext.incRefCount - " + mRefCount); } if (mRefCount++ == 0) { mDcTracker.setEnabled(mDcTracker.apnTypeToId(mApnType), true); } } } public void decRefCount() { public void decRefCount(LocalLog log) { synchronized (mRefCountLock) { // leave the last log alive to capture the actual tear down if (mRefCount != 1) { if (mLocalLogs.remove(log)) { log.log("ApnContext.decRefCount - " + mRefCount); } else { log.log("ApnContext.decRefCount didn't find log - " + mRefCount); } } else { log.log("ApnContext.decRefCount - 1"); } if (mRefCount-- == 1) { mDcTracker.setEnabled(mDcTracker.apnTypeToId(mApnType), false); } Loading @@ -290,13 +323,14 @@ public class ApnContext { @Override public synchronized String toString() { // We don't print mDataConnection because its recursive. return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns={" + mWaitingApns + "} mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown + " mApnSetting={" + mApnSetting + "} mReason=" + mReason + " mDataEnabled=" + mDataEnabled + " mDependencyMet=" + mDependencyMet + "}"; return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns={" + mWaitingApns + "} mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown + " mApnSetting={" + mApnSetting + "} mReason=" + mReason + " mDataEnabled=" + mDataEnabled + " mDependencyMet=" + mDependencyMet + "}"; } protected void log(String s) { private void log(String s) { Rlog.d(LOG_TAG, "[ApnContext:" + mApnType + "] " + s); } Loading src/java/com/android/internal/telephony/dataconnection/DataConnection.java +32 −19 Original line number Diff line number Diff line Loading @@ -516,6 +516,7 @@ public final class DataConnection extends StateMachine { if (DBG) log("onConnect: carrier='" + mApnSetting.carrier + "' APN='" + mApnSetting.apn + "' proxy='" + mApnSetting.proxy + "' port='" + mApnSetting.port + "'"); if (cp.mApnContext != null) cp.mApnContext.requestLog("DataConnection.onConnect"); // Check if we should fake an error. if (mDcTesterFailBringUpAll.getDcFailBringUp().mCounter > 0) { Loading Loading @@ -583,9 +584,10 @@ public final class DataConnection extends StateMachine { */ private void tearDownData(Object o) { int discReason = RILConstants.DEACTIVATE_REASON_NONE; ApnContext apnContext = null; if ((o != null) && (o instanceof DisconnectParams)) { DisconnectParams dp = (DisconnectParams)o; apnContext = dp.mApnContext; if (TextUtils.equals(dp.mReason, Phone.REASON_RADIO_TURNED_OFF)) { discReason = RILConstants.DEACTIVATE_REASON_RADIO_OFF; } else if (TextUtils.equals(dp.mReason, Phone.REASON_PDP_RESET)) { Loading @@ -595,11 +597,15 @@ public final class DataConnection extends StateMachine { if (mPhone.mCi.getRadioState().isOn() || (mPhone.getServiceState().getRilDataRadioTechnology() == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN )) { if (DBG) log("tearDownData radio is on, call deactivateDataCall"); String str = "tearDownData radio is on, call deactivateDataCall"; if (DBG) log(str); if (apnContext != null) apnContext.requestLog(str); mPhone.mCi.deactivateDataCall(mCid, discReason, obtainMessage(EVENT_DEACTIVATE_DONE, mTag, 0, o)); } else { if (DBG) log("tearDownData radio is off sendMessage EVENT_DEACTIVATE_DONE immediately"); String str = "tearDownData radio is off sendMessage EVENT_DEACTIVATE_DONE immediately"; if (DBG) log(str); if (apnContext != null) apnContext.requestLog(str); AsyncResult ar = new AsyncResult(o, null, null); sendMessage(obtainMessage(EVENT_DEACTIVATE_DONE, mTag, 0, ar)); } Loading Loading @@ -1606,6 +1612,9 @@ public final class DataConnection extends StateMachine { log("DcActivatingState onSetupConnectionCompleted result=" + result + " dc=" + DataConnection.this); } if (cp.mApnContext != null) { cp.mApnContext.requestLog("onSetupConnectionCompleted result=" + result); } switch (result) { case SUCCESS: // All is well Loading @@ -1632,16 +1641,16 @@ public final class DataConnection extends StateMachine { case ERR_RilError: int delay = mDcRetryAlarmController.getSuggestedRetryTime( DataConnection.this, ar); if (DBG) { log("DcActivatingState: ERR_RilError " String str = "DcActivatingState: ERR_RilError " + " delay=" + delay + " isRetryNeeded=" + mRetryManager.isRetryNeeded() + " result=" + result + " result.isRestartRadioFail=" + result.mFailCause.isRestartRadioFail() + " result.isPermanentFail=" + mDct.isPermanentFail(result.mFailCause)); } mDct.isPermanentFail(result.mFailCause); if (DBG) log(str); if (cp.mApnContext != null) cp.mApnContext.requestLog(str); if (result.mFailCause.isRestartRadioFail()) { if (DBG) log("DcActivatingState: ERR_RilError restart radio"); mDct.sendRestartRadio(); Loading Loading @@ -1960,10 +1969,14 @@ public final class DataConnection extends StateMachine { break; case EVENT_DEACTIVATE_DONE: if (DBG) log("DcDisconnectingState msg.what=EVENT_DEACTIVATE_DONE RefCount=" + mApnContexts.size()); AsyncResult ar = (AsyncResult) msg.obj; DisconnectParams dp = (DisconnectParams) ar.userObj; String str = "DcDisconnectingState msg.what=EVENT_DEACTIVATE_DONE RefCount=" + mApnContexts.size(); if (DBG) log(str); if (dp.mApnContext != null) dp.mApnContext.requestLog(str); if (dp.mTag == mTag) { // Transition to inactive but send notifications after // we've entered the mInactive state. Loading Loading @@ -2002,10 +2015,10 @@ public final class DataConnection extends StateMachine { AsyncResult ar = (AsyncResult) msg.obj; ConnectionParams cp = (ConnectionParams) ar.userObj; if (cp.mTag == mTag) { if (DBG) { log("DcDisconnectionErrorCreatingConnection" + " msg.what=EVENT_DEACTIVATE_DONE"); } String str = "DcDisconnectionErrorCreatingConnection" + " msg.what=EVENT_DEACTIVATE_DONE"; if (DBG) log(str); if (cp.mApnContext != null) cp.mApnContext.requestLog(str); // Transition to inactive but send notifications after // we've entered the mInactive state. Loading src/java/com/android/internal/telephony/dataconnection/DcSwitchAsyncChannel.java +19 −7 Original line number Diff line number Diff line Loading @@ -16,13 +16,14 @@ package com.android.internal.telephony.dataconnection; import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; import com.android.internal.telephony.PhoneConstants; import android.net.NetworkRequest; import android.os.Message; import android.telephony.Rlog; import android.util.LocalLog; import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; import com.android.internal.telephony.PhoneConstants; public class DcSwitchAsyncChannel extends AsyncChannel { private static final boolean DBG = true; Loading Loading @@ -60,12 +61,23 @@ public class DcSwitchAsyncChannel extends AsyncChannel { public static class RequestInfo { boolean executed; NetworkRequest request; int priority; final NetworkRequest request; final int priority; private final LocalLog requestLog; public RequestInfo(NetworkRequest request, int priority) { public RequestInfo(NetworkRequest request, int priority, LocalLog l) { this.request = request; this.priority = priority; this.requestLog = l; this.executed = false; } public void log(String str) { requestLog.log(str); } public LocalLog getLog() { return requestLog; } @Override Loading src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java +4 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.IdleState: REQ_CONNECT"); if (DBG) log("IdleState: REQ_CONNECT, apnRequest=" + apnRequest); transitionTo(mAttachingState); retVal = HANDLED; Loading Loading @@ -160,6 +161,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.AttachingState: REQ_CONNECT"); if (DBG) log("AttachingState: REQ_CONNECT, apnRequest=" + apnRequest); // do nothing - wait til we attach and then we'll execute all requests Loading Loading @@ -245,6 +247,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.AttachedState: REQ_CONNECT"); if (DBG) log("AttachedState: REQ_CONNECT, apnRequest=" + apnRequest); DctController.getInstance().executeRequest(apnRequest); Loading Loading @@ -301,6 +304,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.DetachingState: REQ_CONNECT"); if (DBG) log("DetachingState: REQ_CONNECT, apnRequest=" + apnRequest); // can't process this now - wait until we return to idle Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +46 −28 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.telephony.cdma.CdmaCellLocation; import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; import android.util.EventLog; import android.util.LocalLog; import android.view.WindowManager; import android.telephony.Rlog; Loading Loading @@ -252,18 +253,20 @@ public final class DcTracker extends DcTrackerBase { } @Override public void incApnRefCount(String name) { public void incApnRefCount(String name, LocalLog log) { ApnContext apnContext = mApnContexts.get(name); log.log("DcTracker.incApnRefCount on " + name + " found " + apnContext); if (apnContext != null) { apnContext.incRefCount(); apnContext.incRefCount(log); } } @Override public void decApnRefCount(String name) { public void decApnRefCount(String name, LocalLog log) { ApnContext apnContext = mApnContexts.get(name); log.log("DcTracker.decApnRefCount on " + name + " found " + apnContext); if (apnContext != null) { apnContext.decRefCount(); apnContext.decRefCount(log); } } Loading Loading @@ -832,6 +835,7 @@ public final class DcTracker extends DcTrackerBase { " due to " + apnContext.getReason() + " apnContext=" + apnContext); log("trySetupData with mIsPsRestricted=" + mIsPsRestricted); } apnContext.requestLog("trySetupData due to " + apnContext.getReason()); if (mPhone.getSimulatedRadioControl() != null) { // Assume data is connected on the simulator Loading @@ -855,7 +859,9 @@ public final class DcTracker extends DcTrackerBase { (isDataAllowed(apnContext) && getAnyDataEnabled(checkUserDataEnabled) && !isEmergency()))) { if (apnContext.getState() == DctConstants.State.FAILED) { if (DBG) log("trySetupData: make a FAILED ApnContext IDLE so its reusable"); String str ="trySetupData: make a FAILED ApnContext IDLE so its reusable"; if (DBG) log(str); apnContext.requestLog(str); apnContext.setState(DctConstants.State.IDLE); } int radioTech = mPhone.getServiceState().getRilDataRadioTechnology(); Loading @@ -867,7 +873,9 @@ public final class DcTracker extends DcTrackerBase { if (waitingApns.isEmpty()) { notifyNoData(DcFailCause.MISSING_UNKNOWN_APN, apnContext); notifyOffApnsOfAvailability(apnContext.getReason()); if (DBG) log("trySetupData: X No APN found retValue=false"); String str = "trySetupData: X No APN found retValue=false"; if (DBG) log(str); apnContext.requestLog(str); return false; } else { apnContext.setWaitingApns(waitingApns); Loading @@ -893,7 +901,16 @@ public final class DcTracker extends DcTrackerBase { mPhone.notifyDataConnectionFailed(apnContext.getReason(), apnContext.getApnType()); } notifyOffApnsOfAvailability(apnContext.getReason()); if (DBG) log ("trySetupData: X apnContext not 'ready' retValue=false"); String str = "trySetupData: X apnContext not 'ready' retValue=false"; apnContext.requestLog(str); if (DBG) { log(str); if (!apnContext.isConnectable()) log("apnContext.isConnectable = false"); if (!isDataAllowed(apnContext)) log("isDataAllowed = false"); if (!getAnyDataEnabled(checkUserDataEnabled)) { log("getAnyDataEnabled(" + checkUserDataEnabled + ") = false"); } } return false; } } Loading Loading @@ -989,10 +1006,10 @@ public final class DcTracker extends DcTrackerBase { } DcAsyncChannel dcac = apnContext.getDcAc(); if (DBG) { log("cleanUpConnection: E tearDown=" + tearDown + " reason=" + apnContext.getReason() + " apnContext=" + apnContext); } String str = "cleanUpConnection: tearDown=" + tearDown + " reason=" + apnContext.getReason(); if (DBG) log(str + " apnContext=" + apnContext); apnContext.requestLog(str); if (tearDown) { if (apnContext.isDisconnected()) { // The request is tearDown and but ApnContext is not connected. Loading @@ -1000,10 +1017,9 @@ public final class DcTracker extends DcTrackerBase { apnContext.setState(DctConstants.State.IDLE); if (!apnContext.isReady()) { if (dcac != null) { if (DBG) { log("cleanUpConnection: teardown, disconnected, !ready apnContext=" + apnContext); } str = "cleanUpConnection: teardown, disconnectd, !ready"; if (DBG) log(str + " apnContext=" + apnContext); apnContext.requestLog(str); dcac.tearDown(apnContext, "", null); } apnContext.setDataConnectionAc(null); Loading @@ -1027,10 +1043,9 @@ public final class DcTracker extends DcTrackerBase { disconnectAll = true; } } if (DBG) { log("cleanUpConnection: tearing down" + (disconnectAll ? " all" :"") + "apnContext=" + apnContext); } str = "cleanUpConnection: tearing down" + (disconnectAll ? " all" : ""); if (DBG) log(str + "apnContext=" + apnContext); apnContext.requestLog(str); Message msg = obtainMessage(DctConstants.EVENT_DISCONNECT_DONE, apnContext); if (disconnectAll) { apnContext.getDcAc().tearDownAll(apnContext.getReason(), msg); Loading @@ -1045,6 +1060,7 @@ public final class DcTracker extends DcTrackerBase { // apn is connected but no reference to dcac. // Should not be happen, but reset the state in case. apnContext.setState(DctConstants.State.IDLE); apnContext.requestLog("cleanUpConnection: connected, bug no DCAC"); mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType()); } Loading @@ -1062,10 +1078,9 @@ public final class DcTracker extends DcTrackerBase { if (dcac != null) { cancelReconnectAlarm(apnContext); } if (DBG) { log("cleanUpConnection: X tearDown=" + tearDown + " reason=" + apnContext.getReason() + " apnContext=" + apnContext + " dcac=" + apnContext.getDcAc()); } str = "cleanUpConnection: X tearDown=" + tearDown + " reason=" + apnContext.getReason(); if (DBG) log(str + " apnContext=" + apnContext + " dcac=" + apnContext.getDcAc()); apnContext.requestLog(str); } /** Loading Loading @@ -1222,6 +1237,7 @@ public final class DcTracker extends DcTrackerBase { private boolean setupData(ApnContext apnContext, int radioTech) { if (DBG) log("setupData: apnContext=" + apnContext); apnContext.requestLog("setupData"); ApnSetting apnSetting; DcAsyncChannel dcac = null; Loading Loading @@ -1518,11 +1534,12 @@ public final class DcTracker extends DcTrackerBase { private void applyNewState(ApnContext apnContext, boolean enabled, boolean met) { boolean cleanup = false; boolean trySetup = false; if (DBG) { log("applyNewState(" + apnContext.getApnType() + ", " + enabled + String str ="applyNewState(" + apnContext.getApnType() + ", " + enabled + "(" + apnContext.isEnabled() + "), " + met + "(" + apnContext.getDependencyMet() +"))"); } apnContext.getDependencyMet() +"))"; if (DBG) log(str); apnContext.requestLog(str); if (apnContext.isReady()) { cleanup = true; if (enabled && met) { Loading @@ -1534,6 +1551,7 @@ public final class DcTracker extends DcTrackerBase { case DISCONNECTING: // We're "READY" and active so just return if (DBG) log("applyNewState: 'ready' so return"); apnContext.requestLog("applyNewState state=" + state + ", so return"); return; case IDLE: // fall through: this is unexpected but if it happens cleanup and try setup Loading Loading
src/java/com/android/internal/telephony/dataconnection/ApnContext.java +41 −7 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.net.NetworkConfig; import android.telephony.Rlog; import android.text.TextUtils; import android.util.LocalLog; import com.android.internal.R; import com.android.internal.telephony.DctConstants; Loading Loading @@ -271,16 +272,48 @@ public class ApnContext { } } public void incRefCount() { private final ArrayList<LocalLog> mLocalLogs = new ArrayList<LocalLog>(); public void requestLog(String str) { synchronized (mRefCountLock) { for (LocalLog l : mLocalLogs) { l.log(str); } } } public void incRefCount(LocalLog log) { synchronized (mRefCountLock) { if (mRefCount == 0) { // we wanted to leave the last in so it could actually capture the tear down // of the network requestLog("clearing log with size=" + mLocalLogs.size()); mLocalLogs.clear(); } if (mLocalLogs.contains(log)) { log.log("ApnContext.incRefCount has duplicate add - " + mRefCount); } else { mLocalLogs.add(log); log.log("ApnContext.incRefCount - " + mRefCount); } if (mRefCount++ == 0) { mDcTracker.setEnabled(mDcTracker.apnTypeToId(mApnType), true); } } } public void decRefCount() { public void decRefCount(LocalLog log) { synchronized (mRefCountLock) { // leave the last log alive to capture the actual tear down if (mRefCount != 1) { if (mLocalLogs.remove(log)) { log.log("ApnContext.decRefCount - " + mRefCount); } else { log.log("ApnContext.decRefCount didn't find log - " + mRefCount); } } else { log.log("ApnContext.decRefCount - 1"); } if (mRefCount-- == 1) { mDcTracker.setEnabled(mDcTracker.apnTypeToId(mApnType), false); } Loading @@ -290,13 +323,14 @@ public class ApnContext { @Override public synchronized String toString() { // We don't print mDataConnection because its recursive. return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns={" + mWaitingApns + "} mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown + " mApnSetting={" + mApnSetting + "} mReason=" + mReason + " mDataEnabled=" + mDataEnabled + " mDependencyMet=" + mDependencyMet + "}"; return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns={" + mWaitingApns + "} mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown + " mApnSetting={" + mApnSetting + "} mReason=" + mReason + " mDataEnabled=" + mDataEnabled + " mDependencyMet=" + mDependencyMet + "}"; } protected void log(String s) { private void log(String s) { Rlog.d(LOG_TAG, "[ApnContext:" + mApnType + "] " + s); } Loading
src/java/com/android/internal/telephony/dataconnection/DataConnection.java +32 −19 Original line number Diff line number Diff line Loading @@ -516,6 +516,7 @@ public final class DataConnection extends StateMachine { if (DBG) log("onConnect: carrier='" + mApnSetting.carrier + "' APN='" + mApnSetting.apn + "' proxy='" + mApnSetting.proxy + "' port='" + mApnSetting.port + "'"); if (cp.mApnContext != null) cp.mApnContext.requestLog("DataConnection.onConnect"); // Check if we should fake an error. if (mDcTesterFailBringUpAll.getDcFailBringUp().mCounter > 0) { Loading Loading @@ -583,9 +584,10 @@ public final class DataConnection extends StateMachine { */ private void tearDownData(Object o) { int discReason = RILConstants.DEACTIVATE_REASON_NONE; ApnContext apnContext = null; if ((o != null) && (o instanceof DisconnectParams)) { DisconnectParams dp = (DisconnectParams)o; apnContext = dp.mApnContext; if (TextUtils.equals(dp.mReason, Phone.REASON_RADIO_TURNED_OFF)) { discReason = RILConstants.DEACTIVATE_REASON_RADIO_OFF; } else if (TextUtils.equals(dp.mReason, Phone.REASON_PDP_RESET)) { Loading @@ -595,11 +597,15 @@ public final class DataConnection extends StateMachine { if (mPhone.mCi.getRadioState().isOn() || (mPhone.getServiceState().getRilDataRadioTechnology() == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN )) { if (DBG) log("tearDownData radio is on, call deactivateDataCall"); String str = "tearDownData radio is on, call deactivateDataCall"; if (DBG) log(str); if (apnContext != null) apnContext.requestLog(str); mPhone.mCi.deactivateDataCall(mCid, discReason, obtainMessage(EVENT_DEACTIVATE_DONE, mTag, 0, o)); } else { if (DBG) log("tearDownData radio is off sendMessage EVENT_DEACTIVATE_DONE immediately"); String str = "tearDownData radio is off sendMessage EVENT_DEACTIVATE_DONE immediately"; if (DBG) log(str); if (apnContext != null) apnContext.requestLog(str); AsyncResult ar = new AsyncResult(o, null, null); sendMessage(obtainMessage(EVENT_DEACTIVATE_DONE, mTag, 0, ar)); } Loading Loading @@ -1606,6 +1612,9 @@ public final class DataConnection extends StateMachine { log("DcActivatingState onSetupConnectionCompleted result=" + result + " dc=" + DataConnection.this); } if (cp.mApnContext != null) { cp.mApnContext.requestLog("onSetupConnectionCompleted result=" + result); } switch (result) { case SUCCESS: // All is well Loading @@ -1632,16 +1641,16 @@ public final class DataConnection extends StateMachine { case ERR_RilError: int delay = mDcRetryAlarmController.getSuggestedRetryTime( DataConnection.this, ar); if (DBG) { log("DcActivatingState: ERR_RilError " String str = "DcActivatingState: ERR_RilError " + " delay=" + delay + " isRetryNeeded=" + mRetryManager.isRetryNeeded() + " result=" + result + " result.isRestartRadioFail=" + result.mFailCause.isRestartRadioFail() + " result.isPermanentFail=" + mDct.isPermanentFail(result.mFailCause)); } mDct.isPermanentFail(result.mFailCause); if (DBG) log(str); if (cp.mApnContext != null) cp.mApnContext.requestLog(str); if (result.mFailCause.isRestartRadioFail()) { if (DBG) log("DcActivatingState: ERR_RilError restart radio"); mDct.sendRestartRadio(); Loading Loading @@ -1960,10 +1969,14 @@ public final class DataConnection extends StateMachine { break; case EVENT_DEACTIVATE_DONE: if (DBG) log("DcDisconnectingState msg.what=EVENT_DEACTIVATE_DONE RefCount=" + mApnContexts.size()); AsyncResult ar = (AsyncResult) msg.obj; DisconnectParams dp = (DisconnectParams) ar.userObj; String str = "DcDisconnectingState msg.what=EVENT_DEACTIVATE_DONE RefCount=" + mApnContexts.size(); if (DBG) log(str); if (dp.mApnContext != null) dp.mApnContext.requestLog(str); if (dp.mTag == mTag) { // Transition to inactive but send notifications after // we've entered the mInactive state. Loading Loading @@ -2002,10 +2015,10 @@ public final class DataConnection extends StateMachine { AsyncResult ar = (AsyncResult) msg.obj; ConnectionParams cp = (ConnectionParams) ar.userObj; if (cp.mTag == mTag) { if (DBG) { log("DcDisconnectionErrorCreatingConnection" + " msg.what=EVENT_DEACTIVATE_DONE"); } String str = "DcDisconnectionErrorCreatingConnection" + " msg.what=EVENT_DEACTIVATE_DONE"; if (DBG) log(str); if (cp.mApnContext != null) cp.mApnContext.requestLog(str); // Transition to inactive but send notifications after // we've entered the mInactive state. Loading
src/java/com/android/internal/telephony/dataconnection/DcSwitchAsyncChannel.java +19 −7 Original line number Diff line number Diff line Loading @@ -16,13 +16,14 @@ package com.android.internal.telephony.dataconnection; import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; import com.android.internal.telephony.PhoneConstants; import android.net.NetworkRequest; import android.os.Message; import android.telephony.Rlog; import android.util.LocalLog; import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; import com.android.internal.telephony.PhoneConstants; public class DcSwitchAsyncChannel extends AsyncChannel { private static final boolean DBG = true; Loading Loading @@ -60,12 +61,23 @@ public class DcSwitchAsyncChannel extends AsyncChannel { public static class RequestInfo { boolean executed; NetworkRequest request; int priority; final NetworkRequest request; final int priority; private final LocalLog requestLog; public RequestInfo(NetworkRequest request, int priority) { public RequestInfo(NetworkRequest request, int priority, LocalLog l) { this.request = request; this.priority = priority; this.requestLog = l; this.executed = false; } public void log(String str) { requestLog.log(str); } public LocalLog getLog() { return requestLog; } @Override Loading
src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java +4 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.IdleState: REQ_CONNECT"); if (DBG) log("IdleState: REQ_CONNECT, apnRequest=" + apnRequest); transitionTo(mAttachingState); retVal = HANDLED; Loading Loading @@ -160,6 +161,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.AttachingState: REQ_CONNECT"); if (DBG) log("AttachingState: REQ_CONNECT, apnRequest=" + apnRequest); // do nothing - wait til we attach and then we'll execute all requests Loading Loading @@ -245,6 +247,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.AttachedState: REQ_CONNECT"); if (DBG) log("AttachedState: REQ_CONNECT, apnRequest=" + apnRequest); DctController.getInstance().executeRequest(apnRequest); Loading Loading @@ -301,6 +304,7 @@ public class DcSwitchStateMachine extends StateMachine { switch (msg.what) { case DcSwitchAsyncChannel.REQ_CONNECT: { RequestInfo apnRequest = (RequestInfo)msg.obj; apnRequest.log("DcSwitchStateMachine.DetachingState: REQ_CONNECT"); if (DBG) log("DetachingState: REQ_CONNECT, apnRequest=" + apnRequest); // can't process this now - wait until we return to idle Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +46 −28 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.telephony.cdma.CdmaCellLocation; import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; import android.util.EventLog; import android.util.LocalLog; import android.view.WindowManager; import android.telephony.Rlog; Loading Loading @@ -252,18 +253,20 @@ public final class DcTracker extends DcTrackerBase { } @Override public void incApnRefCount(String name) { public void incApnRefCount(String name, LocalLog log) { ApnContext apnContext = mApnContexts.get(name); log.log("DcTracker.incApnRefCount on " + name + " found " + apnContext); if (apnContext != null) { apnContext.incRefCount(); apnContext.incRefCount(log); } } @Override public void decApnRefCount(String name) { public void decApnRefCount(String name, LocalLog log) { ApnContext apnContext = mApnContexts.get(name); log.log("DcTracker.decApnRefCount on " + name + " found " + apnContext); if (apnContext != null) { apnContext.decRefCount(); apnContext.decRefCount(log); } } Loading Loading @@ -832,6 +835,7 @@ public final class DcTracker extends DcTrackerBase { " due to " + apnContext.getReason() + " apnContext=" + apnContext); log("trySetupData with mIsPsRestricted=" + mIsPsRestricted); } apnContext.requestLog("trySetupData due to " + apnContext.getReason()); if (mPhone.getSimulatedRadioControl() != null) { // Assume data is connected on the simulator Loading @@ -855,7 +859,9 @@ public final class DcTracker extends DcTrackerBase { (isDataAllowed(apnContext) && getAnyDataEnabled(checkUserDataEnabled) && !isEmergency()))) { if (apnContext.getState() == DctConstants.State.FAILED) { if (DBG) log("trySetupData: make a FAILED ApnContext IDLE so its reusable"); String str ="trySetupData: make a FAILED ApnContext IDLE so its reusable"; if (DBG) log(str); apnContext.requestLog(str); apnContext.setState(DctConstants.State.IDLE); } int radioTech = mPhone.getServiceState().getRilDataRadioTechnology(); Loading @@ -867,7 +873,9 @@ public final class DcTracker extends DcTrackerBase { if (waitingApns.isEmpty()) { notifyNoData(DcFailCause.MISSING_UNKNOWN_APN, apnContext); notifyOffApnsOfAvailability(apnContext.getReason()); if (DBG) log("trySetupData: X No APN found retValue=false"); String str = "trySetupData: X No APN found retValue=false"; if (DBG) log(str); apnContext.requestLog(str); return false; } else { apnContext.setWaitingApns(waitingApns); Loading @@ -893,7 +901,16 @@ public final class DcTracker extends DcTrackerBase { mPhone.notifyDataConnectionFailed(apnContext.getReason(), apnContext.getApnType()); } notifyOffApnsOfAvailability(apnContext.getReason()); if (DBG) log ("trySetupData: X apnContext not 'ready' retValue=false"); String str = "trySetupData: X apnContext not 'ready' retValue=false"; apnContext.requestLog(str); if (DBG) { log(str); if (!apnContext.isConnectable()) log("apnContext.isConnectable = false"); if (!isDataAllowed(apnContext)) log("isDataAllowed = false"); if (!getAnyDataEnabled(checkUserDataEnabled)) { log("getAnyDataEnabled(" + checkUserDataEnabled + ") = false"); } } return false; } } Loading Loading @@ -989,10 +1006,10 @@ public final class DcTracker extends DcTrackerBase { } DcAsyncChannel dcac = apnContext.getDcAc(); if (DBG) { log("cleanUpConnection: E tearDown=" + tearDown + " reason=" + apnContext.getReason() + " apnContext=" + apnContext); } String str = "cleanUpConnection: tearDown=" + tearDown + " reason=" + apnContext.getReason(); if (DBG) log(str + " apnContext=" + apnContext); apnContext.requestLog(str); if (tearDown) { if (apnContext.isDisconnected()) { // The request is tearDown and but ApnContext is not connected. Loading @@ -1000,10 +1017,9 @@ public final class DcTracker extends DcTrackerBase { apnContext.setState(DctConstants.State.IDLE); if (!apnContext.isReady()) { if (dcac != null) { if (DBG) { log("cleanUpConnection: teardown, disconnected, !ready apnContext=" + apnContext); } str = "cleanUpConnection: teardown, disconnectd, !ready"; if (DBG) log(str + " apnContext=" + apnContext); apnContext.requestLog(str); dcac.tearDown(apnContext, "", null); } apnContext.setDataConnectionAc(null); Loading @@ -1027,10 +1043,9 @@ public final class DcTracker extends DcTrackerBase { disconnectAll = true; } } if (DBG) { log("cleanUpConnection: tearing down" + (disconnectAll ? " all" :"") + "apnContext=" + apnContext); } str = "cleanUpConnection: tearing down" + (disconnectAll ? " all" : ""); if (DBG) log(str + "apnContext=" + apnContext); apnContext.requestLog(str); Message msg = obtainMessage(DctConstants.EVENT_DISCONNECT_DONE, apnContext); if (disconnectAll) { apnContext.getDcAc().tearDownAll(apnContext.getReason(), msg); Loading @@ -1045,6 +1060,7 @@ public final class DcTracker extends DcTrackerBase { // apn is connected but no reference to dcac. // Should not be happen, but reset the state in case. apnContext.setState(DctConstants.State.IDLE); apnContext.requestLog("cleanUpConnection: connected, bug no DCAC"); mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType()); } Loading @@ -1062,10 +1078,9 @@ public final class DcTracker extends DcTrackerBase { if (dcac != null) { cancelReconnectAlarm(apnContext); } if (DBG) { log("cleanUpConnection: X tearDown=" + tearDown + " reason=" + apnContext.getReason() + " apnContext=" + apnContext + " dcac=" + apnContext.getDcAc()); } str = "cleanUpConnection: X tearDown=" + tearDown + " reason=" + apnContext.getReason(); if (DBG) log(str + " apnContext=" + apnContext + " dcac=" + apnContext.getDcAc()); apnContext.requestLog(str); } /** Loading Loading @@ -1222,6 +1237,7 @@ public final class DcTracker extends DcTrackerBase { private boolean setupData(ApnContext apnContext, int radioTech) { if (DBG) log("setupData: apnContext=" + apnContext); apnContext.requestLog("setupData"); ApnSetting apnSetting; DcAsyncChannel dcac = null; Loading Loading @@ -1518,11 +1534,12 @@ public final class DcTracker extends DcTrackerBase { private void applyNewState(ApnContext apnContext, boolean enabled, boolean met) { boolean cleanup = false; boolean trySetup = false; if (DBG) { log("applyNewState(" + apnContext.getApnType() + ", " + enabled + String str ="applyNewState(" + apnContext.getApnType() + ", " + enabled + "(" + apnContext.isEnabled() + "), " + met + "(" + apnContext.getDependencyMet() +"))"); } apnContext.getDependencyMet() +"))"; if (DBG) log(str); apnContext.requestLog(str); if (apnContext.isReady()) { cleanup = true; if (enabled && met) { Loading @@ -1534,6 +1551,7 @@ public final class DcTracker extends DcTrackerBase { case DISCONNECTING: // We're "READY" and active so just return if (DBG) log("applyNewState: 'ready' so return"); apnContext.requestLog("applyNewState state=" + state + ", so return"); return; case IDLE: // fall through: this is unexpected but if it happens cleanup and try setup Loading