Loading services/java/com/android/server/ConnectivityService.java +25 −11 Original line number Diff line number Diff line Loading @@ -1031,9 +1031,14 @@ private NetworkStateTracker makeWimaxStateTracker() { if ((ni.isConnectedOrConnecting() == true) && !network.isTeardownRequested()) { if (ni.isConnected() == true) { final long token = Binder.clearCallingIdentity(); try { // add the pid-specific dns handleDnsConfigurationChange(usedNetworkType); if (VDBG) log("special network already active"); } finally { Binder.restoreCallingIdentity(token); } return Phone.APN_ALREADY_ACTIVE; } if (VDBG) log("special network already connecting"); Loading Loading @@ -1221,6 +1226,7 @@ private NetworkStateTracker makeWimaxStateTracker() { } if (!ConnectivityManager.isNetworkTypeValid(networkType)) { if (DBG) log("requestRouteToHostAddress on invalid network: " + networkType); return false; } NetworkStateTracker tracker = mNetTrackers[networkType]; Loading @@ -1233,11 +1239,16 @@ private NetworkStateTracker makeWimaxStateTracker() { } return false; } final long token = Binder.clearCallingIdentity(); try { InetAddress addr = InetAddress.getByAddress(hostAddress); LinkProperties lp = tracker.getLinkProperties(); return addRouteToAddress(lp, addr); } catch (UnknownHostException e) {} } catch (UnknownHostException e) { if (DBG) log("requestRouteToHostAddress got " + e.toString()); } finally { Binder.restoreCallingIdentity(token); } return false; } Loading Loading @@ -1277,7 +1288,10 @@ private NetworkStateTracker makeWimaxStateTracker() { private boolean modifyRoute(String ifaceName, LinkProperties lp, RouteInfo r, int cycleCount, boolean doAdd, boolean toDefaultTable) { if ((ifaceName == null) || (lp == null) || (r == null)) return false; if ((ifaceName == null) || (lp == null) || (r == null)) { if (DBG) log("modifyRoute got unexpected null: " + ifaceName + ", " + lp + ", " + r); return false; } if (cycleCount > MAX_HOSTROUTE_CYCLE_COUNT) { loge("Error modifying route - too much recursion"); Loading Loading @@ -1309,7 +1323,7 @@ private NetworkStateTracker makeWimaxStateTracker() { } } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to add a route: " + e); if (DBG) loge("Exception trying to add a route: " + e); return false; } } else { Loading @@ -1323,7 +1337,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to remove a route: " + e); if (DBG) loge("Exception trying to remove a route: " + e); return false; } } else { Loading @@ -1335,7 +1349,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeSecondaryRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to remove a route: " + e); if (DBG) loge("Exception trying to remove a route: " + e); return false; } } Loading Loading @@ -2004,7 +2018,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to remove a route: " + e); if (DBG) loge("Exception trying to remove a route: " + e); } } } Loading Loading @@ -2218,7 +2232,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses)); mNetd.setDefaultInterfaceForDns(iface); } catch (Exception e) { if (VDBG) loge("exception setting default dns interface: " + e); if (DBG) loge("exception setting default dns interface: " + e); } } if (!domains.equals(SystemProperties.get("net.dns.search"))) { Loading Loading @@ -2248,7 +2262,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.setDnsServersForInterface(p.getInterfaceName(), NetworkUtils.makeStrings(dnses)); } catch (Exception e) { if (VDBG) loge("exception setting dns servers: " + e); if (DBG) loge("exception setting dns servers: " + e); } // set per-pid dns for attached secondary nets List pids = mNetRequestersPids[netType]; Loading telephony/java/com/android/internal/telephony/DataConnection.java +66 −5 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ public abstract class DataConnection extends StateMachine { private List<ApnContext> mApnList = null; PendingIntent mReconnectIntent = null; private DataConnectionTracker mDataConnectionTracker = null; /** * Used internally for saving connecting parameters. */ Loading Loading @@ -202,6 +204,7 @@ public abstract class DataConnection extends StateMachine { protected static final int EVENT_DEACTIVATE_DONE = BASE + 3; protected static final int EVENT_DISCONNECT = BASE + 4; protected static final int EVENT_RIL_CONNECTED = BASE + 5; protected static final int EVENT_DISCONNECT_ALL = BASE + 6; //***** Tag IDs for EventLog protected static final int EVENT_LOG_BAD_DNS_ADDRESS = 50100; Loading Loading @@ -234,10 +237,12 @@ public abstract class DataConnection extends StateMachine { //***** Constructor protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm) { protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm, DataConnectionTracker dct) { super(name); if (DBG) log("DataConnection constructor E"); this.phone = phone; this.mDataConnectionTracker = dct; mId = id; mRetryMgr = rm; this.cid = -1; Loading Loading @@ -316,11 +321,19 @@ public abstract class DataConnection extends StateMachine { * * @param dp is the DisconnectParams. */ private void notifyDisconnectCompleted(DisconnectParams dp) { private void notifyDisconnectCompleted(DisconnectParams dp, boolean sendAll) { if (VDBG) log("NotifyDisconnectCompleted"); ApnContext alreadySent = null; String reason = null; if (dp.onCompletedMsg != null) { // Get ApnContext, but only valid on GSM devices this is a string on CDMA devices. Message msg = dp.onCompletedMsg; if (msg.obj instanceof ApnContext) { alreadySent = (ApnContext)msg.obj; } reason = dp.reason; if (VDBG) { log(String.format("msg=%s msg.obj=%s", msg.toString(), ((msg.obj instanceof String) ? (String) msg.obj : "<no-reason>"))); Loading @@ -328,6 +341,17 @@ public abstract class DataConnection extends StateMachine { AsyncResult.forMessage(msg); msg.sendToTarget(); } if (sendAll) { for (ApnContext a : mApnList) { if (a == alreadySent) continue; if (reason != null) a.setReason(reason); Message msg = mDataConnectionTracker.obtainMessage( DataConnectionTracker.EVENT_DISCONNECT_DONE, a); AsyncResult.forMessage(msg); msg.sendToTarget(); } } if (DBG) log("NotifyDisconnectCompleted DisconnectParams=" + dp); } Loading Loading @@ -706,6 +730,13 @@ public abstract class DataConnection extends StateMachine { deferMessage(msg); break; case EVENT_DISCONNECT_ALL: if (DBG) { log("DcDefaultState deferring msg.what=EVENT_DISCONNECT_ALL" + mRefCount); } deferMessage(msg); break; case EVENT_RIL_CONNECTED: ar = (AsyncResult)msg.obj; if (ar.exception == null) { Loading Loading @@ -771,7 +802,7 @@ public abstract class DataConnection extends StateMachine { } if (mDisconnectParams != null) { if (VDBG) log("DcInactiveState: enter notifyDisconnectCompleted"); notifyDisconnectCompleted(mDisconnectParams); notifyDisconnectCompleted(mDisconnectParams, true); } clearSettings(); } Loading Loading @@ -812,7 +843,13 @@ public abstract class DataConnection extends StateMachine { case EVENT_DISCONNECT: if (DBG) log("DcInactiveState: msg.what=EVENT_DISCONNECT"); notifyDisconnectCompleted((DisconnectParams)msg.obj); notifyDisconnectCompleted((DisconnectParams)msg.obj, false); retVal = HANDLED; break; case EVENT_DISCONNECT_ALL: if (DBG) log("DcInactiveState: msg.what=EVENT_DISCONNECT_ALL"); notifyDisconnectCompleted((DisconnectParams)msg.obj, false); retVal = HANDLED; break; Loading Loading @@ -989,12 +1026,24 @@ public abstract class DataConnection extends StateMachine { transitionTo(mDisconnectingState); } else { if (msg.obj != null) { notifyDisconnectCompleted((DisconnectParams) msg.obj); notifyDisconnectCompleted((DisconnectParams) msg.obj, false); } } retVal = HANDLED; break; case EVENT_DISCONNECT_ALL: if (DBG) { log("DcActiveState msg.what=EVENT_DISCONNECT_ALL RefCount=" + mRefCount); } mRefCount = 0; DisconnectParams dp = (DisconnectParams) msg.obj; dp.tag = mTag; tearDownData(dp); transitionTo(mDisconnectingState); retVal = HANDLED; break; default: if (VDBG) { log("DcActiveState not handled msg.what=0x" + Loading Loading @@ -1124,4 +1173,16 @@ public abstract class DataConnection extends StateMachine { public void tearDown(String reason, Message onCompletedMsg) { sendMessage(obtainMessage(EVENT_DISCONNECT, new DisconnectParams(reason, onCompletedMsg))); } /** * Tear down the connection through the apn on the network. Ignores refcount and * and always tears down. * * @param onCompletedMsg is sent with its msg.obj as an AsyncResult object. * With AsyncResult.userObj set to the original msg.obj. */ public void tearDownAll(String reason, Message onCompletedMsg) { sendMessage(obtainMessage(EVENT_DISCONNECT_ALL, new DisconnectParams(reason, onCompletedMsg))); } } telephony/java/com/android/internal/telephony/DataConnectionTracker.java +2 −1 Original line number Diff line number Diff line Loading @@ -1030,7 +1030,8 @@ public abstract class DataConnectionTracker extends Handler { } } if (didDisable) { if (enabledCount == 0) { if ((enabledCount == 0) || (apnId == APN_DUN_ID)) { mRequestedApnType = Phone.APN_TYPE_DEFAULT; onCleanUpConnection(true, apnId, Phone.REASON_DATA_DISABLED); } Loading telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java +7 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.os.Message; import android.util.Log; import com.android.internal.telephony.DataConnection; import com.android.internal.telephony.DataConnectionTracker; import com.android.internal.telephony.Phone; import com.android.internal.telephony.RILConstants; import com.android.internal.telephony.RetryManager; Loading @@ -32,8 +33,9 @@ public class CdmaDataConnection extends DataConnection { private static final String LOG_TAG = "CDMA"; // ***** Constructor private CdmaDataConnection(CDMAPhone phone, String name, int id, RetryManager rm) { super(phone, name, id, rm); private CdmaDataConnection(CDMAPhone phone, String name, int id, RetryManager rm, DataConnectionTracker dct) { super(phone, name, id, rm, dct); } /** Loading @@ -44,12 +46,13 @@ public class CdmaDataConnection extends DataConnection { * @param rm the RetryManager * @return CdmaDataConnection that was created. */ static CdmaDataConnection makeDataConnection(CDMAPhone phone, int id, RetryManager rm) { static CdmaDataConnection makeDataConnection(CDMAPhone phone, int id, RetryManager rm, DataConnectionTracker dct) { synchronized (mCountLock) { mCount += 1; } CdmaDataConnection cdmaDc = new CdmaDataConnection(phone, "CdmaDC-" + mCount, id, rm); id, rm, dct); cdmaDc.start(); if (DBG) cdmaDc.log("Made " + cdmaDc.getName()); return cdmaDc; Loading telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java +17 −11 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override public void dispose() { cleanUpConnection(false, null); cleanUpConnection(false, null, false); super.dispose(); Loading Loading @@ -295,7 +295,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { * @param tearDown true if the underlying DataConnection should be disconnected. * @param reason for the clean up. */ private void cleanUpConnection(boolean tearDown, String reason) { private void cleanUpConnection(boolean tearDown, String reason, boolean doAll) { if (DBG) log("cleanUpConnection: reason: " + reason); // Clear the reconnect alarm, if set. Loading @@ -315,9 +315,15 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { DataConnectionAc dcac = mDataConnectionAsyncChannels.get(conn.getDataConnectionId()); if (tearDown) { if (DBG) log("cleanUpConnection: teardown, call conn.disconnect"); if (doAll) { if (DBG) log("cleanUpConnection: teardown, conn.tearDownAll"); conn.tearDownAll(reason, obtainMessage(EVENT_DISCONNECT_DONE, conn.getDataConnectionId(), 0, reason)); } else { if (DBG) log("cleanUpConnection: teardown, conn.tearDown"); conn.tearDown(reason, obtainMessage(EVENT_DISCONNECT_DONE, conn.getDataConnectionId(), 0, reason)); } notificationDeferred = true; } else { if (DBG) log("cleanUpConnection: !tearDown, call conn.resetSynchronously"); Loading Loading @@ -599,7 +605,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override protected void onEnableNewApn() { // No mRequestedApnType check; only one connection is supported cleanUpConnection(true, Phone.REASON_APN_SWITCHED); cleanUpConnection(true, Phone.REASON_APN_SWITCHED, false); } /** Loading Loading @@ -781,13 +787,13 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override protected void onCleanUpConnection(boolean tearDown, int apnId, String reason) { // No apnId check; only one connection is supported cleanUpConnection(tearDown, reason); cleanUpConnection(tearDown, reason, (apnId == APN_DUN_ID)); } @Override protected void onCleanUpAllConnections(String cause) { // Only one CDMA connection is supported cleanUpConnection(true, cause); cleanUpConnection(true, cause, false); } private void createAllDataConnectionList() { Loading @@ -806,7 +812,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { } int id = mUniqueIdGenerator.getAndIncrement(); dataConn = CdmaDataConnection.makeDataConnection(mCdmaPhone, id, rm); dataConn = CdmaDataConnection.makeDataConnection(mCdmaPhone, id, rm, this); mDataConnections.put(id, dataConn); DataConnectionAc dcac = new DataConnectionAc(dataConn, LOG_TAG); int status = dcac.fullyConnectSync(mPhone.getContext(), this, dataConn.getHandler()); Loading @@ -833,7 +839,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { notifyDataConnection(Phone.REASON_CDMA_DATA_DETACHED); } else { if (mState == State.FAILED) { cleanUpConnection(false, Phone.REASON_CDMA_DATA_DETACHED); cleanUpConnection(false, Phone.REASON_CDMA_DATA_DETACHED, false); mDataConnections.get(0).resetRetryCount(); CdmaCellLocation loc = (CdmaCellLocation)(mPhone.getCellLocation()); Loading Loading @@ -912,7 +918,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { log("onDataStateChanged: No active connection" + "state is CONNECTED, disconnecting/cleanup"); writeEventLogCdmaDataDrop(); cleanUpConnection(true, null); cleanUpConnection(true, null, false); return; } Loading Loading
services/java/com/android/server/ConnectivityService.java +25 −11 Original line number Diff line number Diff line Loading @@ -1031,9 +1031,14 @@ private NetworkStateTracker makeWimaxStateTracker() { if ((ni.isConnectedOrConnecting() == true) && !network.isTeardownRequested()) { if (ni.isConnected() == true) { final long token = Binder.clearCallingIdentity(); try { // add the pid-specific dns handleDnsConfigurationChange(usedNetworkType); if (VDBG) log("special network already active"); } finally { Binder.restoreCallingIdentity(token); } return Phone.APN_ALREADY_ACTIVE; } if (VDBG) log("special network already connecting"); Loading Loading @@ -1221,6 +1226,7 @@ private NetworkStateTracker makeWimaxStateTracker() { } if (!ConnectivityManager.isNetworkTypeValid(networkType)) { if (DBG) log("requestRouteToHostAddress on invalid network: " + networkType); return false; } NetworkStateTracker tracker = mNetTrackers[networkType]; Loading @@ -1233,11 +1239,16 @@ private NetworkStateTracker makeWimaxStateTracker() { } return false; } final long token = Binder.clearCallingIdentity(); try { InetAddress addr = InetAddress.getByAddress(hostAddress); LinkProperties lp = tracker.getLinkProperties(); return addRouteToAddress(lp, addr); } catch (UnknownHostException e) {} } catch (UnknownHostException e) { if (DBG) log("requestRouteToHostAddress got " + e.toString()); } finally { Binder.restoreCallingIdentity(token); } return false; } Loading Loading @@ -1277,7 +1288,10 @@ private NetworkStateTracker makeWimaxStateTracker() { private boolean modifyRoute(String ifaceName, LinkProperties lp, RouteInfo r, int cycleCount, boolean doAdd, boolean toDefaultTable) { if ((ifaceName == null) || (lp == null) || (r == null)) return false; if ((ifaceName == null) || (lp == null) || (r == null)) { if (DBG) log("modifyRoute got unexpected null: " + ifaceName + ", " + lp + ", " + r); return false; } if (cycleCount > MAX_HOSTROUTE_CYCLE_COUNT) { loge("Error modifying route - too much recursion"); Loading Loading @@ -1309,7 +1323,7 @@ private NetworkStateTracker makeWimaxStateTracker() { } } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to add a route: " + e); if (DBG) loge("Exception trying to add a route: " + e); return false; } } else { Loading @@ -1323,7 +1337,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to remove a route: " + e); if (DBG) loge("Exception trying to remove a route: " + e); return false; } } else { Loading @@ -1335,7 +1349,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeSecondaryRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to remove a route: " + e); if (DBG) loge("Exception trying to remove a route: " + e); return false; } } Loading Loading @@ -2004,7 +2018,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all if (VDBG) loge("Exception trying to remove a route: " + e); if (DBG) loge("Exception trying to remove a route: " + e); } } } Loading Loading @@ -2218,7 +2232,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses)); mNetd.setDefaultInterfaceForDns(iface); } catch (Exception e) { if (VDBG) loge("exception setting default dns interface: " + e); if (DBG) loge("exception setting default dns interface: " + e); } } if (!domains.equals(SystemProperties.get("net.dns.search"))) { Loading Loading @@ -2248,7 +2262,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.setDnsServersForInterface(p.getInterfaceName(), NetworkUtils.makeStrings(dnses)); } catch (Exception e) { if (VDBG) loge("exception setting dns servers: " + e); if (DBG) loge("exception setting dns servers: " + e); } // set per-pid dns for attached secondary nets List pids = mNetRequestersPids[netType]; Loading
telephony/java/com/android/internal/telephony/DataConnection.java +66 −5 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ public abstract class DataConnection extends StateMachine { private List<ApnContext> mApnList = null; PendingIntent mReconnectIntent = null; private DataConnectionTracker mDataConnectionTracker = null; /** * Used internally for saving connecting parameters. */ Loading Loading @@ -202,6 +204,7 @@ public abstract class DataConnection extends StateMachine { protected static final int EVENT_DEACTIVATE_DONE = BASE + 3; protected static final int EVENT_DISCONNECT = BASE + 4; protected static final int EVENT_RIL_CONNECTED = BASE + 5; protected static final int EVENT_DISCONNECT_ALL = BASE + 6; //***** Tag IDs for EventLog protected static final int EVENT_LOG_BAD_DNS_ADDRESS = 50100; Loading Loading @@ -234,10 +237,12 @@ public abstract class DataConnection extends StateMachine { //***** Constructor protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm) { protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm, DataConnectionTracker dct) { super(name); if (DBG) log("DataConnection constructor E"); this.phone = phone; this.mDataConnectionTracker = dct; mId = id; mRetryMgr = rm; this.cid = -1; Loading Loading @@ -316,11 +321,19 @@ public abstract class DataConnection extends StateMachine { * * @param dp is the DisconnectParams. */ private void notifyDisconnectCompleted(DisconnectParams dp) { private void notifyDisconnectCompleted(DisconnectParams dp, boolean sendAll) { if (VDBG) log("NotifyDisconnectCompleted"); ApnContext alreadySent = null; String reason = null; if (dp.onCompletedMsg != null) { // Get ApnContext, but only valid on GSM devices this is a string on CDMA devices. Message msg = dp.onCompletedMsg; if (msg.obj instanceof ApnContext) { alreadySent = (ApnContext)msg.obj; } reason = dp.reason; if (VDBG) { log(String.format("msg=%s msg.obj=%s", msg.toString(), ((msg.obj instanceof String) ? (String) msg.obj : "<no-reason>"))); Loading @@ -328,6 +341,17 @@ public abstract class DataConnection extends StateMachine { AsyncResult.forMessage(msg); msg.sendToTarget(); } if (sendAll) { for (ApnContext a : mApnList) { if (a == alreadySent) continue; if (reason != null) a.setReason(reason); Message msg = mDataConnectionTracker.obtainMessage( DataConnectionTracker.EVENT_DISCONNECT_DONE, a); AsyncResult.forMessage(msg); msg.sendToTarget(); } } if (DBG) log("NotifyDisconnectCompleted DisconnectParams=" + dp); } Loading Loading @@ -706,6 +730,13 @@ public abstract class DataConnection extends StateMachine { deferMessage(msg); break; case EVENT_DISCONNECT_ALL: if (DBG) { log("DcDefaultState deferring msg.what=EVENT_DISCONNECT_ALL" + mRefCount); } deferMessage(msg); break; case EVENT_RIL_CONNECTED: ar = (AsyncResult)msg.obj; if (ar.exception == null) { Loading Loading @@ -771,7 +802,7 @@ public abstract class DataConnection extends StateMachine { } if (mDisconnectParams != null) { if (VDBG) log("DcInactiveState: enter notifyDisconnectCompleted"); notifyDisconnectCompleted(mDisconnectParams); notifyDisconnectCompleted(mDisconnectParams, true); } clearSettings(); } Loading Loading @@ -812,7 +843,13 @@ public abstract class DataConnection extends StateMachine { case EVENT_DISCONNECT: if (DBG) log("DcInactiveState: msg.what=EVENT_DISCONNECT"); notifyDisconnectCompleted((DisconnectParams)msg.obj); notifyDisconnectCompleted((DisconnectParams)msg.obj, false); retVal = HANDLED; break; case EVENT_DISCONNECT_ALL: if (DBG) log("DcInactiveState: msg.what=EVENT_DISCONNECT_ALL"); notifyDisconnectCompleted((DisconnectParams)msg.obj, false); retVal = HANDLED; break; Loading Loading @@ -989,12 +1026,24 @@ public abstract class DataConnection extends StateMachine { transitionTo(mDisconnectingState); } else { if (msg.obj != null) { notifyDisconnectCompleted((DisconnectParams) msg.obj); notifyDisconnectCompleted((DisconnectParams) msg.obj, false); } } retVal = HANDLED; break; case EVENT_DISCONNECT_ALL: if (DBG) { log("DcActiveState msg.what=EVENT_DISCONNECT_ALL RefCount=" + mRefCount); } mRefCount = 0; DisconnectParams dp = (DisconnectParams) msg.obj; dp.tag = mTag; tearDownData(dp); transitionTo(mDisconnectingState); retVal = HANDLED; break; default: if (VDBG) { log("DcActiveState not handled msg.what=0x" + Loading Loading @@ -1124,4 +1173,16 @@ public abstract class DataConnection extends StateMachine { public void tearDown(String reason, Message onCompletedMsg) { sendMessage(obtainMessage(EVENT_DISCONNECT, new DisconnectParams(reason, onCompletedMsg))); } /** * Tear down the connection through the apn on the network. Ignores refcount and * and always tears down. * * @param onCompletedMsg is sent with its msg.obj as an AsyncResult object. * With AsyncResult.userObj set to the original msg.obj. */ public void tearDownAll(String reason, Message onCompletedMsg) { sendMessage(obtainMessage(EVENT_DISCONNECT_ALL, new DisconnectParams(reason, onCompletedMsg))); } }
telephony/java/com/android/internal/telephony/DataConnectionTracker.java +2 −1 Original line number Diff line number Diff line Loading @@ -1030,7 +1030,8 @@ public abstract class DataConnectionTracker extends Handler { } } if (didDisable) { if (enabledCount == 0) { if ((enabledCount == 0) || (apnId == APN_DUN_ID)) { mRequestedApnType = Phone.APN_TYPE_DEFAULT; onCleanUpConnection(true, apnId, Phone.REASON_DATA_DISABLED); } Loading
telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java +7 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.os.Message; import android.util.Log; import com.android.internal.telephony.DataConnection; import com.android.internal.telephony.DataConnectionTracker; import com.android.internal.telephony.Phone; import com.android.internal.telephony.RILConstants; import com.android.internal.telephony.RetryManager; Loading @@ -32,8 +33,9 @@ public class CdmaDataConnection extends DataConnection { private static final String LOG_TAG = "CDMA"; // ***** Constructor private CdmaDataConnection(CDMAPhone phone, String name, int id, RetryManager rm) { super(phone, name, id, rm); private CdmaDataConnection(CDMAPhone phone, String name, int id, RetryManager rm, DataConnectionTracker dct) { super(phone, name, id, rm, dct); } /** Loading @@ -44,12 +46,13 @@ public class CdmaDataConnection extends DataConnection { * @param rm the RetryManager * @return CdmaDataConnection that was created. */ static CdmaDataConnection makeDataConnection(CDMAPhone phone, int id, RetryManager rm) { static CdmaDataConnection makeDataConnection(CDMAPhone phone, int id, RetryManager rm, DataConnectionTracker dct) { synchronized (mCountLock) { mCount += 1; } CdmaDataConnection cdmaDc = new CdmaDataConnection(phone, "CdmaDC-" + mCount, id, rm); id, rm, dct); cdmaDc.start(); if (DBG) cdmaDc.log("Made " + cdmaDc.getName()); return cdmaDc; Loading
telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java +17 −11 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override public void dispose() { cleanUpConnection(false, null); cleanUpConnection(false, null, false); super.dispose(); Loading Loading @@ -295,7 +295,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { * @param tearDown true if the underlying DataConnection should be disconnected. * @param reason for the clean up. */ private void cleanUpConnection(boolean tearDown, String reason) { private void cleanUpConnection(boolean tearDown, String reason, boolean doAll) { if (DBG) log("cleanUpConnection: reason: " + reason); // Clear the reconnect alarm, if set. Loading @@ -315,9 +315,15 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { DataConnectionAc dcac = mDataConnectionAsyncChannels.get(conn.getDataConnectionId()); if (tearDown) { if (DBG) log("cleanUpConnection: teardown, call conn.disconnect"); if (doAll) { if (DBG) log("cleanUpConnection: teardown, conn.tearDownAll"); conn.tearDownAll(reason, obtainMessage(EVENT_DISCONNECT_DONE, conn.getDataConnectionId(), 0, reason)); } else { if (DBG) log("cleanUpConnection: teardown, conn.tearDown"); conn.tearDown(reason, obtainMessage(EVENT_DISCONNECT_DONE, conn.getDataConnectionId(), 0, reason)); } notificationDeferred = true; } else { if (DBG) log("cleanUpConnection: !tearDown, call conn.resetSynchronously"); Loading Loading @@ -599,7 +605,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override protected void onEnableNewApn() { // No mRequestedApnType check; only one connection is supported cleanUpConnection(true, Phone.REASON_APN_SWITCHED); cleanUpConnection(true, Phone.REASON_APN_SWITCHED, false); } /** Loading Loading @@ -781,13 +787,13 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override protected void onCleanUpConnection(boolean tearDown, int apnId, String reason) { // No apnId check; only one connection is supported cleanUpConnection(tearDown, reason); cleanUpConnection(tearDown, reason, (apnId == APN_DUN_ID)); } @Override protected void onCleanUpAllConnections(String cause) { // Only one CDMA connection is supported cleanUpConnection(true, cause); cleanUpConnection(true, cause, false); } private void createAllDataConnectionList() { Loading @@ -806,7 +812,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { } int id = mUniqueIdGenerator.getAndIncrement(); dataConn = CdmaDataConnection.makeDataConnection(mCdmaPhone, id, rm); dataConn = CdmaDataConnection.makeDataConnection(mCdmaPhone, id, rm, this); mDataConnections.put(id, dataConn); DataConnectionAc dcac = new DataConnectionAc(dataConn, LOG_TAG); int status = dcac.fullyConnectSync(mPhone.getContext(), this, dataConn.getHandler()); Loading @@ -833,7 +839,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { notifyDataConnection(Phone.REASON_CDMA_DATA_DETACHED); } else { if (mState == State.FAILED) { cleanUpConnection(false, Phone.REASON_CDMA_DATA_DETACHED); cleanUpConnection(false, Phone.REASON_CDMA_DATA_DETACHED, false); mDataConnections.get(0).resetRetryCount(); CdmaCellLocation loc = (CdmaCellLocation)(mPhone.getCellLocation()); Loading Loading @@ -912,7 +918,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { log("onDataStateChanged: No active connection" + "state is CONNECTED, disconnecting/cleanup"); writeEventLogCdmaDataDrop(); cleanUpConnection(true, null); cleanUpConnection(true, null, false); return; } Loading