Loading services/core/java/com/android/server/ConnectivityService.java +39 −26 Original line number Diff line number Diff line Loading @@ -1792,6 +1792,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { return false; } private boolean isRequest(NetworkRequest request) { return mNetworkRequests.get(request).isRequest; } // must be stateless - things change under us. private class NetworkStateTrackerHandler extends Handler { public NetworkStateTrackerHandler(Looper looper) { Loading Loading @@ -1908,8 +1912,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (valid) { if (DBG) log("Validated " + nai.name()); final boolean previouslyValidated = nai.validated; final int previousScore = nai.getCurrentScore(); nai.validated = true; rematchNetworkAndRequests(nai, !previouslyValidated); // If score has changed, rebroadcast to NetworkFactories. b/17726566 if (nai.getCurrentScore() != previousScore) { sendUpdatedScoreToFactories(nai); } } updateInetCondition(nai, valid); // Let the NetworkAgent know the state of its network Loading Loading @@ -2203,7 +2212,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { boolean keep = nai.isVPN(); for (int i = 0; i < nai.networkRequests.size() && !keep; i++) { NetworkRequest r = nai.networkRequests.valueAt(i); if (mNetworkRequests.get(r).isRequest) keep = true; if (isRequest(r)) keep = true; } if (!keep) { if (DBG) log("no live requests for " + nai.name() + "; disconnecting"); Loading Loading @@ -2487,6 +2496,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (nai == null) return; if (DBG) log("reportBadNetwork(" + nai.name() + ") by " + uid); synchronized (nai) { // Validating an uncreated network could result in a call to rematchNetworkAndRequests() // which isn't meant to work on uncreated networks. if (!nai.created) return; if (isNetworkBlocked(nai, uid)) return; nai.networkMonitor.sendMessage(NetworkMonitor.CMD_FORCE_REEVALUATION, uid); Loading Loading @@ -3692,6 +3705,15 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) { for (int i = 0; i < nai.networkRequests.size(); i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); // Don't send listening requests to factories. b/17393458 if (!isRequest(nr)) continue; sendUpdatedScoreToFactories(nr, nai.getCurrentScore()); } } private void sendUpdatedScoreToFactories(NetworkRequest networkRequest, int score) { if (VDBG) log("sending new Min Network Score(" + score + "): " + networkRequest.toString()); for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { Loading Loading @@ -3746,22 +3768,24 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } private void handleLingerComplete(NetworkAgentInfo oldNetwork) { if (oldNetwork == null) { loge("Unknown NetworkAgentInfo in handleLingerComplete"); return; } if (DBG) { log("handleLingerComplete for " + oldNetwork.name()); for (int i = 0; i < oldNetwork.networkRequests.size(); i++) { NetworkRequest nr = oldNetwork.networkRequests.valueAt(i); private void teardownUnneededNetwork(NetworkAgentInfo nai) { for (int i = 0; i < nai.networkRequests.size(); i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); // Ignore listening requests. if (mNetworkRequests.get(nr).isRequest == false) continue; if (!isRequest(nr)) continue; loge("Dead network still had at least " + nr); break; } nai.asyncChannel.disconnect(); } oldNetwork.asyncChannel.disconnect(); private void handleLingerComplete(NetworkAgentInfo oldNetwork) { if (oldNetwork == null) { loge("Unknown NetworkAgentInfo in handleLingerComplete"); return; } if (DBG) log("handleLingerComplete for " + oldNetwork.name()); teardownUnneededNetwork(oldNetwork); } private void makeDefault(NetworkAgentInfo newNetwork) { Loading Loading @@ -3898,7 +3922,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { for (int i = 0; i < nai.networkRequests.size() && teardown; i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); try { if (mNetworkRequests.get(nr).isRequest) { if (isRequest(nr)) { teardown = false; } } catch (Exception e) { Loading Loading @@ -3961,14 +3985,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { // the lingering process so communication on that network is given time to wrap up. // TODO: Could teardown unvalidated networks when their NetworkCapabilities // satisfy no NetworkRequests. if (DBG && newNetwork.networkRequests.size() != 0) { loge("tearing down network with live requests:"); for (int i=0; i < newNetwork.networkRequests.size(); i++) { loge(" " + newNetwork.networkRequests.valueAt(i)); } } if (DBG) log("Validated network turns out to be unwanted. Tear it down."); newNetwork.asyncChannel.disconnect(); teardownUnneededNetwork(newNetwork); } } Loading Loading @@ -4097,12 +4115,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (nai.created) rematchAllNetworksAndRequests(nai, oldScore); for (int i = 0; i < nai.networkRequests.size(); i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); // Don't send listening requests to factories. b/17393458 if (mNetworkRequests.get(nr).isRequest == false) continue; sendUpdatedScoreToFactories(nr, score); } sendUpdatedScoreToFactories(nai); } // notify only this one new request of the current state Loading Loading
services/core/java/com/android/server/ConnectivityService.java +39 −26 Original line number Diff line number Diff line Loading @@ -1792,6 +1792,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { return false; } private boolean isRequest(NetworkRequest request) { return mNetworkRequests.get(request).isRequest; } // must be stateless - things change under us. private class NetworkStateTrackerHandler extends Handler { public NetworkStateTrackerHandler(Looper looper) { Loading Loading @@ -1908,8 +1912,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (valid) { if (DBG) log("Validated " + nai.name()); final boolean previouslyValidated = nai.validated; final int previousScore = nai.getCurrentScore(); nai.validated = true; rematchNetworkAndRequests(nai, !previouslyValidated); // If score has changed, rebroadcast to NetworkFactories. b/17726566 if (nai.getCurrentScore() != previousScore) { sendUpdatedScoreToFactories(nai); } } updateInetCondition(nai, valid); // Let the NetworkAgent know the state of its network Loading Loading @@ -2203,7 +2212,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { boolean keep = nai.isVPN(); for (int i = 0; i < nai.networkRequests.size() && !keep; i++) { NetworkRequest r = nai.networkRequests.valueAt(i); if (mNetworkRequests.get(r).isRequest) keep = true; if (isRequest(r)) keep = true; } if (!keep) { if (DBG) log("no live requests for " + nai.name() + "; disconnecting"); Loading Loading @@ -2487,6 +2496,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (nai == null) return; if (DBG) log("reportBadNetwork(" + nai.name() + ") by " + uid); synchronized (nai) { // Validating an uncreated network could result in a call to rematchNetworkAndRequests() // which isn't meant to work on uncreated networks. if (!nai.created) return; if (isNetworkBlocked(nai, uid)) return; nai.networkMonitor.sendMessage(NetworkMonitor.CMD_FORCE_REEVALUATION, uid); Loading Loading @@ -3692,6 +3705,15 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) { for (int i = 0; i < nai.networkRequests.size(); i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); // Don't send listening requests to factories. b/17393458 if (!isRequest(nr)) continue; sendUpdatedScoreToFactories(nr, nai.getCurrentScore()); } } private void sendUpdatedScoreToFactories(NetworkRequest networkRequest, int score) { if (VDBG) log("sending new Min Network Score(" + score + "): " + networkRequest.toString()); for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { Loading Loading @@ -3746,22 +3768,24 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } private void handleLingerComplete(NetworkAgentInfo oldNetwork) { if (oldNetwork == null) { loge("Unknown NetworkAgentInfo in handleLingerComplete"); return; } if (DBG) { log("handleLingerComplete for " + oldNetwork.name()); for (int i = 0; i < oldNetwork.networkRequests.size(); i++) { NetworkRequest nr = oldNetwork.networkRequests.valueAt(i); private void teardownUnneededNetwork(NetworkAgentInfo nai) { for (int i = 0; i < nai.networkRequests.size(); i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); // Ignore listening requests. if (mNetworkRequests.get(nr).isRequest == false) continue; if (!isRequest(nr)) continue; loge("Dead network still had at least " + nr); break; } nai.asyncChannel.disconnect(); } oldNetwork.asyncChannel.disconnect(); private void handleLingerComplete(NetworkAgentInfo oldNetwork) { if (oldNetwork == null) { loge("Unknown NetworkAgentInfo in handleLingerComplete"); return; } if (DBG) log("handleLingerComplete for " + oldNetwork.name()); teardownUnneededNetwork(oldNetwork); } private void makeDefault(NetworkAgentInfo newNetwork) { Loading Loading @@ -3898,7 +3922,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { for (int i = 0; i < nai.networkRequests.size() && teardown; i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); try { if (mNetworkRequests.get(nr).isRequest) { if (isRequest(nr)) { teardown = false; } } catch (Exception e) { Loading Loading @@ -3961,14 +3985,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { // the lingering process so communication on that network is given time to wrap up. // TODO: Could teardown unvalidated networks when their NetworkCapabilities // satisfy no NetworkRequests. if (DBG && newNetwork.networkRequests.size() != 0) { loge("tearing down network with live requests:"); for (int i=0; i < newNetwork.networkRequests.size(); i++) { loge(" " + newNetwork.networkRequests.valueAt(i)); } } if (DBG) log("Validated network turns out to be unwanted. Tear it down."); newNetwork.asyncChannel.disconnect(); teardownUnneededNetwork(newNetwork); } } Loading Loading @@ -4097,12 +4115,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (nai.created) rematchAllNetworksAndRequests(nai, oldScore); for (int i = 0; i < nai.networkRequests.size(); i++) { NetworkRequest nr = nai.networkRequests.valueAt(i); // Don't send listening requests to factories. b/17393458 if (mNetworkRequests.get(nr).isRequest == false) continue; sendUpdatedScoreToFactories(nr, score); } sendUpdatedScoreToFactories(nai); } // notify only this one new request of the current state Loading