Fix gatt connection state changed cb not coming issue 30/288030/2
authorWootak Jung <wootak.jung@samsung.com>
Thu, 9 Feb 2023 08:08:59 +0000 (17:08 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Thu, 9 Feb 2023 08:08:59 +0000 (17:08 +0900)
Regardless of registering new callback,
the callback from previous one should be come

Change-Id: Id37cf39734d4cd8762d1db58733ab94deade601d
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
src/bluetooth-common.c

index 0e4c4a8..d6f4c0f 100644 (file)
@@ -2545,31 +2545,28 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
        case BLUETOOTH_EVENT_GATT_SERVER_CONNECTED: {
                const GSList *server_list = NULL;
                bt_gatt_server_s *server = NULL;
-
                bt_gatt_connection_state_changed_cb cb = NULL;
 
-               server_list = _bt_gatt_get_server_list();
-               if (!server_list)
-                       break;
-
-               server = (bt_gatt_server_s *)server_list->data;
-
                BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_CONNECTED");
                _bt_convert_address_to_string(&device_addr,
                                (bluetooth_device_address_t *)(param->param_data));
 
+               /* This callback is from bt_gatt_set_connection_state_changed_cb */
+               if (event_index >= 0)
+                       cb = bt_event_slot_container[event_index].callback;
+               if (cb)
+                       cb(_bt_get_error_code(param->result), TRUE, device_addr,
+                               bt_event_slot_container[event_index].user_data);
+
+               /* This callback is from bt_gatt_server_set_connection_state_changed_cb */
+               server_list = _bt_gatt_get_server_list();
+               if (!server_list)
+                       break;
+               server = (bt_gatt_server_s *)server_list->data;
                if (server && server->server_connection_change_cb)
                        server->server_connection_change_cb(_bt_get_error_code(param->result), TRUE, device_addr,
                                        server->connection_change_user_data);
 
-               else {
-                       if (event_index >= 0)
-                               cb = bt_event_slot_container[event_index].callback;
-                       if (cb)
-                               cb(_bt_get_error_code(param->result), TRUE, device_addr,
-                                       bt_event_slot_container[event_index].user_data);
-               }
-
                g_free(device_addr);
                device_addr = NULL;
                break;
@@ -2577,29 +2574,27 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
        case BLUETOOTH_EVENT_GATT_SERVER_DISCONNECTED: {
                const GSList *server_list = NULL;
                bt_gatt_server_s *server = NULL;
-
                bt_gatt_connection_state_changed_cb cb = NULL;
 
-               server_list = _bt_gatt_get_server_list();
-               if (!server_list)
-                       break;
-
-               server = (bt_gatt_server_s *)server_list->data;
-
                BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_DISCONNECTED");
                _bt_convert_address_to_string(&device_addr,
                                (bluetooth_device_address_t *)(param->param_data));
 
+               /* This callback is from bt_gatt_set_connection_state_changed_cb */
+               if (event_index >= 0)
+                       cb = bt_event_slot_container[event_index].callback;
+               if (cb)
+                       cb(_bt_get_error_code(param->result), FALSE, device_addr,
+                               bt_event_slot_container[event_index].user_data);
+
+               /* This callback is from bt_gatt_server_set_connection_state_changed_cb */
+               server_list = _bt_gatt_get_server_list();
+               if (!server_list)
+                       break;
+               server = (bt_gatt_server_s *)server_list->data;
                if (server && server->server_connection_change_cb)
                        server->server_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr,
                                        server->connection_change_user_data);
-               else {
-                       if (event_index >= 0)
-                               cb = bt_event_slot_container[event_index].callback;
-                       if (cb)
-                               cb(_bt_get_error_code(param->result), FALSE, device_addr,
-                                       bt_event_slot_container[event_index].user_data);
-               }
 
                g_free(device_addr);
                device_addr = NULL;
@@ -2632,16 +2627,18 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
                /* TDS Seeker */
                _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, TRUE);
 
+               /* This callback is from bt_gatt_set_connection_state_changed_cb */
+               if (event_index >= 0)
+                       cb = bt_event_slot_container[event_index].callback;
+               if (cb)
+                       cb(_bt_get_error_code(param->result), TRUE, device_addr,
+                               bt_event_slot_container[event_index].user_data);
+
+               /* This callback is from bt_gatt_client_connect */
                if (client_s && client_s->client_connection_change_cb)
                        client_s->client_connection_change_cb(_bt_get_error_code(param->result), TRUE, device_addr,
                                        client_s->connection_change_user_data);
-               else {
-                       if (event_index >= 0)
-                               cb = bt_event_slot_container[event_index].callback;
-                       if (cb)
-                               cb(_bt_get_error_code(param->result), TRUE, device_addr,
-                                       bt_event_slot_container[event_index].user_data);
-               }
+
                g_free(device_addr);
                device_addr = NULL;
                break;
@@ -2671,31 +2668,32 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
                        client_s->services_discovered = false;
                }
 
-
                /*HRP Server*/
                __bt_hrp_le_connection_state_changed_cb(param->result, device_addr, FALSE);
 
                /* TDS Seeker */
                _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, FALSE);
 
+               // TOOD: now this logic is required. but in the future, we need to remove
                /* Handle Client disconnection event in case of Server */
                if (server && server->server_connection_change_cb)
                        server->server_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr,
                                        server->connection_change_user_data);
 
+               /* This callback is from bt_gatt_set_connection_state_changed_cb */
+               if (event_index >= 0)
+                       cb = bt_event_slot_container[event_index].callback;
+               if (cb)
+                       cb(_bt_get_error_code(param->result), FALSE, device_addr,
+                               bt_event_slot_container[event_index].user_data);
+
+               /* This callback is from bt_gatt_client_connect */
                if (client_s && client_s->client_connection_change_cb) {
                        client_s->client_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr,
                                        client_s->connection_change_user_data);
                        client_s->client_connection_change_cb = NULL;
                        client_s->connection_change_user_data = NULL;
                }
-               else {
-                       if (event_index >= 0)
-                               cb = bt_event_slot_container[event_index].callback;
-                       if (cb)
-                               cb(_bt_get_error_code(param->result), FALSE, device_addr,
-                                       bt_event_slot_container[event_index].user_data);
-               }
 
                g_free(device_addr);
                device_addr = NULL;