From d1b11dc70fe5488ac7818a0381b46787c3a9d368 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Thu, 17 Feb 2022 14:28:53 +0900 Subject: [PATCH] Ensure all NetworkMonitor messages store the netId in arg2. All NetworkMonitor messages contain the netId of the source NetworkMonitor. But the netId is in various places in the message. It's most frequently in arg2, but sometimes it's boxed into an Integer in obj, and sometimes it's in another object. Always pass the netId into arg2. This allows us to write common code at the beginning of the function that extracts the netId and nai, and performs common actions on all messages. Bug: 216567577 Test: atest FrameworksNetTests FrameworksNetIntegrationTests Test: atest CtsNetTestCases:ConnectivityManageTest Test: atest CtsNetTestCases:NetworkAgentTest Change-Id: Idbbe3cddfc5475a2d56df387f840439dc4c9514c --- .../android/server/ConnectivityService.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 6024a2a45f..8514a707a8 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -645,8 +645,9 @@ public class ConnectivityService extends IConnectivityManager.Stub * Event for NetworkMonitor to inform ConnectivityService that the probe status has changed. * Both of the arguments are bitmasks, and the value of bits come from * INetworkMonitor.NETWORK_VALIDATION_PROBE_*. - * arg1 = A bitmask to describe which probes are completed. - * arg2 = A bitmask to describe which probes are successful. + * arg1 = unused + * arg2 = netId + * obj = A Pair of integers: the bitmasks of, respectively, completed and successful probes. */ public static final int EVENT_PROBE_STATUS_CHANGED = 45; @@ -3602,19 +3603,21 @@ public class ConnectivityService extends IConnectivityManager.Stub } private boolean maybeHandleNetworkMonitorMessage(Message msg) { + final int netId = msg.arg2; + final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(netId); switch (msg.what) { default: return false; case EVENT_PROBE_STATUS_CHANGED: { - final Integer netId = (Integer) msg.obj; - final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(netId); if (nai == null) { break; } + final int probesCompleted = ((Pair) msg.obj).first; + final int probesSucceeded = ((Pair) msg.obj).second; final boolean probePrivateDnsCompleted = - ((msg.arg1 & NETWORK_VALIDATION_PROBE_PRIVDNS) != 0); + ((probesCompleted & NETWORK_VALIDATION_PROBE_PRIVDNS) != 0); final boolean privateDnsBroken = - ((msg.arg2 & NETWORK_VALIDATION_PROBE_PRIVDNS) == 0); + ((probesSucceeded & NETWORK_VALIDATION_PROBE_PRIVDNS) == 0); if (probePrivateDnsCompleted) { if (nai.networkCapabilities.isPrivateDnsBroken() != privateDnsBroken) { nai.networkCapabilities.setPrivateDnsBroken(privateDnsBroken); @@ -3641,7 +3644,6 @@ public class ConnectivityService extends IConnectivityManager.Stub case EVENT_NETWORK_TESTED: { final NetworkTestedResults results = (NetworkTestedResults) msg.obj; - final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(results.mNetId); if (nai == null) break; handleNetworkTested(nai, results.mTestResult, @@ -3649,9 +3651,7 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case EVENT_PROVISIONING_NOTIFICATION: { - final int netId = msg.arg2; final boolean visible = toBool(msg.arg1); - final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(netId); // If captive portal status has changed, update capabilities or disconnect. if (nai != null && (visible != nai.lastCaptivePortalDetected)) { nai.lastCaptivePortalDetected = visible; @@ -3685,14 +3685,12 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case EVENT_PRIVATE_DNS_CONFIG_RESOLVED: { - final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(msg.arg2); if (nai == null) break; updatePrivateDns(nai, (PrivateDnsConfig) msg.obj); break; } case EVENT_CAPPORT_DATA_CHANGED: { - final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(msg.arg2); if (nai == null) break; handleCapportApiDataUpdate(nai, (CaptivePortalData) msg.obj); break; @@ -3832,6 +3830,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // the same looper so messages will be processed in sequence. final Message msg = mTrackerHandler.obtainMessage( EVENT_NETWORK_TESTED, + 0, mNetId, new NetworkTestedResults( mNetId, p.result, p.timestampMillis, p.redirectUrl)); mTrackerHandler.sendMessage(msg); @@ -3869,7 +3868,7 @@ public class ConnectivityService extends IConnectivityManager.Stub public void notifyProbeStatusChanged(int probesCompleted, int probesSucceeded) { mTrackerHandler.sendMessage(mTrackerHandler.obtainMessage( EVENT_PROBE_STATUS_CHANGED, - probesCompleted, probesSucceeded, new Integer(mNetId))); + 0, mNetId, new Pair<>(probesCompleted, probesSucceeded))); } @Override