Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3545c86 authored by Joseph Hwang's avatar Joseph Hwang
Browse files

gd/hci: MSFT operations disallowed if not supported

The MSFT monitor add/remove/enable operations should not be executed
on non-supporting platforms.

Bug: 270629001
Tag: #floss
Test: ./build.py --target test
Test: Manual test on a ChromeOS device that does not support the MSFT
extension, e.g., octopus/blooglet
  localhost # btclient
  bluetooth> le-scan register-scanner
  bluetooth> le-scan start-scan 1
  bluetooth> le-scan stop-scan 1
The btadapterd should not crash. The btclient outputs messages like
  msft_adv_monitor_enable: Disallowed as MSFT extension is not supported

Change-Id: I416010b0196706e93bf0607b50382eebf0c1f91b
parent c5e62590
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -138,6 +138,11 @@ struct MsftExtensionManager::impl {
  }

  void msft_adv_monitor_add(const MsftAdvMonitor& monitor, MsftAdvMonitorAddCallback cb) {
    if (!supports_msft_extensions()) {
      LOG_WARN("Disallowed as MSFT extension is not supported.");
      return;
    }

    std::vector<MsftLeMonitorAdvConditionPattern> patterns;
    MsftLeMonitorAdvConditionPattern pattern;
    // The Microsoft Extension specifies 1 octet for the number of patterns.
@@ -168,6 +173,11 @@ struct MsftExtensionManager::impl {
  }

  void msft_adv_monitor_remove(uint8_t monitor_handle, MsftAdvMonitorRemoveCallback cb) {
    if (!supports_msft_extensions()) {
      LOG_WARN("Disallowed as MSFT extension is not supported.");
      return;
    }

    msft_adv_monitor_remove_cb_ = cb;
    hci_layer_->EnqueueCommand(
        MsftLeCancelMonitorAdvBuilder::Create(
@@ -176,6 +186,11 @@ struct MsftExtensionManager::impl {
  }

  void msft_adv_monitor_enable(bool enable, MsftAdvMonitorEnableCallback cb) {
    if (!supports_msft_extensions()) {
      LOG_WARN("Disallowed as MSFT extension is not supported.");
      return;
    }

    msft_adv_monitor_enable_cb_ = cb;
    hci_layer_->EnqueueCommand(
        MsftLeSetAdvFilterEnableBuilder::Create(static_cast<OpCode>(msft_.opcode.value()), enable),