diff options
-rw-r--r-- | services/java/com/android/server/connectivity/Tethering.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java index b54de0a..f335287 100644 --- a/services/java/com/android/server/connectivity/Tethering.java +++ b/services/java/com/android/server/connectivity/Tethering.java @@ -847,6 +847,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { if (mMyUpstreamIfaceName != null) { try { service.disableNat(mIfaceName, mMyUpstreamIfaceName); + mMyUpstreamIfaceName = null; } catch (Exception e) { try { service.untetherInterface(mIfaceName); @@ -887,6 +888,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { if (mMyUpstreamIfaceName != null) { try { service.disableNat(mIfaceName, mMyUpstreamIfaceName); + mMyUpstreamIfaceName = null; } catch (Exception e) { try { service.untetherInterface(mIfaceName); @@ -926,6 +928,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { if (mMyUpstreamIfaceName != null) { try { service.disableNat(mIfaceName, mMyUpstreamIfaceName); + mMyUpstreamIfaceName = null; } catch (Exception e) { try { service.untetherInterface(mIfaceName); @@ -1026,6 +1029,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub { private boolean mConnectionRequested = false; + private String mUpstreamIfaceName = null; + private static final int UPSTREAM_SETTLE_TIME_MS = 10000; private static final int CELL_CONNECTION_RENEW_MS = 40000; @@ -1228,10 +1233,11 @@ public class Tethering extends INetworkManagementEventObserver.Stub { // wait for things to settle and retry sendMessageDelayed(CMD_RETRY_UPSTREAM, UPSTREAM_SETTLE_TIME_MS); } - notifyTetheredOfNewIface(iface); + notifyTetheredOfNewUpstreamIface(iface); } - protected void notifyTetheredOfNewIface(String ifaceName) { + protected void notifyTetheredOfNewUpstreamIface(String ifaceName) { Log.d(TAG, "notifying tethered with iface =" + ifaceName); + mUpstreamIfaceName = ifaceName; for (Object o : mNotifyList) { TetherInterfaceSM sm = (TetherInterfaceSM)o; sm.sendMessage(TetherInterfaceSM.CMD_TETHER_CONNECTION_CHANGED, @@ -1284,7 +1290,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { @Override public void exit() { turnOffMobileConnection(); - notifyTetheredOfNewIface(null); + notifyTetheredOfNewUpstreamIface(null); } @Override public boolean processMessage(Message message) { @@ -1294,7 +1300,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub { case CMD_TETHER_MODE_REQUESTED: TetherInterfaceSM who = (TetherInterfaceSM)message.obj; mNotifyList.add(who); - who.sendMessage(TetherInterfaceSM.CMD_TETHER_CONNECTION_CHANGED); + who.sendMessage(TetherInterfaceSM.CMD_TETHER_CONNECTION_CHANGED, + mUpstreamIfaceName); break; case CMD_TETHER_MODE_UNREQUESTED: who = (TetherInterfaceSM)message.obj; |