summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-12-07 13:19:08 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-12-07 13:19:08 +0000
commit5d88e2909650b274ceea861cf8075e7f9cdbf614 (patch)
tree1c9b04f412e30d3f0f9fadcbee1722a29c535dc1
parentcbcbf1b7cdf4ee6829e7d462a78f53f465534b4a (diff)
parent7c92dff57b1cfd75716ef2f05ef30df9d8b9766c (diff)
Merge "Check client info and scan parameter when handling single scan"
-rw-r--r--service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java31
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java39
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();
+ }
}