bt-service/bt-service-event-receiver: Fix performance and style issues
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-event-receiver.c
index def6528..3b6ee1d 100644 (file)
@@ -645,7 +645,6 @@ static gboolean __bt_discovery_finished()
 
 void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *path)
 {
-       DBusGProxy *adapter_proxy;
        int mode = 0;
        int result = BLUETOOTH_ERROR_NONE;
        DBusMessageIter value_iter;
@@ -704,20 +703,17 @@ void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *
                                DBUS_TYPE_INVALID);
        } else if (strcasecmp(property, "Powered") == 0) {
                gboolean power = FALSE;
-               int power_event;
 
                dbus_message_iter_recurse(&dict_iter, &value_iter);
                dbus_message_iter_get_basic(&value_iter, &power);
 
-               power_event = (power == TRUE) ? BLUETOOTH_EVENT_ENABLED :
-                               BLUETOOTH_EVENT_DISABLED;
+               BT_DBG("power state changed: %d", power);
+
+               if (power == TRUE)
+                       _bt_set_enabled();
+               else
+                       _bt_set_disabled();
 
-               BT_ERR("send power state: %d", power);
-               /* Send event to application */
-               _bt_send_event(BT_ADAPTER_EVENT,
-                                       power_event,
-                                       DBUS_TYPE_INT32, &result,
-                                       DBUS_TYPE_INVALID);
        } else if (strcasecmp(property, "Discoverable") == 0) {
                gboolean discoverable = FALSE;
 
@@ -726,6 +722,7 @@ void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *
 
                if (discoverable == FALSE) {
                        if (_bt_get_discoverable_timeout_property() > 0) {
+                               DBusGProxy *adapter_proxy;
                                g_value_init(&timeout, G_TYPE_UINT);
                                g_value_set_uint(&timeout, 0);
 
@@ -782,17 +779,14 @@ static void __bt_device_remote_connected_properties(
                                char *address, gboolean connected)
 {
        int result = BLUETOOTH_ERROR_NONE;
-       int i;
 
        BT_DBG("+");
 
        if (remote_dev_info->uuid_count > 0 ) {
-               for (i = 0; i<remote_dev_info->uuid_count; i++) {
+               for (int i = 0; i<remote_dev_info->uuid_count; i++) {
                        char *uuid = remote_dev_info->uuids[i];
                        if (strcasecmp(uuid, HID_UUID) == 0){
-                               int event = BLUETOOTH_EVENT_NONE;
-
-                               event = (connected == TRUE) ?
+                               int event = (connected == TRUE) ?
                                        BLUETOOTH_HID_CONNECTED :
                                        BLUETOOTH_HID_DISCONNECTED;
 
@@ -871,7 +865,7 @@ void __bt_device_property_changed_event(DBusMessageIter *msg_iter, const char *p
                        gboolean paired = FALSE;
 
                        GList *node;
-                       bt_remote_dev_info_t *dev_info;
+                       bt_remote_dev_info_t *new_dev_info;
 
                        dbus_message_iter_recurse(&dict_iter, &value_iter);
                        dbus_message_iter_get_basic(&value_iter, &paired);
@@ -899,16 +893,24 @@ void __bt_device_property_changed_event(DBusMessageIter *msg_iter, const char *p
                        node = g_list_first(g_list);
 
                        while (node != NULL) {
+                               bt_remote_dev_info_t *dev_info;
                                dev_info = (bt_remote_dev_info_t *)node->data;
                                if (strcasecmp(dev_info->address, address) == 0) {
                                        g_list = g_list_remove(g_list, dev_info);
                                        _bt_free_device_info(dev_info);
+
+                                       new_dev_info =  _bt_get_remote_device_info(address);
+                                       if (new_dev_info == NULL) {
+                                               g_free(address);
+                                               return;
+                                       }
+                                       g_list = g_list_append(g_list, new_dev_info);
                                }
                                node = g_list_next(node);
                        }
 
                        if (_bt_is_device_creating() == TRUE) {
-                               BT_DBG("Try to Pair by me");
+                               BT_DBG("Try to Pair by me or already paired");
                        } else {
                                _bt_send_event(BT_ADAPTER_EVENT,
                                        BLUETOOTH_EVENT_BONDING_FINISHED,
@@ -999,7 +1001,7 @@ void _bt_handle_input_event(DBusMessage *msg)
        ret_if(property == NULL);
 
        if (strcasecmp(property, "Connected") == 0) {
-               int event = BLUETOOTH_EVENT_NONE;
+               int event;
                char *address;
 
                dbus_message_iter_next(&item_iter);
@@ -1115,7 +1117,6 @@ void __bt_handle_network_client_event(DBusMessageIter *msg_iter, const char *pat
 
 void _bt_handle_device_event(DBusMessage *msg)
 {
-       int event;
        int result = BLUETOOTH_ERROR_NONE;
        DBusMessageIter item_iter;
        DBusMessageIter value_iter;
@@ -1141,6 +1142,7 @@ void _bt_handle_device_event(DBusMessage *msg)
                ret_if(property == NULL);
 
                if (strcasecmp(property, "Connected") == 0) {
+                       int event;
                        gboolean connected = FALSE;
                        dbus_message_iter_next(&item_iter);
                        dbus_message_iter_recurse(&item_iter, &value_iter);
@@ -1242,7 +1244,7 @@ void __bt_handle_media_control_event(DBusMessageIter *msg_iter,
        ret_if(!dbus_message_iter_next(&dict_iter));
 
        if (strcasecmp(property, "Connected") == 0) {
-               int event = BLUETOOTH_EVENT_NONE;
+               int event;
                char *address;
 
                dbus_message_iter_recurse(&dict_iter, &value_iter);
@@ -1542,12 +1544,12 @@ static int __bt_get_object_path(DBusMessage *msg, char **path)
 
 static void __bt_devices_list_free()
 {
-       bt_remote_dev_info_t *dev_info;
        GList *node;
 
        node = g_list_first(g_list);
 
        while (node != NULL){
+               bt_remote_dev_info_t *dev_info;
                dev_info = (bt_remote_dev_info_t *)node->data;
 
                g_list = g_list_remove(g_list, dev_info);
@@ -1643,18 +1645,34 @@ static DBusHandlerResult __bt_manager_event_filter(DBusConnection *conn,
 
                                _bt_convert_device_path_to_address(object_path, address);
 
-                               _bt_send_event(BT_ADAPTER_EVENT,
-                                       BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED,
-                                       DBUS_TYPE_INT32, &result,
-                                       DBUS_TYPE_STRING, &address,
-                                       DBUS_TYPE_INVALID);
-
                                node = g_list_first(g_list);
 
                                while (node != NULL){
                                        dev_info = (bt_remote_dev_info_t *)node->data;
-                                       if (strcasecmp(dev_info->address,
-                                                                       address) == 0) {
+                                       if (strcasecmp(dev_info->address, address) == 0) {
+                                               if (dev_info->paired) {
+                                                       BT_DBG("send bt bond destroy event");
+                                                       _bt_send_event(BT_ADAPTER_EVENT,
+                                                               BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED,
+                                                               DBUS_TYPE_INT32, &result,
+                                                               DBUS_TYPE_STRING, &address,
+                                                               DBUS_TYPE_INVALID);
+                                               } else {
+                                                       BT_DBG("Bluez removes device %s, send device disappear event", dev_info->name);
+                                                       _bt_send_event(BT_ADAPTER_EVENT,
+                                                               BLUETOOTH_EVENT_REMOTE_DEVICE_DISAPPEARED,
+                                                               DBUS_TYPE_INT32, &result,
+                                                               DBUS_TYPE_STRING, &dev_info->address,
+                                                               DBUS_TYPE_UINT32, &dev_info->class,
+                                                               DBUS_TYPE_INT16, &dev_info->rssi,
+                                                               DBUS_TYPE_STRING, &dev_info->name,
+                                                               DBUS_TYPE_BOOLEAN, &dev_info->paired,
+                                                               DBUS_TYPE_BOOLEAN, &dev_info->connected,
+                                                               DBUS_TYPE_BOOLEAN, &dev_info->trust,
+                                                               DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
+                                                               &dev_info->uuids, dev_info->uuid_count,
+                                                               DBUS_TYPE_INVALID);
+                                               }
                                                g_list = g_list_remove(g_list, dev_info);
                                                _bt_free_device_info(dev_info);
                                                break;
@@ -2260,23 +2278,26 @@ void _bt_get_temp_remote_devinfo(void)
 
        node = g_list_first(g_list);
 
-       while (node != NULL){
+       while (node != NULL) {
                dev_info = (bt_remote_dev_info_t *)node->data;
-
-               _bt_send_event(BT_ADAPTER_EVENT,
-                       BLUETOOTH_EVENT_REMOTE_DEVICE_FOUND,
-                       DBUS_TYPE_INT32, &result,
-                       DBUS_TYPE_STRING, &dev_info->address,
-                       DBUS_TYPE_UINT32, &dev_info->class,
-                       DBUS_TYPE_INT16, &dev_info->rssi,
-                       DBUS_TYPE_STRING, &dev_info->name,
-                       DBUS_TYPE_BOOLEAN, &dev_info->paired,
-                       DBUS_TYPE_BOOLEAN, &dev_info->connected,
-                       DBUS_TYPE_BOOLEAN, &dev_info->trust,
-                       DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-                       &dev_info->uuids, dev_info->uuid_count,
-                       DBUS_TYPE_INVALID);
-
+               /* do not search paired devices.
+                * Paired devices are in g_list in order to trig device disappear
+                * or remove bonding events */
+               if (!dev_info->paired) {
+                       _bt_send_event(BT_ADAPTER_EVENT,
+                               BLUETOOTH_EVENT_REMOTE_DEVICE_FOUND,
+                               DBUS_TYPE_INT32, &result,
+                               DBUS_TYPE_STRING, &dev_info->address,
+                               DBUS_TYPE_UINT32, &dev_info->class,
+                               DBUS_TYPE_INT16, &dev_info->rssi,
+                               DBUS_TYPE_STRING, &dev_info->name,
+                               DBUS_TYPE_BOOLEAN, &dev_info->paired,
+                               DBUS_TYPE_BOOLEAN, &dev_info->connected,
+                               DBUS_TYPE_BOOLEAN, &dev_info->trust,
+                               DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
+                               &dev_info->uuids, dev_info->uuid_count,
+                               DBUS_TYPE_INVALID);
+               }
                node = g_list_next(node);
        }
 }