summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorRobert Greenwalt <rgreenwalt@google.com>2011-01-23 16:04:05 -0800
committerRobert Greenwalt <rgreenwalt@google.com>2011-01-23 16:04:05 -0800
commit05d8936f275762bab0d66c6337e352388c8eeee0 (patch)
tree44d9018f036719a92730455496c696771aa67f40 /services
parent9d97b63d0e0c7c9deb2d140c1dd579b51f52c1af (diff)
downloadframeworks_base-05d8936f275762bab0d66c6337e352388c8eeee0.zip
frameworks_base-05d8936f275762bab0d66c6337e352388c8eeee0.tar.gz
frameworks_base-05d8936f275762bab0d66c6337e352388c8eeee0.tar.bz2
Fix tethering when switching default connection
If the default connection is suitable use that rather than a random interface. This permits us to deterministically switch back to wifi after hanging out on DUN APN. bug:3374236 Change-Id: Iee5137b9f09c358f262e7a62f20282e79f7d889f
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/connectivity/Tethering.java19
1 files changed, 17 insertions, 2 deletions
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index dd9db9a..26c7e71 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -31,6 +31,7 @@ import android.net.ConnectivityManager;
import android.net.InterfaceConfiguration;
import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
+import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.os.Binder;
import android.os.Environment;
@@ -1219,7 +1220,20 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
protected String findActiveUpstreamIface() {
// check for what iface we can use - if none found switch to error.
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
+ IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
+ IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b);
+
+ try {
+ LinkProperties defaultProp = cm.getActiveLinkProperties();
+ if (defaultProp != null) {
+ String iface = defaultProp.getInterfaceName();
+ for(String regex : mUpstreamIfaceRegexs) {
+ if (iface.matches(regex)) return iface;
+ }
+ }
+ } catch (RemoteException e) { }
+
+ b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
String[] ifaces = new String[0];
@@ -1390,7 +1404,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
break;
case CMD_UPSTREAM_CHANGED:
- mTryCell = WAIT_FOR_NETWORK_TO_SETTLE;
+ // need to try DUN immediately if Wifi goes down
+ mTryCell = !WAIT_FOR_NETWORK_TO_SETTLE;
chooseUpstreamType(mTryCell);
mTryCell = !mTryCell;
break;