+
+ if (property)
+ g_free(property);
+ g_variant_unref(value);
+}
+
+void _bt_handle_sink_event(GVariant *msg, const char *path)
+{
+ GVariantIter value_iter;
+ char *property = NULL;
+
+ bt_headset_wait_t *wait_list;
+
+ GVariant *child = NULL;
+ GVariant *val = NULL;
+ GVariant *param = NULL;
+ g_variant_iter_init(&value_iter, msg);
+ while ((child = g_variant_iter_next_value(&value_iter))) {
+
+ g_variant_get(child, "{sv}", &property, &val);
+
+ ret_if(property == NULL);
+
+ BT_DBG("Property = %s \n", property);
+
+
+ if (strcasecmp(property, "State") == 0) {
+ int result = BLUETOOTH_ERROR_NONE;
+ char *value;
+
+ g_variant_get(val, "s", &value);
+ BT_DBG("value: %s", value);
+
+ if (g_strcmp0(value, "disconnected") == 0) {
+ char *address;
+
+ address = g_malloc0(BT_ADDRESS_STRING_SIZE);
+
+ _bt_convert_device_path_to_address(path, address);
+
+ __bt_set_device_values(FALSE,
+ VCONFKEY_BT_DEVICE_A2DP_HEADSET_CONNECTED);
+ param = g_variant_new("(is)", result, address);
+ _bt_send_event(BT_HEADSET_EVENT,
+ BLUETOOTH_EVENT_AV_DISCONNECTED,
+ param);
+
+ /* Remove data from the connected list */
+ _bt_remove_headset_from_list(BT_AUDIO_A2DP, address);
+ wait_list = _bt_get_audio_wait_data();
+ if (wait_list == NULL) {
+ g_free(value);
+ g_free(property);
+ g_variant_unref(val);
+ g_variant_unref(child);
+ g_free(address);
+ return;
+ }
+
+ if (((wait_list->type == BT_AUDIO_ALL) &&
+ (wait_list->ag_flag == TRUE)) ||
+ (wait_list->type == BT_AUDIO_A2DP) ||
+ (wait_list->disconnection_type == BT_AUDIO_A2DP)) {
+ bluetooth_device_address_t device_address;
+ _bt_convert_addr_string_to_type(
+ device_address.addr,
+ wait_list->address);
+
+ _bt_audio_connect(wait_list->req_id,
+ wait_list->type,
+ &device_address,
+ NULL);
+ }
+ g_free(address);
+ } else if (strcasecmp(value, "Connected") == 0) {
+ char *address;
+ char connected_address[BT_ADDRESS_STRING_SIZE + 1];
+ bluetooth_device_address_t device_address;
+ gboolean connected;
+
+ address = g_malloc0(BT_ADDRESS_STRING_SIZE);
+
+ _bt_convert_device_path_to_address(path, address);
+
+ __bt_set_device_values(TRUE,
+ VCONFKEY_BT_DEVICE_A2DP_HEADSET_CONNECTED);
+ param = g_variant_new("(is)", result, address);
+ _bt_send_event(BT_HEADSET_EVENT,
+ BLUETOOTH_EVENT_AV_CONNECTED,
+ param);
+ /* Check for existing Media device to disconnect */
+ connected = _bt_is_headset_type_connected(BT_AUDIO_A2DP,
+ connected_address);
+ if (connected) {
+ /* Match connected device address */
+ if (g_strcmp0(connected_address, address) != 0) {
+ /* Convert BD adress from string type */
+ _bt_convert_addr_string_to_type(
+ device_address.addr,
+ connected_address);
+ _bt_audio_disconnect(0, BT_AUDIO_A2DP,
+ &device_address, NULL);
+ }
+ }
+
+ /* Add data to the connected list */
+ _bt_add_headset_to_list(BT_AUDIO_A2DP,
+ BT_STATE_CONNECTED, address);
+
+ g_free(address);
+ }
+ g_free(value);
+ }
+ g_free(property);
+ g_variant_unref(val);
+ g_variant_unref(child);
+ }