From 4666ed0e7e9d10f9f6ac11a8423afdccc40bca51 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Thu, 10 Sep 2009 15:06:20 -0700 Subject: [PATCH] Fix for multi-apn MMS access. Mark cellular variants with the same availability, regardless of which are currently in use. Availability just means the radio is enabled and sees the network, but has no guarantees that we could connect to an APN if requested. Fix the requestRouteToHost logic to support apn switches without WIFI. bug:2093841 --- core/java/android/net/NetworkInfo.java | 2 +- .../android/server/ConnectivityService.java | 20 +++++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java index 9f539373b6..649cb8cfc8 100644 --- a/core/java/android/net/NetworkInfo.java +++ b/core/java/android/net/NetworkInfo.java @@ -131,7 +131,7 @@ public class NetworkInfo implements Parcelable { mSubtypeName = subtypeName; setDetailedState(DetailedState.IDLE, null, null); mState = State.UNKNOWN; - mIsAvailable = true; + mIsAvailable = false; // until we're told otherwise, assume unavailable mIsRoaming = false; } diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index e26dd13032..408a4d2985 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -640,20 +640,14 @@ public class ConnectivityService extends IConnectivityManager.Stub { return false; } NetworkStateTracker tracker = mNetTrackers[networkType]; - /* - * If there's only one connected network, and it's the one requested, - * then we don't have to do anything - the requested route already - * exists. If it's not the requested network, then it's not possible - * to establish the requested route. Finally, if there is more than - * one connected network, then we must insert an entry in the routing - * table. - */ - if (getNumConnectedNetworks() > 1) { - return tracker.requestRouteToHost(hostAddress); - } else { - return (mNetAttributes[networkType].isDefault() && - tracker.getNetworkInfo().isConnected()); + + if (!tracker.getNetworkInfo().isConnected() || tracker.isTeardownRequested()) { + if (DBG) { + Log.d(TAG, "requestRouteToHost on down network (" + networkType + " - dropped"); + } + return false; } + return tracker.requestRouteToHost(hostAddress); } /**