static int obex_server_id;
static guint disable_timer_id;
static gboolean is_initialized;
-static GSList *sending_list = NULL;
-static GSList *server_list = NULL;
-static GSList *event_list = NULL;
-static int owner_sig_id = -1;
+static GSList *sending_list;
+static GSList *server_list;
+static GSList *event_list;
+static guint owner_sig_id;
void _bt_add_push_request_id(int request_id)
{
_bt_rfcomm_server_free_all();
#endif
- _bluetooth_hid_free_hid_info();
+ _bt_hid_free_hid_info();
BT_DBG("-");
return FALSE;
address);
int ctrl = -1, intr = -1;
_bt_hid_device_get_fd(address, &ctrl, &intr);
- if (ctrl != -1 && intr != -1) {
- new_hid_connection(NULL, ctrl, &dev_address);
- new_hid_connection(NULL, intr, &dev_address);
- }
+ if (ctrl != -1 && intr != -1)
+ _bt_hid_new_connection(&dev_address, ctrl, intr);
+ else
+ BT_ERR("fd is invalid.(ctrl=%d, intr=%d)", ctrl, intr);
} else if (strcasecmp(signal_name, BT_INPUT_HID_DEVICE_DISCONNECTED) == 0) {
const char *address = NULL;
g_variant_get(parameters, "(i&s)", &result, &address);
g_variant_get(folder_list_var, "(aa{sv})", &iter);
folders_struct.size = g_variant_iter_n_children(iter);
- folders_struct.names = (char**) malloc(folders_struct.size * sizeof(*(folders_struct.names)));
+ folders_struct.names = (char**) g_malloc0(folders_struct.size * sizeof(*(folders_struct.names)));
BT_DBG("g_variant_iter_n_children: %d", folders_struct.size);
GVariantIter* res = NULL;
int i = 0;
free(folders_struct.names[i]);
folders_struct.names[i] = NULL;
}
- free(folders_struct.names);
+ g_free(folders_struct.names);
g_variant_unref(folder_list_var);
fields_info.size = g_variant_iter_n_children(iter);
char* field = NULL;
- fields_info.fields = malloc(fields_info.size * sizeof(char*));
+ fields_info.fields = g_malloc0(fields_info.size * sizeof(char*));
while (g_variant_iter_loop(iter, "s", &field)) {
fields_info.fields[i] = strdup(field);
i++;
free(fields_info.fields[i]);
fields_info.fields[i] = NULL;
}
- free(fields_info.fields);
+ g_free(fields_info.fields);
__bt_remove_push_request_id(request_id);
g_variant_unref(value);
g_variant_get(messages_list_var, "(a{oa{sv}})", &iter);
messages_struct.size = g_variant_iter_n_children(iter);
messages_struct.message_items = (bt_map_client_message_item_t*)
- malloc(messages_struct.size * sizeof(*(messages_struct.message_items)));
+ g_malloc(messages_struct.size * sizeof(*(messages_struct.message_items)));
BT_DBG("g_variant_iter_n_children: %d", messages_struct.size);
char *object = NULL;
free(messages_struct.message_items[i].type);
free(messages_struct.message_items[i].status);
}
- free(messages_struct.message_items);
+ g_free(messages_struct.message_items);
g_variant_unref(messages_list_var);
} else if (strcasecmp(signal_name, BT_MAP_GET_MESSAGE_COMPLETE) == 0) {
if (strcasecmp(signal_name, "Connected") == 0) {
char *address = NULL;
- g_variant_get(parameters, "(s)", &address);
+ g_variant_get(parameters, "(&s)", &address);
_bt_hf_event_cb(BLUETOOTH_EVENT_HF_CONNECTED,
result, address,
event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, "Disconnected") == 0) {
char *address = NULL;
- g_variant_get(parameters, "(s)", &address);
+ g_variant_get(parameters, "(&s)", &address);
_bt_hf_event_cb(BLUETOOTH_EVENT_HF_DISCONNECTED,
result, address,
event_info->cb, event_info->user_data);
}
buffer = (char *) g_variant_get_data(byte_var);
memcpy(act_req.tds_data.data, buffer, act_req.tds_data.length);
+ g_variant_unref(byte_var);
_bt_convert_addr_string_to_type(act_req.rem_addr.addr, address);
ind_res.tds_data.length = g_variant_get_size(byte_var);
buffer = (char *) g_variant_get_data(byte_var);
+ BT_DBG("[len = %d]", ind_res.tds_data.length);
memcpy(ind_res.tds_data.data, buffer, ind_res.tds_data.length);
_bt_convert_addr_string_to_type(ind_res.rem_addr.addr, address);
/* Extract data from DBUS params */
g_variant_get(parameters, "(i&sn@ay)", &result, &handle, &data_len, &var);
+ if (!var) {
+ BT_ERR("No data");
+ return;
+ }
data = (char *)g_variant_get_data(var);
BT_DBG("Handle [%s]", handle);
result, info,
event_info->cb, event_info->user_data);
- if (info->handle) {
+ if (info->handle)
g_free(info->handle);
- }
if (info->data) {
g_free(info->data);
g_free(info);
}
- if (var)
- g_variant_unref(var);
+ g_variant_unref(var);
} else if (strcasecmp(signal_name, BT_OTP_NOTIFICATION_ENABLED) == 0) {
BT_DBG("OTP Notification Enabled event");
char *handle = NULL;
char *handle = NULL;
g_variant_get(parameters, "(i&s@ay)", &result, &handle, &byte_var);
+ if (!byte_var) {
+ BT_ERR("No Indication data from Server");
+ return;
+ }
ind_res = g_malloc0(sizeof(bluetooth_otp_resp_info_t));
ind_res->data_length = g_variant_get_size(byte_var);
result, ind_res,
event_info->cb, event_info->user_data);
- if (ind_res->handle) {
+ if (ind_res->handle)
g_free(ind_res->handle);
- }
if (ind_res->data) {
g_free(ind_res->data);
g_free(ind_res);
}
- if (byte_var)
- g_variant_unref(byte_var);
+ g_variant_unref(byte_var);
} else if (strcasecmp(signal_name, BT_OTC_STATE_CHANGED) == 0) {
BT_DBG("OTC State Changed");
char *address = NULL;
GDBusConnection *connection_type;
connection_type = _bt_gdbus_get_system_gconn();
- if (connection_type != NULL && owner_sig_id != -1) {
+ if (connection_type != NULL && owner_sig_id > 0) {
g_dbus_connection_signal_unsubscribe(connection_type,
owner_sig_id);
- owner_sig_id = -1;
+ owner_sig_id = 0;
+ }
+}
+
+static void __bt_gatt_get_uuid_from_path(char *path, char **service_uuid)
+{
+ GDBusProxy *proxy = NULL;
+ GError *err = NULL;
+ GDBusConnection *g_conn;
+ GVariant *ret = NULL;
+ GVariant *value = NULL;
+
+ g_conn = _bt_gdbus_get_system_gconn();
+ ret_if(g_conn == NULL);
+
+ proxy = g_dbus_proxy_new_sync(g_conn,
+ G_DBUS_PROXY_FLAGS_NONE, NULL,
+ BT_BLUEZ_NAME,
+ path,
+ BT_PROPERTIES_INTERFACE,
+ NULL, &err);
+
+ ret_if(proxy == NULL);
+
+ ret = g_dbus_proxy_call_sync(proxy, "Get",
+ g_variant_new("(ss)", GATT_SERV_INTERFACE, "UUID"),
+ G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+ if (err) {
+ BT_ERR("DBus Error : %s", err->message);
+ g_clear_error(&err);
+ } else {
+ g_variant_get(ret, "(v)", &value);
+ *service_uuid = g_variant_dup_string(value, NULL);
+ g_variant_unref(value);
+ g_variant_unref(ret);
}
+
+ if (proxy)
+ g_object_unref(proxy);
+
+ return;
}
+
static void __bt_manager_event_filter(GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
GVariantIter *interface_iter = NULL;
char *interface_str = NULL;
bt_gatt_service_change_t change;
- char address[BT_ADDRESS_STRING_SIZE] = { 0 };
char secure_address[BT_ADDRESS_STRING_SIZE] = { 0 };
bt_user_info_t *user_info = NULL;
+ user_info = _bt_get_user_data(BT_COMMON);
+ if (user_info == NULL) {
+ BT_ERR("There is no registered common event callback");
+ return;
+ }
+
if (strcasecmp(signal_name, "GattServiceAdded") == 0) {
g_variant_get(parameters, "(&s)", &path);
- _bt_convert_device_path_to_address(path, address);
- _bt_convert_addr_string_to_type(change.device_addr.addr, address);
- _bt_convert_addr_string_to_secure_string(secure_address, address);
+ _bt_convert_device_path_to_addr_type(path, change.device_addr.addr);
+ _bt_convert_addr_type_to_secure_string(secure_address,
+ change.device_addr.addr);
if (_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr)
== FALSE) {
BT_INFO("GATT Service [%s] added, but no watcher for %s",
- path, secure_address);
+ path, secure_address);
return;
- } else
+ } else {
+ char *uuid = NULL;
+ char *name = NULL;
+ __bt_gatt_get_uuid_from_path(path, &uuid);
+ bluetooth_get_uuid_name(uuid, &name);
+
BT_INFO(" ### GATT Service added [%s] [%s]",
- path, secure_address);
+ path, name);
+ g_free(name);
+ g_free(uuid);
+ }
change.svc_path = g_strdup(path);
change.change_type = BLUETOOTH_GATT_SERVICE_CHANGE_TYPE_ADD;
-
- user_info = _bt_get_user_data(BT_COMMON);
- if (user_info != NULL) {
- _bt_common_event_cb(
- BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
- BLUETOOTH_ERROR_NONE, &change,
- user_info->cb, user_info->user_data);
- }
-
+ _bt_common_event_cb(BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
+ BLUETOOTH_ERROR_NONE, &change,
+ user_info->cb, user_info->user_data);
g_free(change.svc_path);
} else if (strcasecmp(signal_name, "InterfacesRemoved") == 0) {
- g_variant_get(parameters, "(&oas)",
- &path, &interface_iter);
-
+ g_variant_get(parameters, "(&oas)", &path, &interface_iter);
if (!path) {
BT_ERR("Invalid adapter path");
+ g_variant_iter_free(interface_iter);
return;
}
- _bt_convert_device_path_to_address(path, address);
- _bt_convert_addr_string_to_type(change.device_addr.addr, address);
- _bt_convert_addr_string_to_secure_string(secure_address, address);
-
- if (_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr)
- == FALSE) {
- BT_INFO("GATT Service [%s] removed, but no watcher for %s",
- path, secure_address);
+ _bt_convert_device_path_to_addr_type(path, change.device_addr.addr);
+ if (!_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr)) {
+ g_variant_iter_free(interface_iter);
return;
}
- while (g_variant_iter_loop(interface_iter, "s", &interface_str)) {
- if (g_strcmp0(interface_str, GATT_SERV_INTERFACE) == 0) {
- change.svc_path = g_strdup(path);
- change.change_type = BLUETOOTH_GATT_SERVICE_CHANGE_TYPE_REMOVE;
+ while (g_variant_iter_loop(interface_iter, "&s", &interface_str)) {
+ if (g_strcmp0(interface_str, GATT_SERV_INTERFACE) != 0)
+ continue;
- BT_INFO(" ### GATT Service removed [%s] [%s]",
- path, secure_address);
+ BT_INFO(" ### GATT Service removed [%s]", path);
- user_info = _bt_get_user_data(BT_COMMON);
- if (user_info != NULL) {
- _bt_common_event_cb(
- BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
- BLUETOOTH_ERROR_NONE, &change,
- user_info->cb, user_info->user_data);
- }
-
- g_free(change.svc_path);
- break;
- }
+ change.svc_path = g_strdup(path);
+ change.change_type = BLUETOOTH_GATT_SERVICE_CHANGE_TYPE_REMOVE;
+ _bt_common_event_cb(
+ BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
+ BLUETOOTH_ERROR_NONE, &change,
+ user_info->cb, user_info->user_data);
+ g_free(change.svc_path);
+ break;
}
g_variant_iter_free(interface_iter);
}
int _bt_register_manager_subscribe_signal(gboolean subscribe)
{
GDBusConnection *g_conn;
- static int service_added_id = -1;
- static int interface_removed_id = -1;
+ static guint service_added_id = 0;
+ static guint interface_removed_id = 0;
g_conn = _bt_gdbus_get_system_gconn();
if (g_conn == NULL)
return BLUETOOTH_ERROR_INTERNAL;
if (subscribe == TRUE) {
- if (service_added_id == -1) {
+ if (service_added_id == 0) {
service_added_id = g_dbus_connection_signal_subscribe(g_conn,
NULL, GATT_SERV_INTERFACE,
"GattServiceAdded", NULL, NULL, 0,
__bt_manager_event_filter,
NULL, NULL);
}
- if (interface_removed_id == -1) {
+ if (interface_removed_id == 0) {
interface_removed_id = g_dbus_connection_signal_subscribe(g_conn,
NULL, BT_MANAGER_INTERFACE,
"InterfacesRemoved", NULL, NULL, 0,
NULL, NULL);
}
} else {
- if (service_added_id != -1) {
+ if (service_added_id > 0) {
g_dbus_connection_signal_unsubscribe(g_conn,
service_added_id);
- service_added_id = -1;
+ service_added_id = 0;
}
- if (interface_removed_id != -1) {
+ if (interface_removed_id > 0) {
g_dbus_connection_signal_unsubscribe(g_conn,
interface_removed_id);
- interface_removed_id = -1;
+ interface_removed_id = 0;
}
}