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

Commit ec9d51f1 authored by Liang Li's avatar Liang Li
Browse files

Set the initial local credits to 0 for offload RFCOMM socket

Flag: com.android.bluetooth.flags.socket_settings_api
Bug: 342012881
Bug: 374358112
Test: m com.android.btservices
Change-Id: I05d5407d3cf5030037b46d5db3c9a48a4a1c0f48
parent 3d9c5c5f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -254,7 +254,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_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
              BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT, RfcommCfgInfo{});
      if (status == PORT_SUCCESS) {
        bta_ag_setup_port(p_scb, p_scb->serv_handle[i]);
      } else {
@@ -331,7 +331,7 @@ void bta_ag_rfc_do_open(tBTA_AG_SCB* p_scb, const tBTA_AG_DATA& data) {
  int status = RFCOMM_CreateConnectionWithSecurity(
          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_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
          BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT, RfcommCfgInfo{});
  log::verbose("p_scb=0x{}, conn_handle={}, mgmt_cback_index={}, status={}", std::format_ptr(p_scb),
               p_scb->conn_handle, management_callback_index, status);
  if (status == PORT_SUCCESS) {
+5 −5
Original line number Diff line number Diff line
@@ -188,7 +188,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,
          BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT);
          BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT, RfcommCfgInfo{});

  log::verbose("started rfcomm server with handle {}", bta_hf_client_cb_arr.serv_handle);

@@ -240,10 +240,10 @@ void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA* p_data) {
    return;
  }

  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,
                                          BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT) == PORT_SUCCESS) {
  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,
              BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT, RfcommCfgInfo{}) == PORT_SUCCESS) {
    bta_hf_client_setup_port(client_cb->conn_handle);
    log::verbose("bta_hf_client_rfc_do_open : conn_handle = {}", client_cb->conn_handle);
  } else {
+4 −2
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include "internal_include/bt_target.h"
#include "stack/include/bt_hdr.h"
#include "stack/include/l2cap_types.h"
#include "stack/include/port_api.h"
#include "stack/include/rfcdefs.h"
#include "types/bluetooth/uuid.h"
#include "types/raw_address.h"
@@ -697,7 +698,7 @@ tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, BT_HDR* msg, u
 ******************************************************************************/
tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, uint8_t remote_scn,
                                   const RawAddress& peer_bd_addr, tBTA_JV_RFCOMM_CBACK* p_cback,
                                   uint32_t rfcomm_slot_id);
                                   uint32_t rfcomm_slot_id, RfcommCfgInfo cfg);

/*******************************************************************************
 *
@@ -727,7 +728,8 @@ tBTA_JV_STATUS BTA_JvRfcommClose(uint32_t handle, uint32_t rfcomm_slot_id);
 *
 ******************************************************************************/
tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, uint8_t local_scn, uint8_t max_session,
                                       tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id);
                                       tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id,
                                       RfcommCfgInfo cfg);

/*******************************************************************************
 *
+12 −9
Original line number Diff line number Diff line
@@ -1511,7 +1511,8 @@ static void bta_jv_port_event_cl_cback(uint32_t code, uint16_t port_handle) {

/* Client initiates an RFCOMM connection */
void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, uint8_t remote_scn, const RawAddress& peer_bd_addr,
                           tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id) {
                           tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id,
                           RfcommCfgInfo cfg) {
  uint16_t handle = 0;
  uint32_t event_mask = BTA_JV_RFC_EV_MASK;
  PortSettings port_settings;
@@ -1535,9 +1536,9 @@ void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, uint8_t remote_scn, const RawAddre
            0);
  }

  if (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_mask) != PORT_SUCCESS) {
  if (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_mask, cfg) != PORT_SUCCESS) {
    log::error("RFCOMM_CreateConnection failed");
    bta_jv.rfc_cl_init.status = tBTA_JV_STATUS::FAILURE;
  } else {
@@ -1796,9 +1797,10 @@ static tBTA_JV_PCB* bta_jv_add_rfc_port(tBTA_JV_RFC_CB* p_cb, tBTA_JV_PCB* p_pcb
        log::error("RFCOMM_CreateConnection failed: invalid port_handle");
      }

      if (RFCOMM_CreateConnectionWithSecurity(
                  p_cb->sec_id, p_cb->scn, true, BTA_JV_DEF_RFC_MTU, RawAddress::kAny,
                  &(p_cb->rfc_hdl[si]), bta_jv_port_mgmt_sr_cback, sec_mask) == PORT_SUCCESS) {
      if (RFCOMM_CreateConnectionWithSecurity(p_cb->sec_id, p_cb->scn, true, BTA_JV_DEF_RFC_MTU,
                                              RawAddress::kAny, &(p_cb->rfc_hdl[si]),
                                              bta_jv_port_mgmt_sr_cback, sec_mask,
                                              RfcommCfgInfo{}) == PORT_SUCCESS) {
        p_cb->curr_sess++;
        p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[si] - 1];
        p_pcb->state = BTA_JV_ST_SR_LISTEN;
@@ -1842,7 +1844,8 @@ static tBTA_JV_PCB* bta_jv_add_rfc_port(tBTA_JV_RFC_CB* p_cb, tBTA_JV_PCB* p_pcb

/* waits for an RFCOMM client to connect */
void bta_jv_rfcomm_start_server(tBTA_SEC sec_mask, uint8_t local_scn, uint8_t max_session,
                                tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id) {
                                tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id,
                                RfcommCfgInfo cfg) {
  uint16_t handle = 0;
  uint32_t event_mask = BTA_JV_RFC_EV_MASK;
  PortSettings port_settings;
@@ -1856,7 +1859,7 @@ void bta_jv_rfcomm_start_server(tBTA_SEC sec_mask, uint8_t local_scn, uint8_t ma
  do {
    if (RFCOMM_CreateConnectionWithSecurity(0, local_scn, true, BTA_JV_DEF_RFC_MTU,
                                            RawAddress::kAny, &handle, bta_jv_port_mgmt_sr_cback,
                                            sec_mask) != PORT_SUCCESS) {
                                            sec_mask, cfg) != PORT_SUCCESS) {
      log::error("RFCOMM_CreateConnection failed");
      break;
    }
+5 −4
Original line number Diff line number Diff line
@@ -415,7 +415,7 @@ tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, BT_HDR* msg, u
 ******************************************************************************/
tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, uint8_t remote_scn,
                                   const RawAddress& peer_bd_addr, tBTA_JV_RFCOMM_CBACK* p_cback,
                                   uint32_t rfcomm_slot_id) {
                                   uint32_t rfcomm_slot_id, RfcommCfgInfo cfg) {
  log::verbose("remote_scn:{}, peer_bd_addr:{}, rfcomm_slot_id:{}", remote_scn, peer_bd_addr,
               rfcomm_slot_id);

@@ -424,7 +424,7 @@ tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, uint8_t remote_scn,
  }

  do_in_main_thread(Bind(&bta_jv_rfcomm_connect, sec_mask, remote_scn, peer_bd_addr, p_cback,
                         rfcomm_slot_id));
                         rfcomm_slot_id, cfg));
  return tBTA_JV_STATUS::SUCCESS;
}

@@ -469,7 +469,8 @@ tBTA_JV_STATUS BTA_JvRfcommClose(uint32_t handle, uint32_t rfcomm_slot_id) {
 *
 ******************************************************************************/
tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, uint8_t local_scn, uint8_t max_session,
                                       tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id) {
                                       tBTA_JV_RFCOMM_CBACK* p_cback, uint32_t rfcomm_slot_id,
                                       RfcommCfgInfo cfg) {
  log::verbose("local_scn:{}, rfcomm_slot_id:{}", local_scn, rfcomm_slot_id);

  if (p_cback == NULL) {
@@ -485,7 +486,7 @@ tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, uint8_t local_scn, uin
  }

  do_in_main_thread(Bind(&bta_jv_rfcomm_start_server, sec_mask, local_scn, max_session, p_cback,
                         rfcomm_slot_id));
                         rfcomm_slot_id, cfg));
  return tBTA_JV_STATUS::SUCCESS;
}

Loading