summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Greenwalt <robdroid@android.com> 2009-08-19 20:19:33 -0700
committer Robert Greenwalt <robdroid@android.com> 2009-08-19 21:58:12 -0700
commita64bf834ffa677405af1c87c9f53eed0cd3853ce (patch)
tree6e92c9024b708aa8cf0e7e2839d20d071774cd45
parentf5d493a54b2320efecfb47d9c8b51092a7fe171f (diff)
Fix various issues found when testing Mms.
Fix some race conditions (check isTeardownRequested). Fix the passing of mInterfaceName to subtypes (mms, etc). Fix the generation of CONNECTED message to already active subtypes. Fix the enabling of Data in DataConnectionTracker. bug: 2065037
-rw-r--r--core/java/android/net/MobileDataStateTracker.java24
-rw-r--r--services/java/com/android/server/ConnectivityService.java7
-rw-r--r--telephony/java/com/android/internal/telephony/DataConnectionTracker.java15
3 files changed, 30 insertions, 16 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index c5d6e11de1cd..f9effa2b667b 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -143,8 +143,9 @@ public class MobileDataStateTracker extends NetworkStateTracker {
boolean unavailable = intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,
false);
if (DBG) Log.d(TAG, mApnType + " Received " + intent.getAction() +
- " broadcast - state = " + state + ", unavailable = " + unavailable +
- ", reason = " + (reason == null ? "(unspecified)" : reason));
+ " broadcast - state = " + state + ", oldstate = " + mMobileDataState +
+ ", unavailable = " + unavailable + ", reason = " +
+ (reason == null ? "(unspecified)" : reason));
if (isApnTypeIncluded(apnTypeList)) {
if (mEnabled == false) {
@@ -152,10 +153,12 @@ public class MobileDataStateTracker extends NetworkStateTracker {
// we should record the interface name if one's provided. If the user
// turns on this network we will need the interfacename but won't get
// a fresh connected message - TODO fix this..
- if (mInterfaceName == null && state == Phone.DataState.CONNECTED) {
+ if (state == Phone.DataState.CONNECTED) {
+ if (DBG) Log.d(TAG, "replacing old mInterfaceName (" +
+ mInterfaceName + ") with " +
+ intent.getStringExtra(Phone.DATA_IFACE_NAME_KEY) +
+ " for " + mApnType);
mInterfaceName = intent.getStringExtra(Phone.DATA_IFACE_NAME_KEY);
- } else if (state == Phone.DataState.DISCONNECTED) {
- mInterfaceName = null;
}
if (DBG) Log.d(TAG, " dropped - mEnabled = false");
return;
@@ -179,6 +182,8 @@ public class MobileDataStateTracker extends NetworkStateTracker {
if (mInterfaceName != null) {
NetworkUtils.resetConnections(mInterfaceName);
}
+ if (DBG) Log.d(TAG, "clearing mInterfaceName for "+ mApnType +
+ " as it DISCONNECTED");
mInterfaceName = null;
mDefaultGatewayAddr = 0;
break;
@@ -301,6 +306,8 @@ public class MobileDataStateTracker extends NetworkStateTracker {
switch (setEnableApn(mApnType, true)) {
case Phone.APN_ALREADY_ACTIVE:
mEnabled = true;
+ // need to set self to CONNECTING so the below message is handled.
+ mMobileDataState = Phone.DataState.CONNECTING;
//send out a connected message
Intent intent = new Intent(TelephonyIntents.
ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
@@ -412,10 +419,11 @@ public class MobileDataStateTracker extends NetworkStateTracker {
*/
@Override
public boolean requestRouteToHost(int hostAddress) {
+ if (DBG) {
+ Log.d(TAG, "Requested host route to " + Integer.toHexString(hostAddress) +
+ " for " + mApnType + "(" + mInterfaceName + ")");
+ }
if (mInterfaceName != null && hostAddress != -1) {
- if (DBG) {
- Log.d(TAG, "Requested host route to " + Integer.toHexString(hostAddress));
- }
return NetworkUtils.addHostRoute(mInterfaceName, hostAddress) == 0;
} else {
return false;
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 72a1192db7cf..df37d35a74f6 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -513,7 +513,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mNetRequestersPids[usedNetworkType].add(currentPid);
}
- if (ni.isConnectedOrConnecting() == true) {
+ if ((ni.isConnectedOrConnecting() == true) &&
+ !network.isTeardownRequested()) {
if (ni.isConnected() == true) {
// add the pid-specific dns
handleDnsConfigurationChange();
@@ -686,6 +687,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
++numConnectedNets;
}
}
+ if (DBG) Log.d(TAG, "numConnectedNets returning "+numConnectedNets);
return numConnectedNets;
}
@@ -792,7 +794,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (newNet.isAvailable()) {
NetworkInfo switchTo = newNet.getNetworkInfo();
switchTo.setFailover(true);
- if (!switchTo.isConnectedOrConnecting()) {
+ if (!switchTo.isConnectedOrConnecting() ||
+ newNet.isTeardownRequested()) {
newNet.reconnect();
}
if (DBG) {
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 29e89b57e0a0..cc981c9f0083 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -456,16 +456,19 @@ public abstract class DataConnectionTracker extends Handler {
if (dataEnabled[id] != enable) {
dataEnabled[id] = enable;
+ // count the total number of enabled APN's
+ // if we just enabled the first APN, start our Data connection,
+ // if we disabled the last, stop our data connection
if (enable) {
enabledCount++;
+ if (enabledCount == 1) {
+ setPrivateDataEnabled(true);
+ }
} else {
enabledCount--;
- }
-
- if (enabledCount == 0) {
- setPrivateDataEnabled(false);
- } else if (enabledCount == 1) {
- setPrivateDataEnabled(true);
+ if (enabledCount == 0) {
+ setPrivateDataEnabled(false);
+ }
}
}
}