OSDN Git Service

Include initial remote config in pL2CA_ConfigCfm_Cb
authorHansong Zhang <hsz@google.com>
Mon, 28 Sep 2020 19:20:19 +0000 (12:20 -0700)
committerHansong Zhang <hsz@google.com>
Mon, 28 Sep 2020 19:24:18 +0000 (12:24 -0700)
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

14 files changed:
main/shim/l2cap.cc
stack/avct/avct_l2c.cc
stack/avct/avct_l2c_br.cc
stack/avdt/avdt_l2c.cc
stack/bnep/bnep_main.cc
stack/gap/gap_conn.cc
stack/gatt/gatt_main.cc
stack/hid/hidd_conn.cc
stack/hid/hidh_conn.cc
stack/include/l2c_api.h
stack/l2cap/l2c_csm.cc
stack/rfcomm/rfc_l2cap_if.cc
stack/sdp/sdp_main.cc
stack/test/rfcomm/stack_rfcomm_test.cc

index 006bd23..e7a1775 100644 (file)
@@ -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) {
index 1c910a4..fd7af81 100644 (file)
@@ -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 */
index 7833bcf..e8e9994 100644 (file)
@@ -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 */
index 3a6550a..24e9980 100644 (file)
@@ -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);
index da5aea3..1fcc2d3 100644 (file)
@@ -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);
index fd75bc5..6b6ab99 100644 (file)
@@ -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 */
index 84e3684..fe6cfd4 100644 (file)
@@ -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;
index 9c196ab..65e0e7f 100644 (file)
@@ -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);
index 6fb276e..039b99b 100644 (file)
@@ -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;
index 84cd013..be0d417 100644 (file)
@@ -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
index 7d34bcf..91e3540 100644 (file)
@@ -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);
   }
 }
 
index c547eb5..d69ebeb 100644 (file)
@@ -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) {
index 1646724..cae767d 100644 (file)
@@ -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);
index 71e6ad7..59edbaa 100644 (file)
@@ -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