Remove server instance existence check logic in disconnected case 71/226571/1
authorWootak Jung <wootak.jung@samsung.com>
Tue, 3 Mar 2020 06:50:52 +0000 (15:50 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 4 Mar 2020 03:17:50 +0000 (12:17 +0900)
If stop-adv request is comming before disconnected, event if
server_instance is removed, gatt_client_info_list is not removed.

This issue causes that CONNECTED event is not occured on below scenario:
Start-Adv > Connected > [Stop-Adv > Disconnected] > Start-Adv > Connected
                       ([Disconnected > Stop-Adv] is no problem.)

In last connected step, server_instance and gatt_client_info_list are
exsiting. So, connected event is not delivered to service layer.

Change-Id: I940b3e0e6d75c6ad4315fcac40f1af6f3ef612ee

bt-oal/bluez_hal/src/bt-hal-gatt-server.c
bt-oal/oal-gatt.c

index 0d7dba2..f905a1f 100644 (file)
@@ -525,18 +525,8 @@ void _bt_hal_gatt_connected_state_event(gboolean is_connected, char *address)
 {
        struct hal_ev_gatt_server_connected ev;
        struct gatt_client_info_t *conn_info = NULL;
-       int instance = -1;
        memset(&ev, 0, sizeof(ev));
 
-       /* Find Server Instance */
-       instance = bt_hal_gatts_get_gatt_server_instance();
-       if (instance == -1) {
-               ERR("Not even a single GATT server is registered");
-               return;
-       }
-
-       DBG("server instance [%d]", instance);
-
        /* Convert address to hex */
        _bt_hal_convert_addr_string_to_type(ev.bdaddr, address);
 
@@ -570,6 +560,16 @@ void _bt_hal_gatt_connected_state_event(gboolean is_connected, char *address)
                }
                /* If connected, and conn info NOT found, then add conn info */
        } else {
+               int instance = -1;
+
+               /* Find Server Instance */
+               instance = bt_hal_gatts_get_gatt_server_instance();
+               if (instance == -1) {
+                       ERR("Not even a single GATT server is registered");
+                       return;
+               }
+               DBG("server instance [%d]", instance);
+
                if (!conn_info) {
                        /* Save Connection info */
                        conn_info = g_new0(struct gatt_client_info_t, 1);
index 90c9e62..462132a 100644 (file)
@@ -1238,18 +1238,22 @@ static void cb_gatts_connection(int conn_id, int server_if, int connected, bt_bd
        BT_INFO("BTGATT SERVER CONNECTION  connnected:%d, conn_id:%d server_if:%d", connected, conn_id, server_if);
        event_gatts_conn_t *event = g_new0(event_gatts_conn_t, 1);
 
-       for (ins_id = 1 ; ins_id <= NUM_SERVER_INST ; ins_id++) {
-               if ((gatt_servers[ins_id - 1].server_id == server_if)) {
-                       event->server_inst = ins_id;
-                       break;
-               } else {
-                       BT_INFO("Server ID:%d recevied server Id:%d\n", gatt_servers[ins_id - 1].server_id, server_if);
+       if (connected == TRUE) {
+               for (ins_id = 1 ; ins_id <= NUM_SERVER_INST ; ins_id++) {
+                       if ((gatt_servers[ins_id - 1].server_id == server_if)) {
+                               event->server_inst = ins_id;
+                               break;
+                       } else {
+                               BT_INFO("Server ID:%d recevied server Id:%d\n", gatt_servers[ins_id - 1].server_id, server_if);
+                       }
                }
-       }
-       if (ins_id == NUM_SERVER_INST+1) {
-               BT_WARN("Incorrect Server Interface received: %d\n",  server_if);
-               g_free(event);
-               return;
+               if (ins_id == NUM_SERVER_INST+1) {
+                       BT_WARN("Incorrect Server Interface received: %d\n",  server_if);
+                       g_free(event);
+                       return;
+               }
+       } else {
+               /* server_inst is not required in disconnected case */
        }
        memcpy(event->address.addr, bda->address, BT_ADDRESS_BYTES_NUM);
        event->conn_id = conn_id;