+ } 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;
+
+ 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) {
+ 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;
+ }
+ node = g_list_next(node);
+ }
+
+ 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;
+ }
+ }