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

Commit 5eead8cb authored by Jakub Pawłowski's avatar Jakub Pawłowski Committed by Gerrit Code Review
Browse files

Merge "Reset sec_dev_pending on Pairing retry for LE devices" into main

parents 5853aeac 5db08f20
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -846,8 +846,11 @@ void bta_dm_close_acl(const RawAddress& bd_addr, bool remove_dev,
        break;
    }
    if (index != bta_dm_cb.device_list.count) {
      if (remove_dev)
      if (remove_dev) {
        LOG_INFO("Setting remove_dev_pending for %s",
                 ADDRESS_TO_LOGGABLE_CSTR(bd_addr));
        bta_dm_cb.device_list.peer_device[index].remove_dev_pending = true;
      }
    } else {
      APPL_TRACE_ERROR("unknown device, remove ACL failed");
    }
@@ -2903,6 +2906,8 @@ static void bta_dm_acl_down(const RawAddress& bd_addr,
    }
  }
  if (remove_device) {
    LOG_INFO("remove_dev_pending actually removing %s",
             ADDRESS_TO_LOGGABLE_CSTR(bd_addr));
    bta_dm_process_remove_device_no_callback(bd_addr);
  }

@@ -3068,8 +3073,13 @@ static void bta_dm_delay_role_switch_cback(UNUSED_ATTR void* data) {
 ******************************************************************************/
static void bta_dm_reset_sec_dev_pending(const RawAddress& remote_bd_addr) {
  for (size_t i = 0; i < bta_dm_cb.device_list.count; i++) {
    if (bta_dm_cb.device_list.peer_device[i].peer_bdaddr == remote_bd_addr) {
      bta_dm_cb.device_list.peer_device[i].remove_dev_pending = false;
    auto& dev = bta_dm_cb.device_list.peer_device[i];
    if (dev.peer_bdaddr == remote_bd_addr) {
      if (dev.remove_dev_pending) {
        LOG_INFO("Clearing remove_dev_pending for %s",
                 ADDRESS_TO_LOGGABLE_CSTR(dev.peer_bdaddr));
        dev.remove_dev_pending = false;
      }
      return;
    }
  }
@@ -3096,8 +3106,11 @@ static void bta_dm_remove_sec_dev_entry(const RawAddress& remote_bd_addr) {
        __func__);
    BTM_SecClearSecurityFlags(remote_bd_addr);
    for (int i = 0; i < bta_dm_cb.device_list.count; i++) {
      if (bta_dm_cb.device_list.peer_device[i].peer_bdaddr == remote_bd_addr) {
        bta_dm_cb.device_list.peer_device[i].remove_dev_pending = TRUE;
      auto& dev = bta_dm_cb.device_list.peer_device[i];
      if (dev.peer_bdaddr == remote_bd_addr) {
        LOG_INFO("Setting remove_dev_pending for %s",
                 ADDRESS_TO_LOGGABLE_CSTR(dev.peer_bdaddr));
        dev.remove_dev_pending = TRUE;
        break;
      }
    }
@@ -3970,6 +3983,12 @@ static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, const RawAddress& bda,
      sec_event.ble_key.key_type = p_data->key.key_type;
      sec_event.ble_key.p_key_value = p_data->key.p_key_value;
      bta_dm_cb.p_sec_cback(BTA_DM_BLE_KEY_EVT, &sec_event);

      // Setting remove_dev_pending flag to false, where it will avoid deleting
      // the security device record when the ACL connection link goes down in
      // case of reconnection.
      if (bta_dm_cb.device_list.count) bta_dm_reset_sec_dev_pending(bda);

      break;

    case BTM_LE_COMPLT_EVT: