/*
- * Bluetooth-frwk
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hocheol Seo <hocheol.seo@samsung.com>
- * Girishashok Joshi <girish.joshi@samsung.com>
- * Chanyeol Park <chanyeol.park@samsung.com>
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
#include <string.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
#include <dbus/dbus.h>
#include <glib.h>
#include <dlog.h>
static GSList *server_list = NULL;
static GSList *event_list = NULL;
static int owner_sig_id = -1;
+static gboolean is_adapter_enabled = TRUE;
void _bt_add_push_request_id(int request_id)
{
}
handle = (bt_hf_call_list_s *)list;
call_status = g_malloc0(sizeof(bt_hf_call_status_info_t));
+ /* Fix : NULL_RETURNS */
+ retv_if(call_status == NULL, BLUETOOTH_ERROR_MEMORY_ALLOCATION);
+
call_status->number = g_strdup(number);
call_status->direction= dir;
call_status->status = status;
unsigned int dev_class = 0;
short rssi = 0;
gboolean paired = FALSE;
- gboolean connected = FALSE;
+ guint connected = 0;
gboolean trust = FALSE;
gsize uuid_count;
int result = BLUETOOTH_ERROR_NONE;
GVariant *manufacturer_var = NULL;
const char *manufacturer_data = NULL;
- g_variant_get(parameters, "(i&sun&sbbb@asn@ay)", &result, &address,
+ g_variant_get(parameters, "(isunsbub@asn@ay)", &result, &address,
&dev_class, &rssi, &name, &paired,
&connected, &trust, &string_var, &manufacturer_data_len, &manufacturer_var);
manufacturer_data = (char *)g_variant_get_data(manufacturer_var);
dev_info = g_malloc0(sizeof(bluetooth_device_info_t));
+ /* Fix : NULL_RETURNS */
+ if (dev_info == NULL) {
+ result = BLUETOOTH_ERROR_MEMORY_ALLOCATION;
+ goto done;
+ }
dev_info->rssi = rssi;
dev_info->paired = paired;
if (manufacturer_data)
for (i = 0; i < manufacturer_data_len; i++)
dev_info->manufacturer_data.data[i] = manufacturer_data[i];
-
+done:
*ret = result;
g_free(uuids);
g_variant_unref(string_var);
scan_data = (char *)g_variant_get_data(scan_var);
le_dev_info = g_malloc0(sizeof(bluetooth_le_device_info_t));
-
+ /* Fix : NULL_RETURNS */
+ if (le_dev_info == NULL) {
+ result = BLUETOOTH_ERROR_MEMORY_ALLOCATION;
+ goto done;
+ }
_bt_convert_addr_string_to_type(le_dev_info->device_address.addr, address);
le_dev_info->addr_type = addr_type;
le_dev_info->rssi = rssi;
if (scan_data)
le_dev_info->scan_resp_data.data.data[i] = scan_data[i];
+done:
*ret = result;
g_variant_unref(adv_var);
BT_DBG("+");
bt_event_info_t *event_info = user_data;
+ _bt_set_le_scan_status(FALSE);
+
if (is_initialized != FALSE) {
- _bt_common_event_cb(BLUETOOTH_EVENT_DISABLED,
- BLUETOOTH_ERROR_NONE, NULL,
- event_info->cb, event_info->user_data);
- _bt_common_event_cb(BLUETOOTH_EVENT_LE_DISABLED,
- BLUETOOTH_ERROR_NONE, NULL,
- event_info->cb, event_info->user_data);
+ if (is_adapter_enabled == TRUE) {
+ is_adapter_enabled = FALSE;
+ _bt_common_event_cb(BLUETOOTH_EVENT_DISABLED,
+ BLUETOOTH_ERROR_NONE, NULL,
+ event_info->cb, event_info->user_data);
+ _bt_common_event_cb(BLUETOOTH_EVENT_LE_DISABLED,
+ BLUETOOTH_ERROR_NONE, NULL,
+ event_info->cb, event_info->user_data);
+ }
}
obex_server_id = BT_NO_SERVER;
BT_ERR("Set vconf failed");
}
+ is_adapter_enabled = TRUE;
+
_bt_common_event_cb(BLUETOOTH_EVENT_ENABLED,
result, NULL,
event_info->cb, event_info->user_data);
disable_timer_id = g_timeout_add(BT_RELIABLE_DISABLE_TIME,
(GSourceFunc)__bt_reliable_disable_cb,
event_info);
+ } else {
+ is_adapter_enabled = FALSE;
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_DISABLED,
+ result, NULL,
+ event_info->cb, event_info->user_data);
}
+
_bt_common_event_cb(BLUETOOTH_EVENT_DISABLED,
result, NULL,
event_info->cb, event_info->user_data);
result, NULL,
event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_ADVERTISING_STARTED) == 0) {
- bluetooth_advertising_params_t adv_params = {0, };
-
- g_variant_get(parameters, "(idd)", &result,
- &adv_params.interval_min,
- &adv_params.interval_max);
+ int adv_handle;
+ g_variant_get(parameters, "(ii)", &result, &adv_handle);
_bt_common_event_cb(BLUETOOTH_EVENT_ADVERTISING_STARTED,
- result, &adv_params,
+ result, &adv_handle,
event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_ADVERTISING_STOPPED) == 0) {
- g_variant_get(parameters, "(i)", &result);
+ int adv_handle;
+
+ g_variant_get(parameters, "(ii)", &result, &adv_handle);
_bt_common_event_cb(BLUETOOTH_EVENT_ADVERTISING_STOPPED,
- result, NULL,
+ result, &adv_handle,
event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_ADVERTISING_MANUFACTURER_DATA_CHANGED) == 0) {
GVariant *var = NULL;
event_info->cb, event_info->user_data);
g_free(device_info);
- } else if (strcasecmp(signal_name, BT_DEVICE_DISAPPEARED) == 0) {
- bluetooth_device_info_t *device_info;
-
- device_info = __bt_get_device_info_in_message(parameters, &result);
- ret_if(device_info == NULL);
-
- _bt_common_event_cb(BLUETOOTH_EVENT_REMOTE_DEVICE_DISAPPEARED,
- result, device_info,
- event_info->cb, event_info->user_data);
- g_free(device_info);
} else if (strcasecmp(signal_name, BT_BOND_CREATED) == 0) {
bluetooth_device_info_t *device_info;
event_info->cb, event_info->user_data);
g_free(device_info);
+ } else if (strcasecmp(signal_name, BT_IPSP_INITIALIZED) == 0) {
+ gboolean ipsp_intialized = FALSE;
+ g_variant_get(parameters, "(b)", &ipsp_intialized);
+
+ BT_DBG("IPSP init state changed to : %d", ipsp_intialized);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_IPSP_INIT_STATE_CHANGED,
+ BLUETOOTH_ERROR_NONE, &ipsp_intialized,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_KBD_PASSKEY_DISPLAY_REQ_RECEIVED) == 0) {
+ const char *address = NULL;
+ const char *name = NULL;
+ const char *str_passkey = NULL;
+
+ bluetooth_authentication_request_info_t auth_info;
+ memset(&auth_info, 0x00, sizeof(bluetooth_authentication_request_info_t));
+
+ g_variant_get(parameters, "(i&s&s&s)", &result, &address, &name, &str_passkey);
+
+ g_strlcpy(auth_info.device_name.name, name,
+ BLUETOOTH_DEVICE_NAME_LENGTH_MAX + 1);
+ _bt_convert_addr_string_to_type(auth_info.device_address.addr,
+ address);
+ g_strlcpy(auth_info.str_passkey, str_passkey, strlen(str_passkey)+1);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_KEYBOARD_PASSKEY_DISPLAY,
+ result, &auth_info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_PIN_REQ_RECEIVED) == 0) {
+ const char *address = NULL;
+ const char *name = NULL;
+
+ bluetooth_authentication_request_info_t auth_info;
+ memset(&auth_info, 0x00, sizeof(bluetooth_authentication_request_info_t));
+
+ g_variant_get(parameters, "(i&s&s)", &result, &address, &name);
+
+ g_strlcpy(auth_info.device_name.name, name,
+ BLUETOOTH_DEVICE_NAME_LENGTH_MAX + 1);
+ _bt_convert_addr_string_to_type(auth_info.device_address.addr,
+ address);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_PIN_REQUEST,
+ result, &auth_info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_PASSKEY_REQ_RECEIVED) == 0) {
+ const char *address = NULL;
+ const char *name = NULL;
+
+ bluetooth_authentication_request_info_t auth_info;
+ memset(&auth_info, 0x00, sizeof(bluetooth_authentication_request_info_t));
+
+ g_variant_get(parameters, "(i&s&s)", &result, &address, &name);
+
+ g_strlcpy(auth_info.device_name.name, name,
+ BLUETOOTH_DEVICE_NAME_LENGTH_MAX + 1);
+ _bt_convert_addr_string_to_type(auth_info.device_address.addr,
+ address);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_PASSKEY_REQUEST,
+ result, &auth_info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_PASSKEY_CFM_REQ_RECEIVED) == 0) {
+ const char *address = NULL;
+ const char *name = NULL;
+ const char *str_passkey = NULL;
+
+ bluetooth_authentication_request_info_t auth_info;
+ memset(&auth_info, 0x00, sizeof(bluetooth_authentication_request_info_t));
+
+ g_variant_get(parameters, "(i&s&s&s)", &result, &address, &name, &str_passkey);
+
+ g_strlcpy(auth_info.device_name.name, name,
+ BLUETOOTH_DEVICE_NAME_LENGTH_MAX + 1);
+ _bt_convert_addr_string_to_type(auth_info.device_address.addr,
+ address);
+ g_strlcpy(auth_info.str_passkey, str_passkey, strlen(str_passkey)+1);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_PASSKEY_CONFIRM_REQUEST,
+ result, &auth_info,
+ event_info->cb, event_info->user_data);
}
}
event_info = (bt_event_info_t *)user_data;
ret_if(event_info == NULL);
+#ifdef GATT_NO_RELAY
+ gboolean gatt_interface = FALSE;
+
+ if (strcasecmp(interface_name, BT_GATT_CHARACTERISTIC_INTERFACE) == 0)
+ gatt_interface = TRUE;
+
+ if (strcasecmp(object_path, BT_DEVICE_PATH) != 0 &&
+ gatt_interface == FALSE)
+ return;
+ if (strcasecmp(interface_name, BT_EVENT_SERVICE) != 0 &&
+ gatt_interface == FALSE)
+ return;
+#else
if (strcasecmp(object_path, BT_DEVICE_PATH) != 0)
return;
if (strcasecmp(interface_name, BT_EVENT_SERVICE) != 0)
return;
+#endif
ret_if(signal_name == NULL);
_bt_common_event_cb(BLUETOOTH_EVENT_GATT_DISCONNECTED,
result, &dev_address,
event_info->cb, event_info->user_data);
+#ifdef GATT_NO_RELAY
+ } else if (strcasecmp(signal_name, BT_GATT_BLUEZ_CHAR_VAL_CHANGED) == 0) {
+#else
+ } else if (strcasecmp(signal_name, BT_GATT_CHAR_VAL_CHANGED) == 0) {
+#endif
+ const char *char_handle = NULL;
+ int len = 0;
+ const char * value = NULL;
+ GVariant *char_value_var = NULL;
+ bt_gatt_char_value_t char_val = { 0, };
+ BT_DBG("BT_GATT_CHAR_VAL_CHANGED");
+
+ g_variant_get(parameters, "(i&s@ay)", &result, &char_handle, &char_value_var);
+
+ len = g_variant_get_size(char_value_var);
+ if (len > 0)
+ value = (char *)g_variant_get_data(char_value_var);
+
+ char_val.char_handle = g_strdup(char_handle);
+ char_val.val_len = len;
+ /* Fix : FORWARD_NULL : g_variant_get_data can return NULL */
+ if (char_val.val_len > 0 && value != NULL) {
+ char_val.char_value = (unsigned char*) g_malloc0(char_val.val_len);
+ /* Fix : NULL_RETURNS */
+ if (char_val.char_value == NULL) {
+ BT_ERR("BLUETOOTH_ERROR_OUT_OF_MEMORY");
+ g_free(char_val.char_handle);
+ if (char_value_var)
+ g_variant_unref(char_value_var);
+ return;
+ }
+ memcpy(char_val.char_value, value, len);
+ _bt_common_event_cb(BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED,
+ result, &char_val,
+ event_info->cb, event_info->user_data);
+ g_free(char_val.char_value);
+ if (char_value_var)
+ g_variant_unref(char_value_var);
+ }
+ g_free(char_val.char_handle);
} else if (strcasecmp(signal_name, BT_DEVICE_CONNECTED) == 0) {
const char *address = NULL;
unsigned char addr_type;
_bt_common_event_cb(BLUETOOTH_EVENT_DEVICE_UNAUTHORIZED,
result, &dev_address,
event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_IPSP_CONNECTED) == 0) {
+ const char *address = NULL;
+ bluetooth_device_address_t dev_address = { {0} };
+
+ BT_DBG("BT_IPSP_CONNECTED");
+ g_variant_get(parameters, "(i&s)", &result, &address);
+
+ _bt_convert_addr_string_to_type(dev_address.addr, address);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_IPSP_CONNECTED,
+ result, &dev_address,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_IPSP_DISCONNECTED) == 0) {
+ const char *address = NULL;
+ bluetooth_device_address_t dev_address = { {0} };
+ BT_DBG("BT_IPSP_DISCONNECTED");
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+
+ _bt_convert_addr_string_to_type(dev_address.addr, address);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_IPSP_DISCONNECTED,
+ result, &dev_address,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_LE_DATA_LENGTH_CHANGED) == 0) {
+ const char *address = NULL;
+ bluetooth_device_address_t dev_address = { {0} };
+ uint tx_octets = 0;
+ uint tx_time = 0;
+ uint rx_octets = 0;
+ uint rx_time = 0;
+ bt_le_data_length_params_t params;
+
+ BT_DBG("BT_LE_DATA_LENGTH_CHANGED");
+
+ g_variant_get(parameters, "(i&sqqqq)", &result, &address,
+ tx_octets, tx_time, rx_octets, rx_time);
+
+ params.max_tx_octets = tx_octets;
+ params.max_tx_time = tx_time;
+ params.max_rx_octets = rx_octets;
+ params.max_rx_time = rx_time;
+
+ _bt_convert_addr_string_to_type(dev_address.addr, address);
+
+ memcpy(¶ms.device_address,
+ &dev_address, BLUETOOTH_ADDRESS_LENGTH);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_LE_DATA_LENGTH_CHANGED,
+ result, ¶ms, event_info->cb, event_info->user_data);
}
}
_bt_headset_event_cb(BLUETOOTH_EVENT_AV_DISCONNECTED,
result, address,
event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_A2DP_SOURCE_CONNECTED) == 0) {
+ char *address = NULL;
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+ _bt_a2dp_source_event_cb(BLUETOOTH_EVENT_AV_SOURCE_CONNECTED,
+ result, address,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_A2DP_SOURCE_DISCONNECTED) == 0) {
+ char *address = NULL;
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+
+ _bt_a2dp_source_event_cb(BLUETOOTH_EVENT_AV_SOURCE_DISCONNECTED,
+ result, address,
+ event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_SPEAKER_GAIN) == 0) {
unsigned int gain;
guint16 spkr_gain;
}
}
+void __bt_hid_device_event_filter(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ bt_event_info_t *event_info;
+ int result = BLUETOOTH_ERROR_NONE;
+
+ event_info = (bt_event_info_t *)user_data;
+ ret_if(event_info == NULL);
+
+ if (strcasecmp(object_path, BT_HID_DEVICE_PATH) != 0)
+ return;
+ if (strcasecmp(interface_name, BT_EVENT_SERVICE) != 0)
+ return;
+
+ ret_if(signal_name == NULL);
+
+ if (strcasecmp(signal_name, BT_HID_DEVICE_CONNECTED) == 0) {
+ const char *address = NULL;
+ bluetooth_device_address_t dev_address = { {0} };
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+
+ _bt_convert_addr_string_to_type(dev_address.addr,
+ address);
+
+ _bt_input_event_cb(BLUETOOTH_HID_DEVICE_CONNECTED,
+ result, &dev_address,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_HID_DEVICE_DISCONNECTED) == 0) {
+ const char *address = NULL;
+ bluetooth_device_address_t dev_address = { {0} };
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+
+ BT_DBG("address: %s", address);
+
+ _bt_convert_addr_string_to_type(dev_address.addr,
+ address);
+
+ _bt_input_event_cb(BLUETOOTH_HID_DEVICE_DISCONNECTED,
+ result, &dev_address,
+ event_info->cb, event_info->user_data);
+ }
+}
+void __bt_a2dp_source_event_filter(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ bt_event_info_t *event_info;
+ int result = BLUETOOTH_ERROR_NONE;
+ event_info = (bt_event_info_t *)user_data;
+ ret_if(event_info == NULL);
+
+ if (strcasecmp(object_path, BT_A2DP_SOURCE_PATH) != 0)
+ return;
+ if (strcasecmp(interface_name, BT_EVENT_SERVICE) != 0)
+ return;
+
+ ret_if(signal_name == NULL);
+
+ if (strcasecmp(signal_name, BT_A2DP_SOURCE_CONNECTED) == 0) {
+ char *address = NULL;
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+ _bt_a2dp_source_event_cb(BLUETOOTH_EVENT_AV_SOURCE_CONNECTED,
+ result, address,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_A2DP_SOURCE_DISCONNECTED) == 0) {
+ char *address = NULL;
+
+ g_variant_get(parameters, "(i&s)", &result, &address);
+
+ _bt_a2dp_source_event_cb(BLUETOOTH_EVENT_AV_SOURCE_DISCONNECTED,
+ result, address,
+ event_info->cb, event_info->user_data);
+ }
+}
+
void __bt_network_event_filter(GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
result, &status,
event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_MEDIA_TRACK_CHANGE) == 0) {
- GVariant *var = NULL;
media_metadata_attributes_t metadata;
const char *title;
const char *artist;
return;
ret_if(signal_name == NULL);
-
+ BT_DBG("Type: %s", g_variant_get_type_string(parameters));
if (strcasecmp(signal_name, BT_PBAP_CONNECTED) == 0) {
bt_pbap_connected_t connected = { { { 0 }, }, };
char *address = NULL;
- int enabled = -1;
-
- g_variant_get(parameters, "(i&si)", &result, &address, &enabled);
+ g_variant_get(parameters, "(is)", &result, &address);
BT_DBG("address: %s", address);
- BT_DBG("enabled: %d", enabled);
_bt_convert_addr_string_to_type(connected.btaddr.addr,
address);
- connected.connected = enabled;
+ if (result == 0)
+ connected.connected = 1;
+ else
+ connected.connected = 0;
_bt_common_event_cb(BLUETOOTH_PBAP_CONNECTED,
result, &connected,
event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_PBAP_DISCONNECTED) == 0) {
+ bt_pbap_connected_t disconnected = { { { 0 }, }, };
+ char *address = NULL;
+
+ g_variant_get(parameters, "(is)", &result, &address);
+ BT_DBG("address: %s", address);
+
+ _bt_convert_addr_string_to_type(disconnected.btaddr.addr,
+ address);
+ disconnected.connected = 0;
+
+ _bt_common_event_cb(BLUETOOTH_PBAP_CONNECTED,
+ result, &disconnected,
+ event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_PBAP_PHONEBOOK_SIZE) == 0) {
bt_pbap_phonebook_size_t pb_size = { { { 0 }, }, };
char *address = NULL;
int size = 0;
- g_variant_get(parameters, "(i&si)", &result, &address, &size);
+ g_variant_get(parameters, "(isi)", &result, &address, &size);
BT_DBG("address: %s", address);
BT_DBG("size: %d", size);
char *vcf_file = NULL;
int success = -1;
- g_variant_get(parameters, "(i&s&si)", &result, &address, &vcf_file, &success);
+ g_variant_get(parameters, "(issi)", &result, &address, &vcf_file, &success);
BT_DBG("address: %s", address);
BT_DBG("vcf_file: %s", vcf_file);
} else if (strcasecmp(signal_name, BT_PBAP_VCARD_LIST) == 0) {
bt_pbap_vcard_list_t vc_list = { { { 0 } }, };
char *address = NULL;
- unsigned int count = 0;
+ gsize count = 0;
gchar **list = NULL;
GVariant *string_var;
int success = -1;
int i = 0;
- g_variant_get(parameters, "(i&s@as)", &result, &address, &string_var);
+ g_variant_get(parameters, "(isv)", &result, &address, &string_var);
list = (gchar **)g_variant_get_strv(string_var, &count);
success = !result;
BT_DBG("address: %s", address);
+ BT_DBG("result: %d", result);
+ BT_DBG("count: %d", count);
for(i = 0; i < count; i++)
BT_DBG("%s", list[i]);
BT_DBG("success: %d", success);
char *vcf_file = NULL;
int success = -1;
- g_variant_get(parameters, "(i&s&si)", &result, &address, &vcf_file, &success);
+ g_variant_get(parameters, "(issi)", &result, &address, &vcf_file, &success);
BT_DBG("address: %s", address);
BT_DBG("vcf_file: %s", vcf_file);
} else if (strcasecmp(signal_name, BT_PBAP_SEARCH_PHONEBOOK) == 0) {
bt_pbap_phonebook_search_list_t vc_list = { { { 0 } }, };
char *address = NULL;
- unsigned int count = 0;
+ gsize count = 0;
gchar **list = NULL;
GVariant *string_var;
int success = -1;
int i = 0;
- g_variant_get(parameters, "(i&s@as)", &result, &address, &string_var);
+ g_variant_get(parameters, "(is@as)", &result, &address, &string_var);
list = (gchar **)g_variant_get_strv(string_var, &count);
success = !result;
ret_if(cb_data == NULL);
- g_object_unref(cb_data->conn);
g_free(cb_data);
}
int _bt_register_event(int event_type, void *event_cb, void *user_data)
{
- GError *error = NULL;
GDBusConnection *connection_type;
GDBusSignalCallback event_func;
bt_event_info_t *cb_data;
path = BT_HF_AGENT_PATH;
interface = BT_HF_SERVICE_INTERFACE;
break;
+ case BT_A2DP_SOURCE_EVENT:
+ BT_DBG("BT_A2DP_SOURCE_EVENT");
+ event_func = __bt_a2dp_source_event_filter;
+ path = BT_A2DP_SOURCE_PATH;
+ break;
+ case BT_HID_DEVICE_EVENT:
+ BT_DBG("BT_HID_DEVICE_EVENT");
+ event_func = __bt_hid_device_event_filter;
+ path = BT_HID_DEVICE_PATH;
+ break;
+#ifdef GATT_NO_RELAY
+ case BT_GATT_BLUEZ_EVENT:
+ BT_DBG("BT_GATT_BLUEZ_EVENT");
+ event_func = __bt_device_event_filter;
+ interface = BT_GATT_CHARACTERISTIC_INTERFACE;
+ path = NULL;
+ break;
+#endif
default:
BT_ERR("Unknown event");
return BLUETOOTH_ERROR_INTERNAL;
}
- connection_type = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
- if (connection_type == NULL) {
- if (error) {
- BT_ERR("Unable to get the bus: %s", error->message);
- g_clear_error(&error);
- }
+ connection_type = _bt_gdbus_get_system_gconn();
+ if (connection_type == NULL)
return BLUETOOTH_ERROR_INTERNAL;
- }
cb_data = g_new0(bt_event_info_t, 1);
cb_data->event_type = event_type;
- cb_data->conn = connection_type;
cb_data->cb = event_cb;
cb_data->user_data = user_data;
return BLUETOOTH_ERROR_INTERNAL;
}
- connection_type = cb_data->conn;
+ connection_type = _bt_gdbus_get_system_gconn();
event_list = g_slist_remove(event_list, (void *)cb_data);