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

Commit 2a4e4f21 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I0aa05e5b,I4c2bc679,I2b0a15e8,I8aabfbc4,Ifc8114d9, ...

* changes:
  Remove unused code in rfc_int.h
  Remove sec_id related code in RFCOMM
  Move rfcomm security requirement to rfcomm module
  Clear RFCOMM security when done
  Get rid of p_cur_service in dev_rec
  Legacy RFCOMM: Use the new security record
  Introduce BTM_SetRfcommSecurity
parents a3728562 012d5f0e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ void bta_ag_start_servers(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK services) {
      int status = RFCOMM_CreateConnectionWithSecurity(
          bta_ag_uuid[i], bta_ag_cb.profile[i].scn, true, BTA_AG_MTU,
          RawAddress::kAny, &(p_scb->serv_handle[i]),
          bta_ag_mgmt_cback_tbl[management_callback_index], bta_ag_sec_id[i],
          bta_ag_mgmt_cback_tbl[management_callback_index],
          BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
      if (status == PORT_SUCCESS) {
        bta_ag_setup_port(p_scb, p_scb->serv_handle[i]);
@@ -335,7 +335,6 @@ void bta_ag_rfc_do_open(tBTA_AG_SCB* p_scb, const tBTA_AG_DATA& data) {
      bta_ag_uuid[p_scb->conn_service], p_scb->peer_scn, false, BTA_AG_MTU,
      p_scb->peer_addr, &(p_scb->conn_handle),
      bta_ag_mgmt_cback_tbl[management_callback_index],
      bta_ag_sec_id[p_scb->conn_service],
      BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
  APPL_TRACE_DEBUG(
      "%s: p_scb=0x%08x, conn_handle=%d, mgmt_cback_index=%d,"
+2 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#include "sdp_api.h"
#include "stack/btm/btm_sec.h"
#include "stack/include/btu.h"
#include "stack/include/port_api.h"
#include "utl.h"

using bluetooth::Uuid;
@@ -273,7 +274,7 @@ void bta_ag_del_records(tBTA_AG_SCB* p_scb) {
        bta_ag_cb.profile[i].sdp_handle = 0;
      }
      BTM_FreeSCN(bta_ag_cb.profile[i].scn);
      BTM_SecClrService(bta_ag_sec_id[i]);
      RFCOMM_ClearSecurityRecord(bta_ag_cb.profile[i].scn);
      bta_sys_remove_uuid(bta_ag_uuid[i]);
    }
  }
+2 −3
Original line number Diff line number Diff line
@@ -185,8 +185,7 @@ void bta_hf_client_start_server() {
  port_status = RFCOMM_CreateConnectionWithSecurity(
      UUID_SERVCLASS_HF_HANDSFREE, bta_hf_client_cb_arr.scn, true,
      BTA_HF_CLIENT_MTU, RawAddress::kAny, &(bta_hf_client_cb_arr.serv_handle),
      bta_hf_client_mgmt_cback, BTM_SEC_SERVICE_HF_HANDSFREE,
      BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
      bta_hf_client_mgmt_cback, BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);

  APPL_TRACE_DEBUG("%s: started rfcomm server with handle %d", __func__,
                   bta_hf_client_cb_arr.serv_handle);
@@ -243,7 +242,7 @@ void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA* p_data) {
  if (RFCOMM_CreateConnectionWithSecurity(
          UUID_SERVCLASS_HF_HANDSFREE, client_cb->peer_scn, false,
          BTA_HF_CLIENT_MTU, client_cb->peer_addr, &(client_cb->conn_handle),
          bta_hf_client_mgmt_cback, BTM_SEC_SERVICE_HF_HANDSFREE,
          bta_hf_client_mgmt_cback,
          BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT) == PORT_SUCCESS) {
    bta_hf_client_setup_port(client_cb->conn_handle);
    APPL_TRACE_DEBUG("bta_hf_client_rfc_do_open : conn_handle = %d",
+2 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@
#include "osi/include/osi.h"
#include "osi/include/properties.h"
#include "stack/btm/btm_sec.h"
#include "stack/include/port_api.h"

using bluetooth::Uuid;

@@ -205,7 +206,7 @@ void bta_hf_client_del_record(tBTA_HF_CLIENT_CB_ARR* client_cb) {
    SDP_DeleteRecord(client_cb->sdp_handle);
    client_cb->sdp_handle = 0;
    BTM_FreeSCN(client_cb->scn);
    BTM_SecClrService(BTM_SEC_SERVICE_HF_HANDSFREE);
    RFCOMM_ClearSecurityRecord(client_cb->scn);
    bta_sys_remove_uuid(UUID_SERVCLASS_HF_HANDSFREE);
  }
}
+7 −34
Original line number Diff line number Diff line
@@ -292,14 +292,14 @@ static tBTA_JV_STATUS bta_jv_free_rfc_cb(tBTA_JV_RFC_CB* p_cb,
    p_pcb->handle = 0;
    p_cb->curr_sess--;
    if (p_cb->curr_sess == 0) {
      RFCOMM_ClearSecurityRecord(p_cb->scn);
      p_cb->scn = 0;
      bta_jv_free_sec_id(&p_cb->sec_id);
      p_cb->p_cback = NULL;
      p_cb->handle = 0;
      p_cb->curr_sess = -1;
    }
    if (remove_server) {
      bta_jv_free_sec_id(&p_cb->sec_id);
      RFCOMM_ClearSecurityRecord(p_cb->scn);
    }
  }
  return status;
@@ -1271,22 +1271,13 @@ void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, uint8_t remote_scn,
  uint32_t event_mask = BTA_JV_RFC_EV_MASK;
  tPORT_STATE port_state;

  uint8_t sec_id = bta_jv_alloc_sec_id();

  tBTA_JV_RFCOMM_CL_INIT evt_data;
  memset(&evt_data, 0, sizeof(evt_data));
  evt_data.sec_id = sec_id;
  evt_data.status = BTA_JV_SUCCESS;
  if (0 == sec_id) {
    evt_data.status = BTA_JV_FAILURE;
    LOG(ERROR) << __func__ << ": sec_id=" << +sec_id
               << " is zero, remote_scn:" << +remote_scn;
  }

  if (evt_data.status == BTA_JV_SUCCESS &&
      RFCOMM_CreateConnectionWithSecurity(
          UUID_SERVCLASS_SERIAL_PORT, remote_scn, false, BTA_JV_DEF_RFC_MTU,
          peer_bd_addr, &handle, bta_jv_port_mgmt_cl_cback, sec_id,
          peer_bd_addr, &handle, bta_jv_port_mgmt_cl_cback,
          sec_mask) != PORT_SUCCESS) {
    LOG(ERROR) << __func__ << ": RFCOMM_CreateConnection failed";
    evt_data.status = BTA_JV_FAILURE;
@@ -1296,7 +1287,6 @@ void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, uint8_t remote_scn,
    tBTA_JV_RFC_CB* p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb);
    if (p_cb) {
      p_cb->p_cback = p_cback;
      p_cb->sec_id = sec_id;
      p_cb->scn = 0;
      p_pcb->state = BTA_JV_ST_CL_OPENING;
      p_pcb->rfcomm_slot_id = rfcomm_slot_id;
@@ -1322,7 +1312,7 @@ void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, uint8_t remote_scn,
  bta_jv.rfc_cl_init = evt_data;
  p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, &bta_jv, rfcomm_slot_id);
  if (bta_jv.rfc_cl_init.status == BTA_JV_FAILURE) {
    if (sec_id) bta_jv_free_sec_id(&sec_id);
    RFCOMM_ClearSecurityRecord(remote_scn);
    if (handle) RFCOMM_RemoveConnection(handle);
  }
}
@@ -1364,8 +1354,6 @@ void bta_jv_rfcomm_close(uint32_t handle, uint32_t rfcomm_slot_id) {

  if (!find_rfc_pcb(rfcomm_slot_id, &p_cb, &p_pcb)) return;
  bta_jv_free_rfc_cb(p_cb, p_pcb);
  VLOG(2) << __func__ << ": sec id in use=" << get_sec_id_used()
          << ", rfc_cb in use=" << get_rfc_cb_used();
}

/*******************************************************************************
@@ -1574,28 +1562,17 @@ void bta_jv_rfcomm_start_server(tBTA_SEC sec_mask, uint8_t local_scn,
  uint16_t handle = 0;
  uint32_t event_mask = BTA_JV_RFC_EV_MASK;
  tPORT_STATE port_state;
  uint8_t sec_id = 0;
  tBTA_JV_RFC_CB* p_cb = NULL;
  tBTA_JV_PCB* p_pcb;
  tBTA_JV_RFCOMM_START evt_data;

  memset(&evt_data, 0, sizeof(evt_data));
  evt_data.status = BTA_JV_FAILURE;
  VLOG(2) << __func__ << ": sec id in use=" << get_sec_id_used()
          << ", rfc_cb in use=" << get_rfc_cb_used();

  do {
    sec_id = bta_jv_alloc_sec_id();

    if (0 == sec_id) {
      LOG(ERROR) << __func__ << ": run out of sec_id";
      break;
    }

    if (RFCOMM_CreateConnectionWithSecurity(
            sec_id, local_scn, true, BTA_JV_DEF_RFC_MTU, RawAddress::kAny,
            &handle, bta_jv_port_mgmt_sr_cback, sec_id,
            sec_mask) != PORT_SUCCESS) {
            0, local_scn, true, BTA_JV_DEF_RFC_MTU, RawAddress::kAny, &handle,
            bta_jv_port_mgmt_sr_cback, sec_mask) != PORT_SUCCESS) {
      LOG(ERROR) << __func__ << ": RFCOMM_CreateConnection failed";
      break;
    }
@@ -1608,13 +1585,11 @@ void bta_jv_rfcomm_start_server(tBTA_SEC sec_mask, uint8_t local_scn,

    p_cb->max_sess = max_session;
    p_cb->p_cback = p_cback;
    p_cb->sec_id = sec_id;
    p_cb->scn = local_scn;
    p_pcb->state = BTA_JV_ST_SR_LISTEN;
    p_pcb->rfcomm_slot_id = rfcomm_slot_id;
    evt_data.status = BTA_JV_SUCCESS;
    evt_data.handle = p_cb->handle;
    evt_data.sec_id = sec_id;
    evt_data.use_co = true;

    PORT_ClearKeepHandleFlag(handle);
@@ -1633,7 +1608,7 @@ void bta_jv_rfcomm_start_server(tBTA_SEC sec_mask, uint8_t local_scn,
  if (bta_jv.rfc_start.status == BTA_JV_SUCCESS) {
    PORT_SetDataCOCallback(handle, bta_jv_port_data_co_cback);
  } else {
    if (sec_id) bta_jv_free_sec_id(&sec_id);
    RFCOMM_ClearSecurityRecord(local_scn);
    if (handle) RFCOMM_RemoveConnection(handle);
  }
}
@@ -1653,8 +1628,6 @@ void bta_jv_rfcomm_stop_server(uint32_t handle, uint32_t rfcomm_slot_id) {
  VLOG(2) << __func__ << ": p_pcb=" << p_pcb
          << ", p_pcb->port_handle=" << p_pcb->port_handle;
  bta_jv_free_rfc_cb(p_cb, p_pcb);
  VLOG(2) << __func__ << ": sec id in use=" << get_sec_id_used()
          << ", rfc_cb in use=" << get_rfc_cb_used();
}

/* write data to an RFCOMM connection */
Loading