diff options
author | 2022-12-07 13:19:08 +0000 | |
---|---|---|
committer | 2022-12-07 13:19:08 +0000 | |
commit | 5d88e2909650b274ceea861cf8075e7f9cdbf614 (patch) | |
tree | 1c9b04f412e30d3f0f9fadcbee1722a29c535dc1 | |
parent | cbcbf1b7cdf4ee6829e7d462a78f53f465534b4a (diff) | |
parent | 7c92dff57b1cfd75716ef2f05ef30df9d8b9766c (diff) |
Merge "Check client info and scan parameter when handling single scan"
-rw-r--r-- | service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java | 31 | ||||
-rw-r--r-- | service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java | 39 |
2 files changed, 57 insertions, 13 deletions
diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java index aaf82960f3..7d0a679404 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java @@ -314,6 +314,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { localLog("stop background scan: " + client); Message msg = Message.obtain(); msg.what = WifiScanner.CMD_STOP_BACKGROUND_SCAN; + msg.obj = new ScanParams(listener, null, null); msg.sendingUid = uid; mBackgroundScanStateMachine.sendMessage(msg); } @@ -414,6 +415,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { localLog("stop scan: " + client); Message msg = Message.obtain(); msg.what = WifiScanner.CMD_STOP_SINGLE_SCAN; + msg.obj = new ScanParams(listener, null, null); msg.sendingUid = uid; mSingleScanStateMachine.sendMessage(msg); }); @@ -1012,11 +1014,9 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { /** * Helper method to handle the scan start message. */ - private void handleScanStartMessage(ClientInfo ci, Message msg) { - ScanParams scanParams = (ScanParams) msg.obj; - if (scanParams == null) { - logCallback("singleScanInvalidRequest", ci, "null params"); - ci.replyFailed(WifiScanner.REASON_INVALID_REQUEST, "params null"); + private void handleScanStartMessage(ClientInfo ci, ScanParams scanParams) { + if (ci == null) { + logCallback("singleScanInvalidRequest", ci, "null params"); return; } ScanSettings scanSettings = scanParams.settings; @@ -1094,13 +1094,17 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { return HANDLED; case WifiScanner.CMD_START_SINGLE_SCAN: ScanParams scanParams = (ScanParams) msg.obj; - ClientInfo ci = mClients.get(scanParams.listener); - handleScanStartMessage(ci, msg); + if (scanParams != null) { + ClientInfo ci = mClients.get(scanParams.listener); + handleScanStartMessage(ci, scanParams); + } return HANDLED; case WifiScanner.CMD_STOP_SINGLE_SCAN: scanParams = (ScanParams) msg.obj; - ci = mClients.get(scanParams.listener); - removeSingleScanRequests(ci); + if (scanParams != null) { + ClientInfo ci = mClients.get(scanParams.listener); + removeSingleScanRequests(ci); + } return HANDLED; case CMD_SCAN_RESULTS_AVAILABLE: if (DBG) localLog("ignored scan results available event"); @@ -2534,10 +2538,11 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { private void addSingleScanRequest(ScanSettings settings) { if (DBG) localLog("Starting single scan"); if (mInternalClientInfo != null) { - mSingleScanStateMachine.sendMessage( - WifiScanner.CMD_START_SINGLE_SCAN, - new ScanParams(mInternalClientInfo.mListener, settings, - ClientModeImpl.WIFI_WORK_SOURCE)); + Message msg = Message.obtain(); + msg.what = WifiScanner.CMD_START_SINGLE_SCAN; + msg.obj = new ScanParams(mInternalClientInfo.mListener, settings, + ClientModeImpl.WIFI_WORK_SOURCE); + mSingleScanStateMachine.sendMessage(msg); } mWifiMetrics.getScanMetrics().setWorkSource(ClientModeImpl.WIFI_WORK_SOURCE); } diff --git a/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java b/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java index f769b5afa6..32583e69f6 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java @@ -3605,4 +3605,43 @@ public class WifiScanningServiceTest extends WifiBaseTest { mWifiScanningServiceImpl.stopPnoScan(client.listener, TEST_PACKAGE_NAME, null); mLooper.dispatchAll(); } + + /** + * Do a single scan and then stop. + * Expect scan canceled. + */ + @Test + public void sendSingleScanRequestAndThenStop() + throws Exception { + WifiScanner.ScanSettings requestSettings = createRequest(channelsToSpec(2412), 0, + 0, 20, WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN); + ScanResults results = ScanResults.create(0, WifiScanner.WIFI_BAND_UNSPECIFIED, 2412); + + startServiceAndLoadDriver(); + + when(mWifiScannerImpl0.startSingleScan(any(WifiNative.ScanSettings.class), + any(WifiNative.ScanEventHandler.class))).thenReturn(true); + + TestClient client = new TestClient(); + InOrder order = inOrder(client.listener, mWifiScannerImpl0); + + // Run scan + client.sendSingleScanRequest(requestSettings, null); + mLooper.dispatchAll(); + client.verifySuccessfulResponse(); + WifiNative.ScanEventHandler eventHandler = verifyStartSingleScan(order, + computeSingleScanNativeSettings(requestSettings)); + //Stop scan + mWifiScanningServiceImpl.stopScan(client.listener, TEST_PACKAGE_NAME, TEST_FEATURE_ID); + mLooper.dispatchAll(); + // dispatch scan results + when(mWifiScannerImpl0.getLatestSingleScanResults()) + .thenReturn(results.getScanData()); + eventHandler.onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE); + + // Stopped scan should not receive results + mLooper.dispatchAll(); + order.verify(client.listener, never()).onResults(any()); + order.verify(client.listener, never()).onSingleScanCompleted(); + } } |