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

Commit 7c7e30f4 authored by Himanshu Rawat's avatar Himanshu Rawat Committed by Gerrit Code Review
Browse files

Merge "Prioritize strict address match over RPA resolution" into main

parents 98bc7bac 44c46b10
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -343,7 +343,7 @@ tBTM_SEC_DEV_REC* btm_find_dev_by_handle(uint16_t handle) {
  return NULL;
}

static bool is_address_equal(void* data, void* context) {
static bool is_not_same_identity_or_pseudo_address(void* data, void* context) {
  tBTM_SEC_DEV_REC* p_dev_rec = static_cast<tBTM_SEC_DEV_REC*>(data);
  const RawAddress* bd_addr = ((RawAddress*)context);

@@ -355,12 +355,18 @@ static bool is_address_equal(void* data, void* context) {
    return false;
  }

  return true;
}

static bool is_rpa_unresolvable(void* data, void* context) {
  tBTM_SEC_DEV_REC* p_dev_rec = static_cast<tBTM_SEC_DEV_REC*>(data);
  const RawAddress* bd_addr = ((RawAddress*)context);

  if (btm_ble_addr_resolvable(*bd_addr, p_dev_rec)) {
    return false;
  }
  return true;
}

/*******************************************************************************
 *
 * Function         btm_find_dev
@@ -376,12 +382,19 @@ tBTM_SEC_DEV_REC* btm_find_dev(const RawAddress& bd_addr) {
    return nullptr;
  }

  list_node_t* n = list_foreach(btm_sec_cb.sec_dev_rec, is_address_equal, (void*)&bd_addr);
  if (n) {
  // Find by matching identity address or pseudo address.
  list_node_t* n = list_foreach(btm_sec_cb.sec_dev_rec, is_not_same_identity_or_pseudo_address,
                                (void*)&bd_addr);
  // If not found by matching identity address or pseudo address, find by RPA
  if (n == nullptr) {
    n = list_foreach(btm_sec_cb.sec_dev_rec, is_rpa_unresolvable, (void*)&bd_addr);
  }

  if (n != nullptr) {
    return static_cast<tBTM_SEC_DEV_REC*>(list_node(n));
  }

  return NULL;
  return nullptr;
}

static bool has_lenc_and_address_is_equal(void* data, void* context) {
@@ -390,7 +403,7 @@ static bool has_lenc_and_address_is_equal(void* data, void* context) {
    return true;
  }

  return is_address_equal(data, context);
  return is_not_same_identity_or_pseudo_address(data, context);
}

/*******************************************************************************