diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 311efc8286..a204b36f91 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -605,7 +605,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { !network.isTeardownRequested()) { if (ni.isConnected() == true) { // add the pid-specific dns - handleDnsConfigurationChange(); + handleDnsConfigurationChange(networkType); if (DBG) Slog.d(TAG, "special network already active"); return Phone.APN_ALREADY_ACTIVE; } @@ -967,7 +967,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } // do this before we broadcast the change - handleConnectivityChange(); + handleConnectivityChange(prevNetType); sendStickyBroadcast(intent); /* @@ -1123,9 +1123,6 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } - // do this before we broadcast the change - handleConnectivityChange(); - sendStickyBroadcast(intent); /* * If the failover network is already connected, then immediately send @@ -1204,7 +1201,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } thisNet.setTeardownRequested(false); updateNetworkSettings(thisNet); - handleConnectivityChange(); + handleConnectivityChange(type); sendConnectedBroadcast(info); } @@ -1231,38 +1228,29 @@ public class ConnectivityService extends IConnectivityManager.Stub { } /** - * After any kind of change in the connectivity state of any network, - * make sure that anything that depends on the connectivity state of - * more than one network is set up correctly. We're mainly concerned - * with making sure that the list of DNS servers is set up according - * to which networks are connected, and ensuring that the right routing - * table entries exist. + * After a change in the connectivity state of a network. We're mainly + * concerned with making sure that the list of DNS servers is set up + * according to which networks are connected, and ensuring that the + * right routing table entries exist. */ - private void handleConnectivityChange() { + private void handleConnectivityChange(int netType) { /* * If a non-default network is enabled, add the host routes that - * will allow it's DNS servers to be accessed. Only - * If both mobile and wifi are enabled, add the host routes that - * will allow MMS traffic to pass on the mobile network. But - * remove the default route for the mobile network, so that there - * will be only one default route, to ensure that all traffic - * except MMS will travel via Wi-Fi. + * will allow it's DNS servers to be accessed. */ - handleDnsConfigurationChange(); + handleDnsConfigurationChange(netType); - for (int netType : mPriorityList) { - if (mNetTrackers[netType].getNetworkInfo().isConnected()) { - if (mNetAttributes[netType].isDefault()) { - addDefaultRoute(mNetTrackers[netType]); - } else { - addPrivateDnsRoutes(mNetTrackers[netType]); - } + if (mNetTrackers[netType].getNetworkInfo().isConnected()) { + if (mNetAttributes[netType].isDefault()) { + addDefaultRoute(mNetTrackers[netType]); } else { - if (mNetAttributes[netType].isDefault()) { - removeDefaultRoute(mNetTrackers[netType]); - } else { - removePrivateDnsRoutes(mNetTrackers[netType]); - } + addPrivateDnsRoutes(mNetTrackers[netType]); + } + } else { + if (mNetAttributes[netType].isDefault()) { + removeDefaultRoute(mNetTrackers[netType]); + } else { + removePrivateDnsRoutes(mNetTrackers[netType]); } } } @@ -1310,18 +1298,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (p == null) return; String interfaceName = p.getInterfaceName(); InetAddress defaultGatewayAddr = p.getGateway(); - boolean defaultRouteSet = nt.isDefaultRouteSet(); - if ((interfaceName != null) && (defaultGatewayAddr != null ) && - (defaultRouteSet == false)) { - boolean error = (NetworkUtils.setDefaultRoute(interfaceName, defaultGatewayAddr) < 0); - - if (DBG && !error) { + if ((interfaceName != null) && (defaultGatewayAddr != null )) { + if ((NetworkUtils.setDefaultRoute(interfaceName, defaultGatewayAddr) >= 0) && DBG) { NetworkInfo networkInfo = nt.getNetworkInfo(); Slog.d(TAG, "addDefaultRoute for " + networkInfo.getTypeName() + " (" + interfaceName + "), GatewayAddr=" + defaultGatewayAddr); } - nt.defaultRouteSet(!error); } } @@ -1330,16 +1313,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { NetworkProperties p = nt.getNetworkProperties(); if (p == null) return; String interfaceName = p.getInterfaceName(); - boolean defaultRouteSet = nt.isDefaultRouteSet(); - if (interfaceName != null && defaultRouteSet == true) { - boolean error = (NetworkUtils.removeDefaultRoute(interfaceName) < 0); - if (DBG && !error) { + if (interfaceName != null) { + if ((NetworkUtils.removeDefaultRoute(interfaceName) >= 0) && DBG) { NetworkInfo networkInfo = nt.getNetworkInfo(); Slog.d(TAG, "removeDefaultRoute for " + networkInfo.getTypeName() + " (" + interfaceName + ")"); } - nt.defaultRouteSet(error); } } @@ -1480,42 +1460,37 @@ public class ConnectivityService extends IConnectivityManager.Stub { SystemProperties.set("net.dnschange", "" + (n+1)); } - private void handleDnsConfigurationChange() { + private void handleDnsConfigurationChange(int netType) { // add default net's dns entries - for (int x = mPriorityList.length-1; x>= 0; x--) { - int netType = mPriorityList[x]; - NetworkStateTracker nt = mNetTrackers[netType]; - if (nt != null && nt.getNetworkInfo().isConnected() && - !nt.isTeardownRequested()) { - NetworkProperties p = nt.getNetworkProperties(); - if (p == null) continue; - Collection dnses = p.getDnses(); - if (mNetAttributes[netType].isDefault()) { - int j = 1; - for (InetAddress dns : dnses) { - if (DBG) { - Slog.d(TAG, "adding dns " + dns + " for " + - nt.getNetworkInfo().getTypeName()); - } - SystemProperties.set("net.dns" + j++, dns.getHostAddress()); - } - for (int k=j ; k dnses = p.getDnses(); + if (mNetAttributes[netType].isDefault()) { + int j = 1; + for (InetAddress dns : dnses) { + if (DBG) { + Slog.d(TAG, "adding dns " + dns + " for " + + nt.getNetworkInfo().getTypeName()); } + SystemProperties.set("net.dns" + j++, dns.getHostAddress()); + } + for (int k=j ; k