OSDN Git Service

Set ACL disconnect reason in ACL, not L2cap
authorHansong Zhang <hsz@google.com>
Sun, 17 Jan 2021 21:08:56 +0000 (13:08 -0800)
committerHansong Zhang <hsz@google.com>
Wed, 20 Jan 2021 19:57:34 +0000 (11:57 -0800)
And combine two identical functions

Test: cert/run
Tag: #gd-refactor
Bug: 141555841
Change-Id: Idb883bebc85df8b68270de5f650e2bc7fffcc69e

stack/acl/btm_acl.cc
stack/include/acl_api.h
stack/l2cap/l2c_link.cc

index 5a43730..9db15c7 100644 (file)
@@ -2622,10 +2622,6 @@ bool acl_peer_supports_ble_coded_phy(uint16_t hci_handle) {
   return HCI_LE_CODED_PHY_SUPPORTED(p_acl->peer_le_features);
 }
 
-tHCI_STATUS acl_get_disconnect_reason() {
-  return btm_cb.acl_cb_.get_disconnect_reason();
-}
-
 void acl_set_disconnect_reason(tHCI_STATUS acl_disc_reason) {
   btm_cb.acl_cb_.set_disconnect_reason(acl_disc_reason);
 }
@@ -2702,6 +2698,12 @@ void btm_acl_disconnected(tHCI_STATUS status, uint16_t handle,
              hci_error_code_text(status).c_str());
   }
 
+  /* There can be a case when we rejected PIN code authentication */
+  /* otherwise save a new reason */
+  if (btm_get_acl_disc_reason_code() != HCI_ERR_HOST_REJECT_SECURITY) {
+    acl_set_disconnect_reason(static_cast<tHCI_STATUS>(reason));
+  }
+
   /* If L2CAP or SCO doesn't know about it, send it to ISO */
   if (!l2c_link_hci_disc_comp(handle, reason) &&
       !btm_sco_removed(handle, reason)) {
index 01ed696..d6ad566 100644 (file)
@@ -271,7 +271,6 @@ tBT_TRANSPORT acl_get_transport_from_handle(uint16_t handle);
 uint16_t acl_get_hci_handle_for_hcif(const RawAddress& bd_addr,
                                      tBT_TRANSPORT transport);
 
-tHCI_STATUS acl_get_disconnect_reason();
 void acl_set_disconnect_reason(tHCI_STATUS acl_disc_reason);
 
 bool acl_is_role_switch_allowed();
index f3dca71..40cb1ba 100644 (file)
@@ -45,7 +45,6 @@ extern tBTM_CB btm_cb;
 bool BTM_ReadPowerMode(const RawAddress& remote_bda, tBTM_PM_MODE* p_mode);
 bool btm_dev_support_role_switch(const RawAddress& bd_addr);
 tBTM_STATUS btm_sec_disconnect(uint16_t handle, tHCI_STATUS reason);
-tHCI_STATUS acl_get_disconnect_reason();
 void btm_acl_created(const RawAddress& bda, uint16_t hci_handle,
                      uint8_t link_role, tBT_TRANSPORT transport);
 void btm_acl_removed(uint16_t handle);
@@ -340,13 +339,7 @@ bool l2c_link_hci_disc_comp(uint16_t handle, uint8_t reason) {
   if (!p_lcb) {
     status = false;
   } else {
-    /* There can be a case when we rejected PIN code authentication */
-    /* otherwise save a new reason */
-    if (acl_get_disconnect_reason() != HCI_ERR_HOST_REJECT_SECURITY) {
-      acl_set_disconnect_reason(static_cast<tHCI_STATUS>(reason));
-    }
-
-    p_lcb->SetDisconnectReason(acl_get_disconnect_reason());
+    p_lcb->SetDisconnectReason(reason);
 
     /* Just in case app decides to try again in the callback context */
     p_lcb->link_state = LST_DISCONNECTING;