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

Commit 15e8595f authored by Myles Watson's avatar Myles Watson
Browse files

Move parsing of btm_sec_rmt_host_support_feat_evt

Bug: 301661850
Test: mma -j32
Change-Id: Iaf6e75802c05b46d70e011b41174d87cafbd6a1e
parent 3127750e
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -209,16 +209,10 @@ void bluetooth::shim::ACL_RemoteNameRequest(const RawAddress& addr,
      GetGdShimHandler()->BindOnce(
          [](RawAddress addr, uint64_t features) {
            static_assert(sizeof(features) == 8);
            auto addr_array = addr.ToArray();
            auto p = (uint8_t*)osi_malloc(addr_array.size() + sizeof(features));
            std::copy(addr_array.rbegin(), addr_array.rend(), p);
            for (int i = 0; i != sizeof(features); ++i) {
              p[addr_array.size() + i] = features & ((1 << 8) - 1);
              features >>= 8;
            }
            do_in_main_thread(
                FROM_HERE,
                base::BindOnce(btm_sec_rmt_host_support_feat_evt, p));
                base::BindOnce(btm_sec_rmt_host_support_feat_evt, addr,
                               static_cast<uint8_t>(features & 0xff)));
          },
          addr),
      GetGdShimHandler()->BindOnce(
+5 −8
Original line number Diff line number Diff line
@@ -2569,28 +2569,25 @@ void btm_sec_rmt_name_request_complete(const RawAddress* p_bd_addr,
 * Returns          void
 *
 ******************************************************************************/
void btm_sec_rmt_host_support_feat_evt(const uint8_t* p) {
void btm_sec_rmt_host_support_feat_evt(const RawAddress bd_addr,
                                       uint8_t features_0) {
  tBTM_SEC_DEV_REC* p_dev_rec;
  RawAddress bd_addr; /* peer address */
  BD_FEATURES features;

  STREAM_TO_BDADDR(bd_addr, p);
  p_dev_rec = btm_find_or_alloc_dev(bd_addr);

  LOG_INFO("Got btm_sec_rmt_host_support_feat_evt from %s",
           ADDRESS_TO_LOGGABLE_CSTR(bd_addr));

  LOG_VERBOSE("btm_sec_rmt_host_support_feat_evt  sm4: 0x%x  p[0]: 0x%x",
              p_dev_rec->sm4, p[0]);
              p_dev_rec->sm4, features_0);

  if (BTM_SEC_IS_SM4_UNKNOWN(p_dev_rec->sm4)) {
    p_dev_rec->sm4 = BTM_SM4_KNOWN;
    STREAM_TO_ARRAY(features, p, HCI_FEATURE_BYTES_PER_PAGE);
    if (HCI_SSP_HOST_SUPPORTED(features)) {
    if (HCI_SSP_HOST_SUPPORTED((std::array<uint8_t, 1>({features_0})))) {
      p_dev_rec->sm4 = BTM_SM4_TRUE;
    }
    LOG_VERBOSE("btm_sec_rmt_host_support_feat_evt sm4: 0x%x features[0]: 0x%x",
                p_dev_rec->sm4, features[0]);
                p_dev_rec->sm4, features_0);
  }
}

+2 −1
Original line number Diff line number Diff line
@@ -519,7 +519,8 @@ void btm_sec_rmt_name_request_complete(const RawAddress* p_bd_addr,
 * Returns          void
 *
 ******************************************************************************/
void btm_sec_rmt_host_support_feat_evt(const uint8_t* p);
void btm_sec_rmt_host_support_feat_evt(const RawAddress bd_addr,
                                       uint8_t features_0);

/*******************************************************************************
 *
+11 −1
Original line number Diff line number Diff line
@@ -97,6 +97,8 @@ static void btu_hcif_esco_connection_chg_evt(uint8_t* p);

static void btu_hcif_sec_pin_code_request(const uint8_t* p);
static void btu_hcif_sec_link_key_request(const uint8_t* p);
static void btu_hcif_sec_rmt_host_support_feat_evt(const uint8_t* p);
static void btu_hcif_proc_sp_req_evt(tBTM_SP_EVT event, const uint8_t* p);
static void btu_hcif_rem_oob_req(const uint8_t* p);
static void btu_hcif_simple_pair_complete(const uint8_t* p);
static void btu_hcif_proc_sp_req_evt(const tBTM_SP_EVT event, const uint8_t* p);
@@ -301,7 +303,7 @@ void btu_hcif_process_event(UNUSED_ATTR uint8_t controller_id,
      btm_pm_proc_ssr_evt(p, hci_evt_len);
      break;
    case HCI_RMT_HOST_SUP_FEAT_NOTIFY_EVT:
      btm_sec_rmt_host_support_feat_evt(p);
      btu_hcif_sec_rmt_host_support_feat_evt(p);
      break;
    case HCI_IO_CAPABILITY_REQUEST_EVT:
      btu_hcif_io_cap_request_evt(p);
@@ -1450,6 +1452,14 @@ void btu_hcif_simple_pair_complete(const uint8_t* p) {
  STREAM_TO_BDADDR(bd_addr, p);
  btm_simple_pair_complete(bd_addr, status);
}
void btu_hcif_sec_rmt_host_support_feat_evt(const uint8_t* p) {
  RawAddress bd_addr; /* peer address */
  uint8_t features_0;

  STREAM_TO_BDADDR(bd_addr, p);
  STREAM_TO_UINT8(features_0, p);
  btm_sec_rmt_host_support_feat_evt(bd_addr, features_0);
}
void btu_hcif_proc_sp_req_evt(tBTM_SP_EVT event, const uint8_t* p) {
  RawAddress bda;
  uint32_t value = 0;
+2 −1
Original line number Diff line number Diff line
@@ -42,7 +42,8 @@ void btm_sec_link_key_notification(const RawAddress& p_bda,
                                   const Octet16& link_key, uint8_t key_type);
void btm_sec_link_key_request(const RawAddress bda);
void btm_sec_pin_code_request(const RawAddress p_bda);
void btm_sec_rmt_host_support_feat_evt(const uint8_t* p);
void btm_sec_rmt_host_support_feat_evt(const RawAddress bd_addr,
                                       uint8_t features_0);
void btm_sec_rmt_name_request_complete(const RawAddress* bd_addr,
                                       const uint8_t* bd_name,
                                       tHCI_STATUS status);
Loading