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

Commit 416b45ff authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes I6ec4610b,I0955b21d am: 2f573ec4 am: 428082f3

parents f8e574bd 428082f3
Loading
Loading
Loading
Loading
+15 −25
Original line number Diff line number Diff line
@@ -1737,30 +1737,22 @@ class CsisClientImpl : public CsisClient {
    device->conn_id = evt.conn_id;

    /* Verify bond */
    uint8_t sec_flag = 0;
    BTM_GetSecurityFlagsByTransport(evt.remote_bda, &sec_flag, BT_TRANSPORT_LE);

    /* If link has been encrypted look for the service or report */
    if (sec_flag & BTM_SEC_FLAG_ENCRYPTED) {
      if (device->is_gatt_service_valid) {
        instance->OnEncrypted(device);
      } else {
        BTA_GATTC_ServiceSearchRequest(device->conn_id, &kCsisServiceUuid);
    if (BTM_SecIsSecurityPending(device->addr)) {
      /* if security collision happened, wait for encryption done
       * (BTA_GATTC_ENC_CMPL_CB_EVT) */
      return;
    }

    /* verify bond */
    if (BTM_IsEncrypted(device->addr, BT_TRANSPORT_LE)) {
      /* if link has been encrypted */
      OnEncrypted(device);
      return;
    }

    int result = BTM_SetEncryption(
        evt.remote_bda, BT_TRANSPORT_LE,
        [](const RawAddress* bd_addr, tBT_TRANSPORT transport, void* p_ref_data,
           tBTM_STATUS status) {
          if (instance) instance->OnLeEncryptionComplete(*bd_addr, status);
        },
    int result = BTM_SetEncryption(device->addr, BT_TRANSPORT_LE, nullptr,
                                   nullptr, BTM_BLE_SEC_ENCRYPT);

    DLOG(INFO) << __func__
               << " Encryption required. Request result: " << result;
    LOG_INFO("Encryption required. Request result: 0x%02x", result);
  }

  void OnGattDisconnected(const tBTA_GATTC_CLOSE& evt) {
@@ -1892,17 +1884,15 @@ class CsisClientImpl : public CsisClient {
  }

  void OnLeEncryptionComplete(const RawAddress& address, uint8_t status) {
    DLOG(INFO) << __func__ << " " << ADDRESS_TO_LOGGABLE_STR(address);
    LOG_INFO("%s", ADDRESS_TO_LOGGABLE_CSTR(address));
    auto device = FindDeviceByAddress(address);
    if (device == nullptr) {
      LOG(WARNING) << "Skipping unknown device"
                   << ADDRESS_TO_LOGGABLE_STR(address);
      LOG_WARN("Skipping unknown device %s", ADDRESS_TO_LOGGABLE_CSTR(address));
      return;
    }

    if (status != BTM_SUCCESS) {
      LOG(ERROR) << "encryption failed"
                 << " status: " << status;
      LOG_ERROR("encryption failed. status: 0x%02x", status);

      BTA_GATTC_Close(device->conn_id);
      return;
+18 −9
Original line number Diff line number Diff line
@@ -460,6 +460,15 @@ class CsisClientTest : public ::testing::Test {
    CsisClient::AddFromStorage(address, storage_buf, true);
  }

  void InjectEncryptionEvent(const RawAddress& test_address, uint16_t conn_id) {
    tBTA_GATTC_ENC_CMPL_CB event_data = {
        .client_if = static_cast<tGATT_IF>(conn_id),
        .remote_bda = test_address,
    };

    gatt_callback(BTA_GATTC_ENC_CMPL_CB_EVT, (tBTA_GATTC*)&event_data);
  }

  void InjectConnectedEvent(const RawAddress& address, uint16_t conn_id) {
    tBTA_GATTC_OPEN event_data = {
        .status = GATT_SUCCESS,
@@ -526,17 +535,17 @@ class CsisClientTest : public ::testing::Test {
    gatt_callback(BTA_GATTC_CLOSE_EVT, (tBTA_GATTC*)&event_data);
  }

  void SetEncryptionResult(const RawAddress& address, bool success) {
    ON_CALL(btm_interface, GetSecurityFlagsByTransport(address, NotNull(), _))
        .WillByDefault(DoAll(SetArgPointee<1>(0), Return(true)));
    EXPECT_CALL(btm_interface,
                SetEncryption(address, _, NotNull(), _, BTM_BLE_SEC_ENCRYPT))
        .WillOnce(Invoke(
            [&success](const RawAddress& bd_addr, tBT_TRANSPORT transport,
  void SetEncryptionResult(const RawAddress& address, uint16_t conn_id,
                           bool success) {
    ON_CALL(btm_interface, BTM_IsEncrypted(address, _))
        .WillByDefault(DoAll(Return(success)));

    ON_CALL(btm_interface, SetEncryption(address, _, _, _, _))
        .WillByDefault(
            Invoke([&](const RawAddress& bd_addr, tBT_TRANSPORT transport,
                       tBTM_SEC_CALLBACK* p_callback, void* p_ref_data,
                       tBTM_BLE_SEC_ACT sec_act) -> tBTM_STATUS {
              p_callback(&bd_addr, transport, p_ref_data,
                         success ? BTM_SUCCESS : BTM_FAILED_ON_SECURITY);
              InjectEncryptionEvent(bd_addr, conn_id);
              return BTM_SUCCESS;
            }));
  }
+4 −16
Original line number Diff line number Diff line
@@ -1874,25 +1874,13 @@ class HasClientImpl : public HasClient {
    /* verify bond */
    if (BTM_IsEncrypted(device->addr, BT_TRANSPORT_LE)) {
      /* if link has been encrypted */
      if (device->isGattServiceValid()) {
        instance->OnEncrypted(*device);
      } else {
        BTA_GATTC_ServiceSearchRequest(device->conn_id,
                                       &kUuidHearingAccessService);
      }
      OnEncrypted(*device);
      return;
    }

    int result = BTM_SetEncryption(
        evt.remote_bda, BT_TRANSPORT_LE,
        [](const RawAddress* bd_addr, tBT_TRANSPORT transport, void* p_ref_data,
           tBTM_STATUS status) {
          if (instance)
            instance->OnLeEncryptionComplete(*bd_addr, status == BTM_SUCCESS);
        },
    int result = BTM_SetEncryption(device->addr, BT_TRANSPORT_LE, nullptr,
                                   nullptr, BTM_BLE_SEC_ENCRYPT);

    DLOG(INFO) << __func__ << ": Encryption request result: " << result;
    LOG_INFO("Encryption required. Request result: 0x%02x", result);
  }

  void OnGattDisconnected(const tBTA_GATTC_CLOSE& evt) {
+20 −17
Original line number Diff line number Diff line
@@ -654,6 +654,15 @@ class HasClientTestBase : public ::testing::Test {

    encryption_result = true;

    ON_CALL(btm_interface, SetEncryption(_, _, _, _, _))
        .WillByDefault(
            Invoke([this](const RawAddress& bd_addr, tBT_TRANSPORT transport,
                          tBTM_SEC_CALLBACK* p_callback, void* p_ref_data,
                          tBTM_BLE_SEC_ACT sec_act) -> tBTM_STATUS {
              InjectEncryptionEvent(bd_addr);
              return BTM_SUCCESS;
            }));

    MockCsisClient::SetMockInstanceForTesting(&mock_csis_client_module_);
    ON_CALL(mock_csis_client_module_, Get())
        .WillByDefault(Return(&mock_csis_client_module_));
@@ -868,26 +877,20 @@ class HasClientTestBase : public ::testing::Test {
    gatt_callback(BTA_GATTC_NOTIF_EVT, (tBTA_GATTC*)&event_data);
  }

  void InjectEncryptionEvent(const RawAddress& test_address) {
    tBTA_GATTC_ENC_CMPL_CB event_data = {
        .client_if = static_cast<tGATT_IF>(GetTestConnId(test_address)),
        .remote_bda = test_address,
    };

    gatt_callback(BTA_GATTC_ENC_CMPL_CB_EVT, (tBTA_GATTC*)&event_data);
  }

  void SetEncryptionResult(const RawAddress& address, bool success) {
    encryption_result = success;

    ON_CALL(btm_interface, BTM_IsEncrypted(address, _))
        .WillByDefault(Return(success));
    ON_CALL(btm_interface, GetSecurityFlagsByTransport(address, NotNull(), _))
        .WillByDefault(
            DoAll(SetArgPointee<1>(success ? BTM_SEC_FLAG_ENCRYPTED : 0),
                  Return(true)));
    if (!success) {
      EXPECT_CALL(btm_interface,
                  SetEncryption(address, _, NotNull(), _, BTM_BLE_SEC_ENCRYPT))
          .WillOnce(Invoke(
              [success](const RawAddress& bd_addr, tBT_TRANSPORT transport,
                        tBTM_SEC_CALLBACK* p_callback, void* p_ref_data,
                        tBTM_BLE_SEC_ACT sec_act) -> tBTM_STATUS {
                p_callback(&bd_addr, transport, p_ref_data,
                           success ? BTM_SUCCESS : BTM_FAILED_ON_SECURITY);
                return BTM_SUCCESS;
              }));
    }
        .WillByDefault(DoAll(Return(encryption_result)));
  }

  void InjectNotifyReadPresetResponse(uint16_t conn_id,