From aec9dadc2ef7388c2fcb03f37a3d35479fed0d7d Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Mon, 28 Sep 2020 12:20:19 -0700 Subject: [PATCH] Include initial remote config in pL2CA_ConfigCfm_Cb So we don't need to send a separate pL2CA_ConfigInd_Cb. Bug: 159815595 Tag: #refactor Test: compile & verify basic functions working Change-Id: I75dafa4bc38a1c5a7773db6be5665b30ad88b006 --- main/shim/l2cap.cc | 12 ++---------- stack/avct/avct_l2c.cc | 8 ++++++-- stack/avct/avct_l2c_br.cc | 8 ++++++-- stack/avdt/avdt_l2c.cc | 8 ++++++-- stack/bnep/bnep_main.cc | 23 +++++------------------ stack/gap/gap_conn.cc | 8 ++++++-- stack/gatt/gatt_main.cc | 8 ++++++-- stack/hid/hidd_conn.cc | 8 ++++++-- stack/hid/hidh_conn.cc | 8 ++++++-- stack/include/l2c_api.h | 3 ++- stack/l2cap/l2c_csm.cc | 5 ++--- stack/rfcomm/rfc_l2cap_if.cc | 8 ++++++-- stack/sdp/sdp_main.cc | 8 ++++++-- stack/test/rfcomm/stack_rfcomm_test.cc | 6 +++--- 14 files changed, 68 insertions(+), 53 deletions(-) diff --git a/main/shim/l2cap.cc b/main/shim/l2cap.cc index 006bd23a8..e7a1775c0 100644 --- a/main/shim/l2cap.cc +++ b/main/shim/l2cap.cc @@ -270,12 +270,8 @@ void bluetooth::shim::legacy::L2cap::OnLocalInitiatedConnectionCreated( tL2CAP_CFG_INFO cfg_info{}; do_in_main_thread( FROM_HERE, - base::Bind(classic_.Callbacks(CidToPsm(cid)).pL2CA_ConfigInd_Cb, cid, - base::Unretained(&cfg_info))); - do_in_main_thread( - FROM_HERE, base::Bind(classic_.Callbacks(CidToPsm(cid)).pL2CA_ConfigCfm_Cb, cid, - L2CAP_CFG_OK)); + L2CAP_INITIATOR_LOCAL, base::Unretained(&cfg_info))); } else { LOG_DEBUG("Connection Closed before presentation to upper layer"); @@ -310,12 +306,8 @@ void bluetooth::shim::legacy::L2cap::OnRemoteInitiatedConnectionCreated( tL2CAP_CFG_INFO cfg_info{}; do_in_main_thread( FROM_HERE, - base::Bind(classic_.Callbacks(CidToPsm(cid)).pL2CA_ConfigInd_Cb, cid, - base::Unretained(&cfg_info))); - do_in_main_thread( - FROM_HERE, base::Bind(classic_.Callbacks(CidToPsm(cid)).pL2CA_ConfigCfm_Cb, cid, - L2CAP_CFG_OK)); + L2CAP_INITIATOR_REMOTE, base::Unretained(&cfg_info))); } bool bluetooth::shim::legacy::L2cap::Write(uint16_t cid, BT_HDR* bt_hdr) { diff --git a/stack/avct/avct_l2c.cc b/stack/avct/avct_l2c.cc index 1c910a4c5..fd7af8102 100644 --- a/stack/avct/avct_l2c.cc +++ b/stack/avct/avct_l2c.cc @@ -34,7 +34,8 @@ void avct_l2c_connect_ind_cback(const RawAddress& bd_addr, uint16_t lcid, uint16_t psm, uint8_t id); void avct_l2c_connect_cfm_cback(uint16_t lcid, uint16_t result); -void avct_l2c_config_cfm_cback(uint16_t lcid, uint16_t result); +void avct_l2c_config_cfm_cback(uint16_t lcid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); void avct_l2c_config_ind_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg); void avct_l2c_disconnect_ind_cback(uint16_t lcid, bool ack_needed); void avct_l2c_congestion_ind_cback(uint16_t lcid, bool is_congested); @@ -219,7 +220,10 @@ void avct_l2c_connect_cfm_cback(uint16_t lcid, uint16_t result) { * Returns void * ******************************************************************************/ -void avct_l2c_config_cfm_cback(uint16_t lcid, uint16_t initiator) { +void avct_l2c_config_cfm_cback(uint16_t lcid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + avct_l2c_config_ind_cback(lcid, p_cfg); + tAVCT_LCB* p_lcb; /* look up lcb for this channel */ diff --git a/stack/avct/avct_l2c_br.cc b/stack/avct/avct_l2c_br.cc index 7833bcfde..e8e999477 100644 --- a/stack/avct/avct_l2c_br.cc +++ b/stack/avct/avct_l2c_br.cc @@ -35,7 +35,8 @@ void avct_l2c_br_connect_ind_cback(const RawAddress& bd_addr, uint16_t lcid, uint16_t psm, uint8_t id); void avct_l2c_br_connect_cfm_cback(uint16_t lcid, uint16_t result); -void avct_l2c_br_config_cfm_cback(uint16_t lcid, uint16_t result); +void avct_l2c_br_config_cfm_cback(uint16_t lcid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); void avct_l2c_br_config_ind_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg); void avct_l2c_br_disconnect_ind_cback(uint16_t lcid, bool ack_needed); void avct_l2c_br_congestion_ind_cback(uint16_t lcid, bool is_congested); @@ -151,7 +152,10 @@ void avct_l2c_br_connect_cfm_cback(uint16_t lcid, uint16_t result) { * Returns void * ******************************************************************************/ -void avct_l2c_br_config_cfm_cback(uint16_t lcid, uint16_t initiator) { +void avct_l2c_br_config_cfm_cback(uint16_t lcid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + avct_l2c_br_config_ind_cback(lcid, p_cfg); + tAVCT_BCB* p_lcb; /* look up lcb for this channel */ diff --git a/stack/avdt/avdt_l2c.cc b/stack/avdt/avdt_l2c.cc index 3a6550aab..24e99803c 100644 --- a/stack/avdt/avdt_l2c.cc +++ b/stack/avdt/avdt_l2c.cc @@ -37,7 +37,8 @@ void avdt_l2c_connect_ind_cback(const RawAddress& bd_addr, uint16_t lcid, uint16_t psm, uint8_t id); void avdt_l2c_connect_cfm_cback(uint16_t lcid, uint16_t result); -void avdt_l2c_config_cfm_cback(uint16_t lcid, uint16_t result); +void avdt_l2c_config_cfm_cback(uint16_t lcid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); void avdt_l2c_config_ind_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg); void avdt_l2c_disconnect_ind_cback(uint16_t lcid, bool ack_needed); void avdt_l2c_congestion_ind_cback(uint16_t lcid, bool is_congested); @@ -286,7 +287,10 @@ void avdt_l2c_connect_cfm_cback(uint16_t lcid, uint16_t result) { * Returns void * ******************************************************************************/ -void avdt_l2c_config_cfm_cback(uint16_t lcid, uint16_t initiator) { +void avdt_l2c_config_cfm_cback(uint16_t lcid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + avdt_l2c_config_ind_cback(lcid, p_cfg); + AvdtpTransportChannel* p_tbl; AVDT_TRACE_DEBUG("%s: lcid: %d", __func__, lcid); diff --git a/stack/bnep/bnep_main.cc b/stack/bnep/bnep_main.cc index da5aea390..1fcc2d34f 100644 --- a/stack/bnep/bnep_main.cc +++ b/stack/bnep/bnep_main.cc @@ -54,8 +54,8 @@ const uint16_t bnep_frame_hdr_sizes[] = {14, 1, 2, 8, 8}; static void bnep_connect_ind(const RawAddress& bd_addr, uint16_t l2cap_cid, uint16_t psm, uint8_t l2cap_id); static void bnep_connect_cfm(uint16_t l2cap_cid, uint16_t result); -static void bnep_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg); -static void bnep_config_cfm(uint16_t l2cap_cid, uint16_t result); +static void bnep_config_cfm(uint16_t l2cap_cid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void bnep_disconnect_ind(uint16_t l2cap_cid, bool ack_needed); static void bnep_data_ind(uint16_t l2cap_cid, BT_HDR* p_msg); static void bnep_congestion_ind(uint16_t lcid, bool is_congested); @@ -78,7 +78,7 @@ tBNEP_RESULT bnep_register_with_l2cap(void) { bnep_cb.reg_info.pL2CA_ConnectInd_Cb = bnep_connect_ind; bnep_cb.reg_info.pL2CA_ConnectCfm_Cb = bnep_connect_cfm; - bnep_cb.reg_info.pL2CA_ConfigInd_Cb = bnep_config_ind; + bnep_cb.reg_info.pL2CA_ConfigInd_Cb = nullptr; bnep_cb.reg_info.pL2CA_ConfigCfm_Cb = bnep_config_cfm; bnep_cb.reg_info.pL2CA_DisconnectInd_Cb = bnep_disconnect_ind; bnep_cb.reg_info.pL2CA_DataInd_Cb = bnep_data_ind; @@ -187,20 +187,6 @@ static void bnep_connect_cfm(uint16_t l2cap_cid, uint16_t result) { /******************************************************************************* * - * Function bnep_config_ind - * - * Description This function processes the L2CAP configuration indication - * event. - * - * Returns void - * - ******************************************************************************/ -static void bnep_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) { - // No-op here. We are not interested in their MTU. -} - -/******************************************************************************* - * * Function bnep_config_cfm * * Description This function processes the L2CAP configuration confirmation @@ -209,7 +195,8 @@ static void bnep_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) { * Returns void * ******************************************************************************/ -static void bnep_config_cfm(uint16_t l2cap_cid, uint16_t initiator) { +static void bnep_config_cfm(uint16_t l2cap_cid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { tBNEP_CONN* p_bcb; BNEP_TRACE_EVENT("BNEP - Rcvd cfg cfm, CID: 0x%x", l2cap_cid); diff --git a/stack/gap/gap_conn.cc b/stack/gap/gap_conn.cc index fd75bc5f9..6b6ab996a 100644 --- a/stack/gap/gap_conn.cc +++ b/stack/gap/gap_conn.cc @@ -85,7 +85,8 @@ static void gap_connect_ind(const RawAddress& bd_addr, uint16_t l2cap_cid, uint16_t psm, uint8_t l2cap_id); static void gap_connect_cfm(uint16_t l2cap_cid, uint16_t result); static void gap_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg); -static void gap_config_cfm(uint16_t l2cap_cid, uint16_t result); +static void gap_config_cfm(uint16_t l2cap_cid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void gap_disconnect_ind(uint16_t l2cap_cid, bool ack_needed); static void gap_data_ind(uint16_t l2cap_cid, BT_HDR* p_msg); static void gap_congestion_ind(uint16_t lcid, bool is_congested); @@ -780,7 +781,10 @@ static void gap_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) { * Returns void * ******************************************************************************/ -static void gap_config_cfm(uint16_t l2cap_cid, uint16_t initiator) { +static void gap_config_cfm(uint16_t l2cap_cid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + gap_config_ind(l2cap_cid, p_cfg); + tGAP_CCB* p_ccb; /* Find CCB based on CID */ diff --git a/stack/gatt/gatt_main.cc b/stack/gatt/gatt_main.cc index 84e368416..fe6cfd44a 100644 --- a/stack/gatt/gatt_main.cc +++ b/stack/gatt/gatt_main.cc @@ -55,7 +55,8 @@ static void gatt_l2cif_connect_ind_cback(const RawAddress& bd_addr, static void gatt_l2cif_connect_cfm_cback(uint16_t l2cap_cid, uint16_t result); static void gatt_l2cif_config_ind_cback(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg); -static void gatt_l2cif_config_cfm_cback(uint16_t lcid, uint16_t result); +static void gatt_l2cif_config_cfm_cback(uint16_t lcid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void gatt_l2cif_disconnect_ind_cback(uint16_t l2cap_cid, bool ack_needed); static void gatt_l2cif_disconnect(uint16_t l2cap_cid); @@ -615,7 +616,10 @@ static void gatt_l2cif_connect_cfm_cback(uint16_t lcid, uint16_t result) { } /** This is the L2CAP config confirm callback function */ -void gatt_l2cif_config_cfm_cback(uint16_t lcid, uint16_t initiator) { +void gatt_l2cif_config_cfm_cback(uint16_t lcid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + gatt_l2cif_config_ind_cback(lcid, p_cfg); + /* look up clcb for this channel */ tGATT_TCB* p_tcb = gatt_find_tcb_by_cid(lcid); if (!p_tcb) return; diff --git a/stack/hid/hidd_conn.cc b/stack/hid/hidd_conn.cc index 9c196ab53..65e0e7fd8 100644 --- a/stack/hid/hidd_conn.cc +++ b/stack/hid/hidd_conn.cc @@ -43,7 +43,8 @@ static void hidd_l2cif_connect_ind(const RawAddress& bd_addr, uint16_t cid, uint16_t psm, uint8_t id); static void hidd_l2cif_connect_cfm(uint16_t cid, uint16_t result); static void hidd_l2cif_config_ind(uint16_t cid, tL2CAP_CFG_INFO* p_cfg); -static void hidd_l2cif_config_cfm(uint16_t cid, uint16_t result); +static void hidd_l2cif_config_cfm(uint16_t cid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void hidd_l2cif_disconnect_ind(uint16_t cid, bool ack_needed); static void hidd_l2cif_disconnect(uint16_t cid); static void hidd_l2cif_data_ind(uint16_t cid, BT_HDR* p_msg); @@ -263,7 +264,10 @@ static void hidd_l2cif_config_ind(uint16_t cid, tL2CAP_CFG_INFO* p_cfg) { * Returns void * ******************************************************************************/ -static void hidd_l2cif_config_cfm(uint16_t cid, uint16_t initiator) { +static void hidd_l2cif_config_cfm(uint16_t cid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + hidd_l2cif_config_ind(cid, p_cfg); + tHID_CONN* p_hcon; HIDD_TRACE_EVENT("%s: cid=%04x", __func__, cid); diff --git a/stack/hid/hidh_conn.cc b/stack/hid/hidh_conn.cc index 6fb276e1e..039b99b84 100644 --- a/stack/hid/hidh_conn.cc +++ b/stack/hid/hidh_conn.cc @@ -52,7 +52,8 @@ static void hidh_l2cif_connect_ind(const RawAddress& bd_addr, uint8_t l2cap_id); static void hidh_l2cif_connect_cfm(uint16_t l2cap_cid, uint16_t result); static void hidh_l2cif_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg); -static void hidh_l2cif_config_cfm(uint16_t l2cap_cid, uint16_t result); +static void hidh_l2cif_config_cfm(uint16_t l2cap_cid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void hidh_l2cif_disconnect_ind(uint16_t l2cap_cid, bool ack_needed); static void hidh_l2cif_data_ind(uint16_t l2cap_cid, BT_HDR* p_msg); static void hidh_l2cif_disconnect(uint16_t l2cap_cid); @@ -369,7 +370,10 @@ static void hidh_l2cif_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) { * Returns void * ******************************************************************************/ -static void hidh_l2cif_config_cfm(uint16_t l2cap_cid, uint16_t initiator) { +static void hidh_l2cif_config_cfm(uint16_t l2cap_cid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + hidh_l2cif_config_ind(l2cap_cid, p_cfg); + uint8_t dhandle; tHID_CONN* p_hcon = NULL; uint32_t reason; diff --git a/stack/include/l2c_api.h b/stack/include/l2c_api.h index 84cd01378..be0d41713 100644 --- a/stack/include/l2c_api.h +++ b/stack/include/l2c_api.h @@ -199,9 +199,10 @@ constexpr uint16_t L2CAP_INITIATOR_REMOTE = 0; /* Configuration confirm callback prototype. Parameters are * Local CID assigned to the connection * Initiator (1 for local, 0 for remote) + * Initial config from remote * If there is an error, tL2CA_ERROR_CB is invoked */ -typedef void(tL2CA_CONFIG_CFM_CB)(uint16_t, uint16_t); +typedef void(tL2CA_CONFIG_CFM_CB)(uint16_t, uint16_t, tL2CAP_CFG_INFO*); /* Disconnect indication callback prototype. Parameters are * Local CID diff --git a/stack/l2cap/l2c_csm.cc b/stack/l2cap/l2c_csm.cc index 7d34bcf45..91e354033 100644 --- a/stack/l2cap/l2c_csm.cc +++ b/stack/l2cap/l2c_csm.cc @@ -92,9 +92,8 @@ static void l2c_csm_indicate_connection_open(tL2C_CCB* p_ccb) { p_ccb->remote_id); } if (p_ccb->chnl_state == CST_OPEN) { - (*p_ccb->p_rcb->api.pL2CA_ConfigInd_Cb)(p_ccb->local_cid, &p_ccb->peer_cfg); - (*p_ccb->p_rcb->api.pL2CA_ConfigCfm_Cb)(p_ccb->local_cid, - p_ccb->connection_initiator); + (*p_ccb->p_rcb->api.pL2CA_ConfigCfm_Cb)( + p_ccb->local_cid, p_ccb->connection_initiator, &p_ccb->peer_cfg); } } diff --git a/stack/rfcomm/rfc_l2cap_if.cc b/stack/rfcomm/rfc_l2cap_if.cc index c547eb5f4..d69ebeb36 100644 --- a/stack/rfcomm/rfc_l2cap_if.cc +++ b/stack/rfcomm/rfc_l2cap_if.cc @@ -45,7 +45,8 @@ static void RFCOMM_ConnectInd(const RawAddress& bd_addr, uint16_t lcid, uint16_t psm, uint8_t id); static void RFCOMM_ConnectCnf(uint16_t lcid, uint16_t err); static void RFCOMM_ConfigInd(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg); -static void RFCOMM_ConfigCnf(uint16_t lcid, uint16_t result); +static void RFCOMM_ConfigCnf(uint16_t lcid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void RFCOMM_DisconnectInd(uint16_t lcid, bool is_clear); static void RFCOMM_BufDataInd(uint16_t lcid, BT_HDR* p_buf); static void RFCOMM_CongestionStatusInd(uint16_t lcid, bool is_congested); @@ -196,7 +197,10 @@ void RFCOMM_ConfigInd(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg) { * event to the FSM. * ******************************************************************************/ -void RFCOMM_ConfigCnf(uint16_t lcid, uint16_t initiator) { +void RFCOMM_ConfigCnf(uint16_t lcid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + RFCOMM_ConfigInd(lcid, p_cfg); + tRFC_MCB* p_mcb = rfc_find_lcid_mcb(lcid); if (!p_mcb) { diff --git a/stack/sdp/sdp_main.cc b/stack/sdp/sdp_main.cc index 1646724fd..cae767df8 100644 --- a/stack/sdp/sdp_main.cc +++ b/stack/sdp/sdp_main.cc @@ -47,7 +47,8 @@ tSDP_CB sdp_cb; static void sdp_connect_ind(const RawAddress& bd_addr, uint16_t l2cap_cid, UNUSED_ATTR uint16_t psm, uint8_t l2cap_id); static void sdp_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg); -static void sdp_config_cfm(uint16_t l2cap_cid, uint16_t result); +static void sdp_config_cfm(uint16_t l2cap_cid, uint16_t result, + tL2CAP_CFG_INFO* p_cfg); static void sdp_disconnect_ind(uint16_t l2cap_cid, bool ack_needed); static void sdp_data_ind(uint16_t l2cap_cid, BT_HDR* p_msg); @@ -207,7 +208,10 @@ static void sdp_config_ind(uint16_t l2cap_cid, tL2CAP_CFG_INFO* p_cfg) { * Returns void * ******************************************************************************/ -static void sdp_config_cfm(uint16_t l2cap_cid, uint16_t initiator) { +static void sdp_config_cfm(uint16_t l2cap_cid, uint16_t initiator, + tL2CAP_CFG_INFO* p_cfg) { + sdp_config_ind(l2cap_cid, p_cfg); + tCONN_CB* p_ccb; SDP_TRACE_EVENT("SDP - Rcvd cfg cfm, CID: 0x%x", l2cap_cid); diff --git a/stack/test/rfcomm/stack_rfcomm_test.cc b/stack/test/rfcomm/stack_rfcomm_test.cc index 71e6ad7db..59edbaa85 100644 --- a/stack/test/rfcomm/stack_rfcomm_test.cc +++ b/stack/test/rfcomm/stack_rfcomm_test.cc @@ -160,7 +160,7 @@ class StackRfcommTest : public Test { VLOG(1) << "Step 2"; // MTU configuration is done cfg_req.mtu_present = false; - l2cap_appl_info_.pL2CA_ConfigCfm_Cb(lcid, L2CAP_CFG_OK); + l2cap_appl_info_.pL2CA_ConfigCfm_Cb(lcid, L2CAP_CFG_OK, {}); VLOG(1) << "Step 3"; // Remote device also ask to configure MTU size @@ -301,7 +301,7 @@ class StackRfcommTest : public Test { VLOG(1) << "Step 2"; // Remote device confirms our configuration request cfg_req.mtu_present = false; - l2cap_appl_info_.pL2CA_ConfigCfm_Cb(lcid, L2CAP_CFG_OK); + l2cap_appl_info_.pL2CA_ConfigCfm_Cb(lcid, L2CAP_CFG_OK, {}); VLOG(1) << "Step 3"; // Remote device also asks to configure MTU @@ -782,7 +782,7 @@ TEST_F(StackRfcommTest, TestConnectionCollision) { VLOG(1) << "Step 6"; // Remote device accepted our MTU size - l2cap_appl_info_.pL2CA_ConfigCfm_Cb(new_lcid, L2CAP_CFG_OK); + l2cap_appl_info_.pL2CA_ConfigCfm_Cb(new_lcid, L2CAP_CFG_OK, {}); // L2CAP collision and connection setup done -- 2.11.0