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

Commit 4cc51417 authored by Hui Peng's avatar Hui Peng
Browse files

[Invisalign2] Use tBTM_SEC_CALLBACK instead of tL2CAP_SEC_CBACK

Type of security Callbacks for for ble and br/edr are currently
different, although very close. This change unifies them.

Bug: 301661850
Test: mma packages/modules/Bluetooth
Change-Id: Ic5d57baa9be58384dca454318d8253bf7f0a8000
parent 446c80bc
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -1558,24 +1558,23 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport,
    }

    if (status != BTM_SUCCESS) {
      (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status);
      (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status);
      osi_free(p_buf);
    } else {
      if (sec_act == BTM_SEC_ENCRYPT_MITM) {
        if (BTM_IsLinkKeyAuthed(p_bda, transport))
          (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data,
          (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data,
                                 status);
        else {
          LOG_VERBOSE("%s MITM Protection Not present", __func__);
          (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data,
          (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data,
                                 BTM_FAILED_ON_SECURITY);
        }
      } else {
        LOG_VERBOSE("%s MITM Protection not required sec_act = %d", __func__,
                    p_lcb->sec_act);

        (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data,
                               status);
        (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status);
      }
      osi_free(p_buf);
    }
@@ -1589,7 +1588,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport,
    p_buf = (tL2CAP_SEC_DATA*)fixed_queue_dequeue(p_lcb->le_sec_pending_q);

    if (status != BTM_SUCCESS) {
      (*(p_buf->p_callback))(p_bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status);
      (*(p_buf->p_callback))(bda, BT_TRANSPORT_LE, p_buf->p_ref_data, status);
      osi_free(p_buf);
    }
    else {
@@ -1614,7 +1613,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport,
 ******************************************************************************/
tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr,
                                           uint16_t psm, bool is_originator,
                                           tL2CAP_SEC_CBACK* p_callback,
                                           tBTM_SEC_CALLBACK* p_callback,
                                           void* p_ref_data) {
  tL2CAP_LE_RESULT_CODE result;
  tL2C_LCB* p_lcb = NULL;
@@ -1628,7 +1627,7 @@ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr,

  if (!p_lcb) {
    LOG_ERROR("Security check for unknown device");
    p_callback(bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_UNKNOWN_ADDR);
    p_callback(&bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_UNKNOWN_ADDR);
    return L2CAP_LE_RESULT_NO_RESOURCES;
  }

@@ -1636,7 +1635,7 @@ tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr,
      (tL2CAP_SEC_DATA*)osi_malloc((uint16_t)sizeof(tL2CAP_SEC_DATA));
  if (!p_buf) {
    LOG_ERROR("No resources for connection");
    p_callback(bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_NO_RESOURCES);
    p_callback(&bd_addr, BT_TRANSPORT_LE, p_ref_data, BTM_NO_RESOURCES);
    return L2CAP_LE_RESULT_NO_RESOURCES;
  }

+4 −4
Original line number Diff line number Diff line
@@ -224,7 +224,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) {
      if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) {
        p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
        l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
                             true, &l2c_link_sec_comp2, p_ccb);
                             true, &l2c_link_sec_comp, p_ccb);
      } else {
        p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
        btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr,
@@ -252,7 +252,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) {
      if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) {
        p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
        l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
                             true, &l2c_link_sec_comp2, p_ccb);
                             true, &l2c_link_sec_comp, p_ccb);
      } else {
        if (!BTM_SetLinkPolicyActiveMode(p_ccb->p_lcb->remote_bd_addr)) {
          LOG_WARN("Unable to set link policy active");
@@ -311,7 +311,7 @@ static void l2c_csm_closed(tL2C_CCB* p_ccb, tL2CEVT event, void* p_data) {
        p_ccb->chnl_state = CST_TERM_W4_SEC_COMP;
        tL2CAP_LE_RESULT_CODE result = l2ble_sec_access_req(
            p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm, false,
            &l2c_link_sec_comp2, p_ccb);
            &l2c_link_sec_comp, p_ccb);

        switch (result) {
          case L2CAP_LE_RESULT_INSUFFICIENT_AUTHORIZATION:
@@ -408,7 +408,7 @@ static void l2c_csm_orig_w4_sec_comp(tL2C_CCB* p_ccb, tL2CEVT event,
    case L2CEVT_LP_CONNECT_CFM:  /* Link came up         */
      if (p_ccb->p_lcb->transport == BT_TRANSPORT_LE) {
        l2ble_sec_access_req(p_ccb->p_lcb->remote_bd_addr, p_ccb->p_rcb->psm,
                             false, &l2c_link_sec_comp2, p_ccb);
                             false, &l2c_link_sec_comp, p_ccb);
      } else {
        btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr,
                                 p_ccb->p_rcb->psm, true, &l2c_link_sec_comp,
+3 −6
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
#include "osi/include/fixed_queue.h"
#include "osi/include/list.h"
#include "stack/include/bt_hdr.h"
#include "stack/include/btm_sec_api_types.h"
#include "stack/include/hci_error_code.h"
#include "types/hci_role.h"
#include "types/raw_address.h"
@@ -271,15 +272,11 @@ typedef struct {
#define L2CAP_CBB_DEFAULT_DATA_RATE_BUFF_QUOTA 100
#endif

typedef void(tL2CAP_SEC_CBACK)(const RawAddress& bd_addr,
                               tBT_TRANSPORT trasnport, void* p_ref_data,
                               tBTM_STATUS result);

typedef struct {
  uint16_t psm;
  tBT_TRANSPORT transport;
  bool is_originator;
  tL2CAP_SEC_CBACK* p_callback;
  tBTM_SEC_CALLBACK* p_callback;
  void* p_ref_data;
} tL2CAP_SEC_DATA;

@@ -873,7 +870,7 @@ void l2cble_send_peer_disc_req(tL2C_CCB* p_ccb);
void l2cble_send_flow_control_credit(tL2C_CCB* p_ccb, uint16_t credit_value);
tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr,
                                           uint16_t psm, bool is_originator,
                                           tL2CAP_SEC_CBACK* p_callback,
                                           tBTM_SEC_CALLBACK* p_callback,
                                           void* p_ref_data);

void l2cble_update_data_length(tL2C_LCB* p_lcb);
+1 −1
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ void l2cu_release_lcb(tL2C_LCB* p_lcb) {
      tL2CAP_SEC_DATA* p_buf =
          (tL2CAP_SEC_DATA*)fixed_queue_try_dequeue(p_lcb->le_sec_pending_q);
      if (p_buf->p_callback)
        p_buf->p_callback(p_lcb->remote_bd_addr, p_lcb->transport,
        p_buf->p_callback(&p_lcb->remote_bd_addr, p_lcb->transport,
                          p_buf->p_ref_data, BTM_DEV_RESET);
      osi_free(p_buf);
    }
+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ void l2cble_sec_comp(const RawAddress* bda, tBT_TRANSPORT transport,
}
tL2CAP_LE_RESULT_CODE l2ble_sec_access_req(const RawAddress& bd_addr,
                                           uint16_t psm, bool is_originator,
                                           tL2CAP_SEC_CBACK* p_callback,
                                           tBTM_SEC_CALLBACK* p_callback,
                                           void* p_ref_data) {
  inc_func_call_count(__func__);
  return test::mock::stack_l2cap_ble::l2ble_sec_access_req(
Loading