fix build issue
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-event-receiver.c
index 23a62bd..f0ae7a7 100644 (file)
@@ -42,6 +42,7 @@
 static DBusGConnection *manager_conn = NULL;
 static DBusGConnection *obexd_conn = NULL;
 static DBusGConnection *opc_obexd_conn = NULL;
+static GList *g_list = NULL;
 
 static guint event_id;
 
@@ -87,14 +88,14 @@ static bt_remote_dev_info_t *__bt_parse_device_properties(DBusMessageIter *item_
                        dev_info->address = g_strdup(address);
                } else if (strcasecmp(key, "Class") == 0) {
                        dbus_message_iter_get_basic(&iter_dict_val, &dev_info->class);
-               } else if (strcasecmp(key, "name") == 0) {
+               } else if (strcasecmp(key, "Name") == 0) {
                        dbus_message_iter_get_basic(&iter_dict_val, &value);
                        if (dev_info->name == NULL)
                                dev_info->name = g_strdup(value);
                } else if (strcasecmp(key, "Connected") == 0) {
                        dbus_message_iter_get_basic(&iter_dict_val,
                                                &dev_info->connected);
-               } else if (strcasecmp(key, "paired") == 0) {
+               } else if (strcasecmp(key, "Paired") == 0) {
                        dbus_message_iter_get_basic(&iter_dict_val,
                                                &dev_info->paired);
                } else if (strcasecmp(key, "Trusted") == 0) {
@@ -596,61 +597,6 @@ static int __bt_get_agent_signal_info(DBusMessage *msg, char **address,
        return BLUETOOTH_ERROR_NONE;
 }
 
-void _bt_handle_adapter_event(DBusMessage *msg)
-{
-       int result = BLUETOOTH_ERROR_NONE;
-       DBusMessageIter item_iter;
-       const char *member = dbus_message_get_member(msg);
-
-       ret_if(member == NULL);
-
-       if (strcasecmp(member, "DeviceCreated") == 0) {
-               const char *object_path = NULL;
-               char *address;
-               bt_remote_dev_info_t *remote_dev_info;
-
-               ret_if(_bt_is_device_creating() == FALSE);
-
-               /* Bonding from remote device */
-               address = g_malloc0(BT_ADDRESS_STRING_SIZE);
-
-               dbus_message_iter_init(msg, &item_iter);
-               dbus_message_iter_get_basic(&item_iter, &object_path);
-               dbus_message_iter_next(&item_iter);
-
-               _bt_convert_device_path_to_address(object_path, address);
-
-               remote_dev_info = _bt_get_remote_device_info(address);
-               if (remote_dev_info == NULL) {
-                       g_free(address);
-                       return;
-               }
-
-               _bt_free_device_info(remote_dev_info);
-               g_free(address);
-       } else if (strcasecmp(member, "InterfacesRemoved") == 0) {
-               const char *object_path = NULL;
-               char *address;
-
-               /* Bonding from remote device */
-               address = g_malloc0(BT_ADDRESS_STRING_SIZE);
-
-               dbus_message_iter_init(msg, &item_iter);
-               dbus_message_iter_get_basic(&item_iter, &object_path);
-               dbus_message_iter_next(&item_iter);
-
-               _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);
-
-               g_free(address);
-       }
-}
-
 gboolean _bt_stop_discovery_timeout_cb(gpointer user_data)
 {
        DBusGProxy *adapter_proxy;
@@ -699,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;
@@ -736,6 +681,7 @@ void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *
                                BLUETOOTH_EVENT_DISCOVERY_STARTED,
                                DBUS_TYPE_INT32, &result,
                                DBUS_TYPE_INVALID);
+                       _bt_get_temp_remote_devinfo();
                } else {
                        if (event_id > 0){
                                g_source_remove(event_id);
@@ -743,7 +689,7 @@ void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *
                        }
                        __bt_discovery_finished();
                }
-       } else if (strcasecmp(property, "Name") == 0) {
+       } else if (strcasecmp(property, "Alias") == 0) {
                char *name = NULL;
 
                dbus_message_iter_recurse(&dict_iter, &value_iter);
@@ -755,6 +701,19 @@ void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *
                                DBUS_TYPE_INT32, &result,
                                DBUS_TYPE_STRING, &name,
                                DBUS_TYPE_INVALID);
+       } else if (strcasecmp(property, "Powered") == 0) {
+               gboolean power = FALSE;
+
+               dbus_message_iter_recurse(&dict_iter, &value_iter);
+               dbus_message_iter_get_basic(&value_iter, &power);
+
+               BT_DBG("power state changed: %d", power);
+
+               if (power == TRUE)
+                       _bt_set_enabled();
+               else
+                       _bt_set_disabled();
+
        } else if (strcasecmp(property, "Discoverable") == 0) {
                gboolean discoverable = FALSE;
 
@@ -763,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);
 
@@ -827,9 +787,7 @@ static void __bt_device_remote_connected_properties(
                for (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;
 
@@ -858,100 +816,113 @@ void __bt_device_property_changed_event(DBusMessageIter *msg_iter, const char *p
 
        dbus_message_iter_recurse(msg_iter, &item_iter);
 
-       if (dbus_message_iter_get_arg_type(&item_iter)
-                                       != DBUS_TYPE_DICT_ENTRY) {
-               BT_ERR("This is bad format dbus\n");
-               return;
-       }
+       do {
+               if (dbus_message_iter_get_arg_type(&item_iter)
+                                               != DBUS_TYPE_DICT_ENTRY) {
+                       BT_ERR("This is bad format dbus\n");
+                       return;
+               }
 
-       dbus_message_iter_recurse(&item_iter, &dict_iter);
+               dbus_message_iter_recurse(&item_iter, &dict_iter);
 
-       dbus_message_iter_get_basic(&dict_iter, &property);
-       ret_if(property == NULL);
+               dbus_message_iter_get_basic(&dict_iter, &property);
+               ret_if(property == NULL);
 
-       ret_if(!dbus_message_iter_next(&dict_iter));
+               ret_if(!dbus_message_iter_next(&dict_iter));
 
-       if (strcasecmp(property, "Connected") == 0) {
-               gboolean connected = FALSE;
+               if (strcasecmp(property, "Connected") == 0) {
+                       gboolean connected = FALSE;
 
-               dbus_message_iter_recurse(&dict_iter, &value_iter);
-               dbus_message_iter_get_basic(&value_iter, &connected);
+                       dbus_message_iter_recurse(&dict_iter, &value_iter);
+                       dbus_message_iter_get_basic(&value_iter, &connected);
 
-               event = connected ? BLUETOOTH_EVENT_DEVICE_CONNECTED :
-                               BLUETOOTH_EVENT_DEVICE_DISCONNECTED;
+                       event = connected ? BLUETOOTH_EVENT_DEVICE_CONNECTED :
+                                       BLUETOOTH_EVENT_DEVICE_DISCONNECTED;
 
-               address = g_malloc0(BT_ADDRESS_STRING_SIZE);
+                       address = g_malloc0(BT_ADDRESS_STRING_SIZE);
 
-               _bt_convert_device_path_to_address(path, address);
+                       _bt_convert_device_path_to_address(path, address);
 
-               BT_DBG("connected: %d", connected);
-               BT_DBG("address: %s", address);
+                       BT_DBG("connected: %d", connected);
+                       BT_DBG("address: %s", address);
 
-               remote_dev_info = _bt_get_remote_device_info(address);
+                       remote_dev_info = _bt_get_remote_device_info(address);
 
-               if (remote_dev_info != NULL) {
-                       __bt_device_remote_connected_properties(
-                       remote_dev_info, address, connected);
-               }
+                       if (remote_dev_info != NULL) {
+                               __bt_device_remote_connected_properties(
+                               remote_dev_info, address, connected);
+                       }
 
-               /* Send event to application */
-               _bt_send_event(BT_DEVICE_EVENT,
-                               event,
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_STRING, &address,
-                               DBUS_TYPE_INVALID);
+                       /* Send event to application */
+                       _bt_send_event(BT_DEVICE_EVENT,
+                                       event,
+                                       DBUS_TYPE_INT32, &result,
+                                       DBUS_TYPE_STRING, &address,
+                                       DBUS_TYPE_INVALID);
 
-               g_free(address);
+                       g_free(address);
 
-       } else if (strcasecmp(property, "Paired") == 0) {
-               gboolean paired = FALSE;
-               bt_remote_dev_info_t *remote_dev_info;
+               } else if (strcasecmp(property, "Paired") == 0) {
+                       gboolean paired = FALSE;
+                       GList *node;
 
-               dbus_message_iter_recurse(&dict_iter, &value_iter);
-               dbus_message_iter_get_basic(&value_iter, &paired);
+                       dbus_message_iter_recurse(&dict_iter, &value_iter);
+                       dbus_message_iter_get_basic(&value_iter, &paired);
 
-               ret_if(paired == FALSE);
+                       ret_if(paired == FALSE);
 
-               /* BlueZ sends paired signal for each paired device */
-               /* during activation, We should ignore this, otherwise*/
-               /* application thinks that a new device got paired */
-               if (_bt_adapter_get_status() != BT_ACTIVATED) {
-                       BT_DBG("BT is not activated, so ignore this");
-                       return;
-               }
+                       /* BlueZ sends paired signal for each paired device */
+                       /* during activation, We should ignore this, otherwise*/
+                       /* application thinks that a new device got paired */
+                       if (_bt_adapter_get_status() != BT_ACTIVATED) {
+                               BT_DBG("BT is not activated, so ignore this");
+                               return;
+                       }
 
-               if (_bt_is_device_creating() == TRUE) {
-                       BT_DBG("Try to Pair by me");
-                       return;
-               }
+                       address = g_malloc0(BT_ADDRESS_STRING_SIZE);
 
-               address = g_malloc0(BT_ADDRESS_STRING_SIZE);
+                       _bt_convert_device_path_to_address(path, address);
 
-               _bt_convert_device_path_to_address(path, address);
+                       remote_dev_info = _bt_get_remote_device_info(address);
+                       if (remote_dev_info == NULL) {
+                               g_free(address);
+                               return;
+                       }
 
-               remote_dev_info = _bt_get_remote_device_info(address);
-               if (remote_dev_info == NULL) {
-                       g_free(address);
-                       return;
-               }
+                       node = g_list_first(g_list);
 
-               _bt_send_event(BT_ADAPTER_EVENT,
-                       BLUETOOTH_EVENT_BONDING_FINISHED,
-                       DBUS_TYPE_INT32, &result,
-                       DBUS_TYPE_STRING, &address,
-                       DBUS_TYPE_UINT32, &remote_dev_info->class,
-                       DBUS_TYPE_INT16, &remote_dev_info->rssi,
-                       DBUS_TYPE_STRING, &remote_dev_info->name,
-                       DBUS_TYPE_BOOLEAN, &remote_dev_info->paired,
-                       DBUS_TYPE_BOOLEAN, &remote_dev_info->connected,
-                       DBUS_TYPE_BOOLEAN, &remote_dev_info->trust,
-                       DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-                       &remote_dev_info->uuids, remote_dev_info->uuid_count,
-                       DBUS_TYPE_INVALID);
+                       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);
+                               }
+                               node = g_list_next(node);
+                       }
 
-               _bt_free_device_info(remote_dev_info);
-               g_free(address);
-       }
+                       if (_bt_is_device_creating() == TRUE) {
+                               BT_DBG("Try to Pair by me or already paired");
+                       } else {
+                               _bt_send_event(BT_ADAPTER_EVENT,
+                                       BLUETOOTH_EVENT_BONDING_FINISHED,
+                                       DBUS_TYPE_INT32, &result,
+                                       DBUS_TYPE_STRING, &address,
+                                       DBUS_TYPE_UINT32, &remote_dev_info->class,
+                                       DBUS_TYPE_INT16, &remote_dev_info->rssi,
+                                       DBUS_TYPE_STRING, &remote_dev_info->name,
+                                       DBUS_TYPE_BOOLEAN, &remote_dev_info->paired,
+                                       DBUS_TYPE_BOOLEAN, &remote_dev_info->connected,
+                                       DBUS_TYPE_BOOLEAN, &remote_dev_info->trust,
+                                       DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
+                                       &remote_dev_info->uuids, remote_dev_info->uuid_count,
+                                       DBUS_TYPE_INVALID);
+                       }
+
+                       _bt_free_device_info(remote_dev_info);
+                       g_free(address);
+               }
+       } while (dbus_message_iter_next(&item_iter));
 }
 
 void __bt_obex_property_changed_event(DBusMessageIter *msg_iter, const char *path)
@@ -1022,7 +993,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);
@@ -1138,7 +1109,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;
@@ -1164,6 +1134,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);
@@ -1265,7 +1236,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);
@@ -1563,6 +1534,23 @@ static int __bt_get_object_path(DBusMessage *msg, char **path)
        return BLUETOOTH_ERROR_NONE;
 }
 
+static void __bt_devices_list_free()
+{
+       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);
+               _bt_free_device_info(dev_info);
+
+               node = g_list_next(node);
+       }
+}
+
 static DBusHandlerResult __bt_manager_event_filter(DBusConnection *conn,
                                           DBusMessage *msg, void *data)
 {
@@ -1574,74 +1562,136 @@ static DBusHandlerResult __bt_manager_event_filter(DBusConnection *conn,
 
        retv_if(member == NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
 
+       BT_DBG("interface: %s | member: %s", dbus_message_get_interface(msg), member);
+
        if (strcasecmp(member, "InterfacesAdded") == 0) {
                char *object_path = NULL;
 
-               BT_DBG("InterfacesAdded");
-
                if (__bt_get_object_path(msg, &object_path)) {
                        BT_ERR("Fail to get the path");
                        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
                }
 
-               if (strcasecmp(object_path, BT_BLUEZ_HCI_PATH) == 0) {
-                       _bt_handle_adapter_added();
-               } else {
-                       bt_event = __bt_parse_event(msg);
-
-                       if (bt_event == BT_DEVICE_EVENT) {
-                               bt_remote_dev_info_t *dev_info;
-                               int result = BLUETOOTH_ERROR_NONE;
+               bt_event = __bt_parse_event(msg);
 
-                               retv_if(_bt_is_discovering() == FALSE,
-                                       DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
+               if (bt_event == BT_DEVICE_EVENT) {
+                       bt_remote_dev_info_t *dev_info;
+                       int result = BLUETOOTH_ERROR_NONE;
 
-                               dev_info = __bt_parse_interface(msg);
+                       retv_if(_bt_is_discovering() == FALSE,
+                               DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
 
-                               if (dev_info == NULL) {
-                                       BT_ERR("Fail to parse the properies");
-                                       return
-                                       DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-                               }
+                       dev_info = __bt_parse_interface(msg);
 
-                               if (dev_info->name == NULL)
-                                       dev_info->name = g_strdup("");
+                       if (dev_info == NULL) {
+                               BT_ERR("Fail to parse the properies");
+                               return
+                               DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+                       }
 
-                               _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);
+                       if (dev_info->name == NULL)
+                               dev_info->name = g_strdup("");
 
-                               _bt_free_device_info(dev_info);
-                       }else if (bt_event == BT_MEDIA_TRANSFER_EVENT) {
-                               __bt_parse_audio_properties(msg);
-                       }
+                       _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);
+                       g_list = g_list_append(g_list, dev_info);
+               } else if (bt_event == BT_MEDIA_TRANSFER_EVENT) {
+                       __bt_parse_audio_properties(msg);
                }
+
        } else if (strcasecmp(member, "InterfacesRemoved") == 0) {
-               BT_DBG("InterfacesRemoved");
+
                bt_event = __bt_parse_remove_event(msg);
 
                if (bt_event == BT_MEDIA_TRANSFER_EVENT){
                        _bt_parse_audio_remove_properties(msg);
-               }else{
-                       _bt_handle_adapter_event(msg);
-                }
+               } else if (bt_event == BT_DEVICE_EVENT) {
+                       char *object_path = NULL;
+                       if (__bt_get_object_path(msg, &object_path)) {
+                               BT_ERR("Fail to get the path");
+                               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+                       }
+
+                       if (strncasecmp(object_path, BT_BLUEZ_HCI_DEV_PATH, strlen(BT_BLUEZ_HCI_DEV_PATH)) == 0) {
+                               int result = BLUETOOTH_ERROR_NONE;
+                               char *address;
+                               bt_remote_dev_info_t *dev_info;
+                               GList * node;
+                               gboolean is_in_glist = FALSE;
+
+                               BT_DBG("device interface removed | path: %s", object_path);
+
+                               /* Remove bonding from remote device */
+                               address = g_malloc0(BT_ADDRESS_STRING_SIZE);
+
+                               _bt_convert_device_path_to_address(object_path, address);
+
+                               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) {
+                                               is_in_glist = TRUE;
+
+                                               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;
+                                       }
+                                       node = g_list_next(node);
+                               }
+                               /* if device is not in glist, we need to trig destroy bonding event */
+                               if (!is_in_glist) {
+                                       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);
+                               }
+                               g_free(address);
+                       }
+               } else {
+                       char *object_path = NULL;
+                       if (__bt_get_object_path(msg, &object_path)) {
+                               BT_ERR("Fail to get the path");
+                               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+                       }
+               }
        } else if (strcasecmp(member, "NameOwnerChanged") == 0) {
                gboolean value;
                char *name = NULL;
                char *previous = NULL;
                char *current = NULL;
 
+               BT_DBG("NameOwnerChanged");
+
                if (__bt_get_owner_info(msg, &name, &previous, &current)) {
                        BT_ERR("Fail to get the owner info");
                        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -1653,6 +1703,7 @@ static DBusHandlerResult __bt_manager_event_filter(DBusConnection *conn,
                if (strcasecmp(name, "org.bluez") == 0) {
                        BT_DBG("Bluetoothd is terminated");
                        _bt_handle_adapter_removed();
+                       __bt_devices_list_free();
                }
 
                _bt_obex_server_check_allocation(&value);
@@ -1670,8 +1721,6 @@ static DBusHandlerResult __bt_manager_event_filter(DBusConnection *conn,
                }
        } else  if (dbus_message_has_interface(msg, BT_PROPERTIES_INTERFACE)) {
                _bt_handle_property_changed_event(msg);
-       } else  if (dbus_message_has_interface(msg, BT_ADAPTER_INTERFACE)) {
-               _bt_handle_adapter_event(msg);
        } else  if (dbus_message_has_interface(msg, BT_INPUT_INTERFACE)) {
                _bt_handle_input_event(msg);
        } else  if (dbus_message_has_interface(msg, BT_NETWORK_SERVER_INTERFACE)) {
@@ -2218,43 +2267,29 @@ void _bt_opp_client_event_deinit(void)
 
 void _bt_get_temp_remote_devinfo(void)
 {
-       GArray *devinfo = NULL;
-       bt_remote_dev_info_t dev_info;
-       int result, size, i;
+       bt_remote_dev_info_t *dev_info;
+       GList *node;
+       int result = BLUETOOTH_ERROR_NONE;
 
-       devinfo = g_array_new(FALSE, FALSE, sizeof(gchar));
+       node = g_list_first(g_list);
 
-       result = _bt_get_remote_found_devices(&devinfo);
+       while (node != NULL) {
+               dev_info = (bt_remote_dev_info_t *)node->data;
 
-       if (result != BLUETOOTH_ERROR_NONE)
-       {
-               BT_DBG("_bt_get_temp_remote_devinfo failed with [%d]",result);
-       }
-       else
-       {
-               size = devinfo->len;
-               size = (devinfo->len) / sizeof(bt_remote_dev_info_t);
-
-               for (i=0; i<size; i++)
-               {
-                       dev_info = g_array_index(devinfo,
-                                       bt_remote_dev_info_t, i);
+               _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);
 
-                       _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);
        }
-
-       g_array_free(devinfo, TRUE);
 }