summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Greenwalt <rgreenwalt@google.com> 2011-02-16 10:44:26 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2011-02-16 10:44:26 -0800
commit3259d8853760a72b811757e1711119d041962a1c (patch)
treef17a1e9ed4c3e731353ab78eb87710b38bf846ce
parentbe5f82ab0ddacea3846cfa5aa846d1c97def0318 (diff)
parent7e62fd1436c0db6398528e654563896364d6000a (diff)
Merge "DO NOT MERGE - backport of l92a02b31 from master" into gingerbread
-rw-r--r--services/java/com/android/server/ConnectivityService.java61
1 files changed, 17 insertions, 44 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index bc102e435a12..4e5aa334fa27 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -1037,59 +1037,32 @@ public class ConnectivityService extends IConnectivityManager.Stub {
for (int checkType=0; checkType <= ConnectivityManager.MAX_NETWORK_TYPE; checkType++) {
if (checkType == prevNetType) continue;
if (mNetAttributes[checkType] == null) continue;
+ if (mNetAttributes[checkType].isDefault() == false) continue;
if (mNetAttributes[checkType].mRadio == ConnectivityManager.TYPE_MOBILE &&
noMobileData) {
Slog.e(TAG, "not failing over to mobile type " + checkType +
" because Mobile Data Disabled");
continue;
}
- if (mNetAttributes[checkType].isDefault()) {
- /* TODO - if we have multiple nets we could use
- * we may want to put more thought into which we choose
- */
- if (checkType == mNetworkPreference) {
- newType = checkType;
- break;
- }
- if (mNetAttributes[checkType].mPriority > newPriority) {
- newType = checkType;
- newPriority = mNetAttributes[newType].mPriority;
- }
+ NetworkStateTracker tracker = mNetTrackers[checkType];
+ NetworkInfo info = tracker.getNetworkInfo();
+ if (!info.isConnectedOrConnecting() ||
+ tracker.isTeardownRequested()) {
+ info.setFailover(true);
+ tracker.reconnect();
}
- }
+ if (DBG) Slog.d(TAG, "Attempting to switch to " + info.getTypeName());
- if (newType != -1) {
- newNet = mNetTrackers[newType];
- /**
- * See if the other network is available to fail over to.
- * If is not available, we enable it anyway, so that it
- * will be able to connect when it does become available,
- * but we report a total loss of connectivity rather than
- * report that we are attempting to fail over.
- */
- if (newNet.isAvailable()) {
- NetworkInfo switchTo = newNet.getNetworkInfo();
- switchTo.setFailover(true);
- if (!switchTo.isConnectedOrConnecting() ||
- newNet.isTeardownRequested()) {
- newNet.reconnect();
- }
- if (DBG) {
- if (switchTo.isConnected()) {
- Slog.v(TAG, "Switching to already connected " +
- switchTo.getTypeName());
- } else {
- Slog.v(TAG, "Attempting to switch to " +
- switchTo.getTypeName());
- }
- }
- } else {
- newNet.reconnect();
- newNet = null; // not officially avail.. try anyway, but
- // report no failover
+ // figure out if this is the highest priority network
+ // so we send an appropriate return value
+ if (checkType == mNetworkPreference) {
+ newType = checkType;
+ }
+ if (mNetAttributes[checkType].mPriority > newPriority &&
+ newType != mNetworkPreference) {
+ newType = checkType;
+ newPriority = mNetAttributes[checkType].mPriority;
}
- } else {
- Slog.e(TAG, "Network failover failing.");
}
}