OSDN Git Service

Revert "Register for Service Changed notifications for untrusted devices"
authorSatomi <michitsuta@casio.co.jp>
Tue, 9 Aug 2016 15:19:03 +0000 (08:19 -0700)
committerJakub Pawlowski <jpawlowski@google.com>
Tue, 9 Aug 2016 20:19:20 +0000 (20:19 +0000)
This reverts commit 5f0e23d532f4f90d081ccc0e294f404eb5e5b688.

Instead of reusing service discovery data, gatt profile initiates
discovery by service uuid before regular service discovery is started,
and both discovery procedures interfere with each other.
As a result, link is dropped.

Bug: 30462943
Bug: 30481143
Change-Id: Ic63339f4f46eda70e575a4103974766d54a9d624
Signed-off-by: Satomi <michitsuta@casio.co.jp>
bta/dm/bta_dm_act.cc
stack/gatt/gatt_attr.c

index 15b0585..f787f30 100644 (file)
@@ -4413,7 +4413,6 @@ static uint8_t bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT
             else
             {
                 sec_event.auth_cmpl.success = true;
-                /* We also register for Service Changed right after connect. */
                 if (!p_data->complt.smp_over_br)
                     GATT_ConfigServiceChangeCCC(bda, true, BT_TRANSPORT_LE);
             }
index b485aee..8555abc 100644 (file)
@@ -238,24 +238,26 @@ static void gatt_connect_cback (tGATT_IF gatt_if, BD_ADDR bda, uint16_t conn_id,
 {
     UNUSED(gatt_if);
 
-    GATT_TRACE_EVENT("%s: from %08x%04x connected:%d conn_id=%d reason = 0x%04x", __func__,
-                      (bda[0]<<24)+(bda[1]<<16)+(bda[2]<<8)+bda[3],
-                      (bda[4]<<8)+bda[5], connected, conn_id, reason);
+    GATT_TRACE_EVENT ("%s: from %08x%04x connected:%d conn_id=%d reason = 0x%04x", __FUNCTION__,
+                       (bda[0]<<24)+(bda[1]<<16)+(bda[2]<<8)+bda[3],
+                       (bda[4]<<8)+bda[5], connected, conn_id, reason);
 
     tGATT_PROFILE_CLCB *p_clcb = gatt_profile_find_clcb_by_bd_addr(bda, transport);
-    if (connected) {
-        if (p_clcb == NULL)
-            p_clcb = gatt_profile_clcb_alloc(conn_id, bda, transport);
-
-        if (p_clcb == NULL)
-            return;
+    if (p_clcb == NULL)
+        return;
 
+    if (connected)
+    {
+        p_clcb->conn_id = conn_id;
         p_clcb->connected = true;
-        p_clcb->ccc_stage = GATT_SVC_CHANGED_SERVICE;
-        gatt_cl_start_config_ccc(p_clcb);
+
+        if (p_clcb->ccc_stage == GATT_SVC_CHANGED_CONNECTING)
+        {
+            p_clcb->ccc_stage ++;
+            gatt_cl_start_config_ccc(p_clcb);
+        }
     } else {
-        if (p_clcb != NULL)
-            gatt_profile_clcb_dealloc(p_clcb);
+        gatt_profile_clcb_dealloc(p_clcb);
     }
 }