X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service%2Fbt-service-pbap.c;h=9132225643b201259022f29f51480aaf61d18435;hb=14e5154772b9411a4941942e24cb600a103efa2e;hp=189ae5db1b1cb09980f66215d820ccc8a270372e;hpb=d9b08c1cb048357d6bdfc8ce9ce6f59ef364a4ad;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-service/bt-service-pbap.c b/bt-service/bt-service-pbap.c old mode 100755 new mode 100644 index 189ae5d..9132225 --- a/bt-service/bt-service-pbap.c +++ b/bt-service/bt-service-pbap.c @@ -20,10 +20,9 @@ #include #include #include -#if !defined(LIBNOTIFY_SUPPORT) && !defined(LIBNOTIFICATION_SUPPORT) #include -#endif #include +#include #include "bt-internal-types.h" #include "bt-service-common.h" @@ -32,7 +31,6 @@ #include #include -#define PBAP_UUID "0000112f-0000-1000-8000-00805f9b34fb" #define PBAP_OBEX_CLIENT_SERVICE "org.bluez.obex" #define PBAP_OBEX_CLIENT_PATH "/org/bluez/obex" #define PBAP_OBEX_CLIENT_INTERFACE "org.bluez.obex.Client1" @@ -44,6 +42,9 @@ #define PBAP_NUM_OF_FIELDS_ENTRY 29 #define PBAP_FIELD_ALL (0xFFFFFFFFFFFFFFFFULL) +#define PBAP_DEFAULT_DOWNLAOD_PATH "/opt/usr/home/owner/media/Downloads" +#define PBAP_DEFAULT_FILE_NAME "pb.vcf" + char *FIELDS[] = { "VERSION", "FN", @@ -108,8 +109,8 @@ char *SEARCH_FIELD[] = { static char *g_pbap_session_path = NULL; static char *g_pbap_server_address = NULL; -static GDBusConnection *dbus_connection = NULL; static GDBusProxy *g_pbap_proxy = NULL; +static gboolean g_is_pbap_connecting; static struct { int type; @@ -204,7 +205,7 @@ void _bt_pbap_obex_transfer_completed(const char *transfer_path, gboolean transf signal = g_variant_new("(issi)", result, transfer_info->remote_device, transfer_info->filename, success); - switch(transfer_info->operation) { + switch (transfer_info->operation) { case PULL_ALL: { _bt_send_event(BT_PBAP_CLIENT_EVENT, BLUETOOTH_PBAP_PHONEBOOK_PULL, @@ -253,6 +254,26 @@ void _bt_obex_pbap_client_disconnect(char *path) BT_DBG("-"); } +static int __bt_pbap_get_error(const char *error_message) +{ + if (error_message == NULL) { + BT_ERR("Error message NULL"); + return BLUETOOTH_ERROR_INTERNAL; + } + + BT_ERR("Error message = %s", error_message); + if (g_strcmp0(error_message, "Unable to find service record") == 0) + return BLUETOOTH_ERROR_SERVICE_NOT_FOUND; + else if (g_strcmp0(error_message, "Transport got disconnected") == 0) + return BLUETOOTH_ERROR_AUTHORIZATION_REJECTED; + else if (g_str_has_prefix(error_message, "Connection refused") == 0) + return BLUETOOTH_ERROR_AUTHENTICATION_REJECTED; + else if (g_strcmp0(error_message, "Timed out waiting for response") == 0) + return BLUETOOTH_ERROR_TIMEOUT; + else + return BLUETOOTH_ERROR_INTERNAL; +} + void __bt_pbap_connect_cb(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { @@ -269,9 +290,11 @@ void __bt_pbap_connect_cb(GDBusProxy *proxy, if (value == NULL) { BT_ERR("g_dbus_proxy_call_finish failed"); if (error) { - BT_ERR("errCode[%x], message[%s]\n", - error->code, error->message); - g_clear_error(&error); + g_dbus_error_strip_remote_error(error); + result = __bt_pbap_get_error(error->message); + BT_ERR("Failed to coonect with error[0x%x][%s]", + result, error->message); + g_error_free(error); } g_object_unref(g_pbap_proxy); g_pbap_proxy = NULL; @@ -282,6 +305,8 @@ void __bt_pbap_connect_cb(GDBusProxy *proxy, BT_DBG("Session Path = %s\n", g_pbap_session_path); result = BLUETOOTH_ERROR_NONE; g_pbap_server_address = g_strdup(address_string); + + g_variant_unref(value); } signal = g_variant_new("(is)", result, address_string); @@ -292,11 +317,14 @@ void __bt_pbap_connect_cb(GDBusProxy *proxy, g_free(address_string); BT_DBG("-"); + + g_is_pbap_connecting = FALSE; } int _bt_pbap_connect(const bluetooth_device_address_t *address) { BT_DBG("+"); + GDBusConnection *g_conn; GError *error = NULL; char address_string[18] = { 0, }; char *ptr = NULL; @@ -309,6 +337,9 @@ int _bt_pbap_connect(const bluetooth_device_address_t *address) if (g_pbap_session_path) return BLUETOOTH_ERROR_ALREADY_CONNECT; + if (g_is_pbap_connecting == TRUE) + return BLUETOOTH_ERROR_IN_PROGRESS; + BT_DBG("BD Address [%2.2X %2.2X %2.2X %2.2X %2.2X %2.2X]", address->addr[0], address->addr[1], address->addr[2], address->addr[3], @@ -316,13 +347,12 @@ int _bt_pbap_connect(const bluetooth_device_address_t *address) _bt_convert_addr_type_to_string(address_string, (unsigned char *)address->addr); BT_DBG("Address String: %s", address_string); - dbus_connection = _bt_get_session_gconn(); - if (dbus_connection == NULL) { - BT_ERR("Couldn't connect to system bus"); - return EXIT_FAILURE; + g_conn = _bt_gdbus_get_session_gconn(); + if (g_conn == NULL) { + BT_ERR("Couldn't connect to session bus"); + return BLUETOOTH_ERROR_INTERNAL; } - - g_pbap_proxy = g_dbus_proxy_new_sync(dbus_connection, + g_pbap_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, PBAP_OBEX_CLIENT_SERVICE, PBAP_OBEX_CLIENT_PATH, PBAP_OBEX_CLIENT_INTERFACE, NULL, &error); @@ -332,7 +362,7 @@ int _bt_pbap_connect(const bluetooth_device_address_t *address) ERR("Unable to create proxy: %s", error->message); g_clear_error(&error); } - return -1; + return BLUETOOTH_ERROR_INTERNAL; } /* Create Hash*/ @@ -345,14 +375,14 @@ int _bt_pbap_connect(const bluetooth_device_address_t *address) GVariant *temp = g_variant_new("(s@a{sv})", ptr, args); + g_is_pbap_connecting = TRUE; g_dbus_proxy_call(g_pbap_proxy, "CreateSession", temp, G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback)__bt_pbap_connect_cb, ptr); - g_free(ptr); BT_DBG("-"); - return 0; + return BLUETOOTH_ERROR_NONE; } void __bt_pbap_disconnect_cb(GDBusProxy *proxy, @@ -361,7 +391,6 @@ void __bt_pbap_disconnect_cb(GDBusProxy *proxy, char *address_string = user_data; GError *error = NULL; GVariant *value; - GVariant *signal = NULL; int result = BLUETOOTH_ERROR_INTERNAL ; BT_DBG("Address = %s", address_string); @@ -389,12 +418,19 @@ void __bt_pbap_disconnect_cb(GDBusProxy *proxy, result = BLUETOOTH_ERROR_NONE; selected_path.folder = -1; selected_path.type = -1; + + g_variant_unref(value); } - signal = g_variant_new("(is)", result, address_string); - _bt_send_event(BT_PBAP_CLIENT_EVENT, - BLUETOOTH_PBAP_DISCONNECTED, - signal); + /* If the result is success, the event reciever will send the disconnect event */ + if (result != BLUETOOTH_ERROR_NONE) { + GVariant *signal = NULL; + + signal = g_variant_new("(is)", result, address_string); + _bt_send_event(BT_PBAP_CLIENT_EVENT, + BLUETOOTH_PBAP_DISCONNECTED, + signal); + } g_free(address_string); BT_DBG("-"); @@ -427,7 +463,7 @@ int _bt_pbap_disconnect(const bluetooth_device_address_t *address) G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback)__bt_pbap_disconnect_cb, ptr); - return 0; + return BLUETOOTH_ERROR_NONE; } void __bt_pbap_select_cb(GDBusProxy *proxy, @@ -568,6 +604,8 @@ void __bt_pbap_get_phonebook_cb(GDBusProxy *proxy, transfer_info->filename = (char *)filename; transfer_info->operation = PULL_ALL; transfers = g_slist_append(transfers, transfer_info); + + g_variant_unref(value); } g_object_unref(proxy); @@ -606,16 +644,21 @@ void __bt_pbap_get_vcard_list_cb(GDBusProxy *proxy, GVariant *child = NULL; GVariant *value1 = NULL; - g_variant_get(value ,"(@a(ss))", &value1); /* Format for value1 a(ss)*/ - gsize items = g_variant_iter_init (&iter, value1); + g_variant_get(value, "(@a(ss))", &value1); /* Format for value1 a(ss)*/ + gsize items = g_variant_iter_init(&iter, value1); vcard_list = g_new0(char *, items + 1); - for (i = 0; (child = g_variant_iter_next_value (&iter)) != NULL; i++) { - g_variant_get(child ,"(&s&s)", &elname, &elval); + for (i = 0; (child = g_variant_iter_next_value(&iter)) != NULL; i++) { + g_variant_get(child, "(&s&s)", &elname, &elval); memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH); - g_snprintf (list_entry, PBAP_VCARDLIST_MAXLENGTH - 1, +#if 0 + g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1, "", elname, elval); +#else + g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1, + "%s", elval); +#endif //If possible send as Array of BT_DBG("%s", list_entry); vcard_list[i] = g_strdup(list_entry); @@ -628,7 +671,7 @@ void __bt_pbap_get_vcard_list_cb(GDBusProxy *proxy, } BT_DBG("Address = %s", address_string); - GVariant *temp = g_variant_new_strv((const gchar * const*)vcard_list, length); + GVariant *temp = g_variant_new_strv((const gchar * const *)vcard_list, length); signal = g_variant_new("(isv)", result, address_string, temp); _bt_send_event(BT_PBAP_CLIENT_EVENT, @@ -669,7 +712,7 @@ void __bt_pbap_get_vcard_cb(GDBusProxy *proxy, } else { g_variant_get(value, "(o@a{sv})", &transfer, &properties); - if (g_variant_lookup (properties, "Filename", "s", &filename) == FALSE) + if (g_variant_lookup(properties, "Filename", "s", &filename) == FALSE) filename = NULL; BT_DBG("Transfer Path: %s", transfer); @@ -721,15 +764,15 @@ void __bt_pbap_search_phonebook_cb(GDBusProxy *proxy, GVariant *child = NULL; GVariant *value1 = NULL; - g_variant_get(value ,"(@a(ss))", &value1); - gsize items = g_variant_iter_init (&iter, value1); + g_variant_get(value, "(@a(ss))", &value1); + gsize items = g_variant_iter_init(&iter, value1); vcard_list = g_new0(char *, items + 1); - for (i = 0; (child = g_variant_iter_next_value (&iter)) != NULL; i++) { + for (i = 0; (child = g_variant_iter_next_value(&iter)) != NULL; i++) { g_variant_get(child, "(&s&s)", &elname, &elval); memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH); - g_snprintf (list_entry, PBAP_VCARDLIST_MAXLENGTH - 1, + g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1, "", elname, elval); //If possible send as Array of BT_DBG("%s", list_entry); @@ -745,7 +788,7 @@ void __bt_pbap_search_phonebook_cb(GDBusProxy *proxy, BT_DBG("Address = %s", address_string); signal = g_variant_new("(is@as)", result, address_string, - g_variant_new_strv((const gchar * const*)vcard_list, length)); + g_variant_new_strv((const gchar * const *)vcard_list, length)); _bt_send_event(BT_PBAP_CLIENT_EVENT, BLUETOOTH_PBAP_PHONEBOOK_SEARCH, @@ -778,33 +821,36 @@ int __bt_pbap_call_get_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) BT_DBG("+"); int i; + int ret; char *format_str = NULL; char *fields_str = NULL; char *order_str = NULL; - char *target_file = "/opt/usr/media/Downloads/pb.vcf"; + char *download_path = NULL; + char *target_file = NULL; bt_pbap_pull_parameters_t *app_param = pbap_data->app_param; GVariantBuilder builder; GVariantBuilder inner_builder; GVariant *filters; - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); - g_variant_builder_init (&inner_builder, G_VARIANT_TYPE_ARRAY); + + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); + g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_ARRAY); /* Add MaxlistCount*/ g_variant_builder_add(&builder, "{sv}", "MaxCount", - g_variant_new("u",app_param->maxlist)); + g_variant_new("u", app_param->maxlist)); /* Add Order Filter only if other than Indexed (default)*/ if (app_param->order > 0) { order_str = g_strdup(ORDER[app_param->order]); g_variant_builder_add(&builder, "{sv}", "Order", - g_variant_new("s",order_str)); + g_variant_new("s", order_str)); } /* Add Offset Filter only if other than 0 (default)*/ if (app_param->offset > 0) { g_variant_builder_add(&builder, "{sv}", "Offset", - g_variant_new("u",app_param->offset)); + g_variant_new("u", app_param->offset)); } /* Add Format Filter only if other than vCard 2.1 (default)*/ @@ -843,6 +889,22 @@ int __bt_pbap_call_get_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) // //**************************** + ret = storage_get_directory(STORAGE_TYPE_INTERNAL, + STORAGE_DIRECTORY_DOWNLOADS, &download_path); + + if (ret != STORAGE_ERROR_NONE) { + target_file = g_strdup_printf("%s/%s", PBAP_DEFAULT_DOWNLAOD_PATH, + PBAP_DEFAULT_FILE_NAME); + } else { + target_file = g_strdup_printf("%s/%s", download_path, + PBAP_DEFAULT_FILE_NAME); + + if (download_path) + free(download_path); + } + + DBG_SECURE("Target flie: %s", target_file); + g_dbus_proxy_call(proxy, "PullAll", g_variant_new("(s@a{sv})", target_file, filters), G_DBUS_CALL_FLAGS_NONE, -1, NULL, @@ -851,7 +913,7 @@ int __bt_pbap_call_get_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) g_free(format_str); g_free(order_str); - g_hash_table_destroy(filters); + g_free(target_file); BT_DBG("-"); return BLUETOOTH_ERROR_NONE; @@ -867,23 +929,23 @@ int __bt_pbap_call_get_vcards_list(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) bt_pbap_list_parameters_t *app_param = pbap_data->app_param; - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); /* Add MaxlistCount*/ g_variant_builder_add(&builder, "{sv}", "MaxCount", - g_variant_new("u",app_param->maxlist)); + g_variant_new("u", app_param->maxlist)); /* Add Order Filter only if other than Indexed (default)*/ if (app_param->order > 0) { order_str = g_strdup(ORDER[app_param->order]); g_variant_builder_add(&builder, "{sv}", "Order", - g_variant_new("s",order_str)); + g_variant_new("s", order_str)); } /* Add Offset Filter only if other than 0 (default)*/ if (app_param->offset > 0) { g_variant_builder_add(&builder, "{sv}", "Offset", - g_variant_new("u",app_param->offset)); + g_variant_new("u", app_param->offset)); } filters = g_variant_builder_end(&builder); @@ -900,7 +962,7 @@ int __bt_pbap_call_get_vcards_list(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) g_free(folder); g_free(order_str); - g_hash_table_unref(filters); + g_hash_table_unref((GHashTable *)filters); /* In _bt_pbap_get_list(), path(type) is set to "nil", but current type is not null. The path should be reset here */ selected_path.type = -1; @@ -914,18 +976,20 @@ int __bt_pbap_call_get_vcard(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) BT_DBG("+"); int i; + int ret; char *format_str = NULL; char *fields_str = NULL; - char *target_file = "/opt/usr/media/Downloads/pb.vcf"; + char *target_file = NULL; + char *download_path = NULL; char *vcard_handle = NULL; - char vcard[10] = { 0, }; + char vcard[20] = { 0, }; GVariantBuilder builder; GVariantBuilder inner_builder; GVariant *filters; bt_pbap_pull_vcard_parameters_t *app_param = pbap_data->app_param; - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); - g_variant_builder_init (&inner_builder, G_VARIANT_TYPE_ARRAY); + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); + g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_ARRAY); /* Add Format Filter only if other than vCard 2.1 (default)*/ // if (app_param->format > 0) { @@ -967,6 +1031,27 @@ int __bt_pbap_call_get_vcard(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) BT_DBG("Handle: %s", vcard); vcard_handle = g_strdup(vcard); BT_DBG("vcard_handle: %s", vcard_handle); + + ret = storage_get_directory(STORAGE_TYPE_INTERNAL, + STORAGE_DIRECTORY_DOWNLOADS, &download_path); + + if (ret != STORAGE_ERROR_NONE) { + target_file = g_strdup_printf("%s/%s", PBAP_DEFAULT_DOWNLAOD_PATH, + PBAP_DEFAULT_FILE_NAME); + } else { + if (vcard_handle) + target_file = g_strdup_printf("%s/%s", download_path, + vcard_handle); + else + target_file = g_strdup_printf("%s/%s", download_path, + PBAP_DEFAULT_FILE_NAME); + + if (download_path) + free(download_path); + } + + DBG_SECURE("Target flie: %s", target_file); + GVariant *temp = g_variant_new("(ss@a{sv})", vcard_handle, target_file, filters); g_dbus_proxy_call(proxy, "Pull", @@ -977,7 +1062,7 @@ int __bt_pbap_call_get_vcard(GDBusProxy *proxy, bt_pbap_data_t *pbap_data) g_free(format_str); g_free(vcard_handle); - g_hash_table_destroy(filters); + g_free(target_file); BT_DBG("-"); return BLUETOOTH_ERROR_NONE; @@ -994,23 +1079,23 @@ int __bt_pbap_call_search_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data GVariantBuilder builder; GVariant *filters; - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); /* Add MaxlistCount*/ g_variant_builder_add(&builder, "{sv}", "MaxCount", - g_variant_new("u",app_param->maxlist)); + g_variant_new("u", app_param->maxlist)); /* Add Order Filter only if other than Indexed (default)*/ if (app_param->order > 0) { order_str = g_strdup(ORDER[app_param->order]); g_variant_builder_add(&builder, "{sv}", "Order", - g_variant_new("s",order_str)); + g_variant_new("s", order_str)); } /* Add Offset Filter only if other than 0 (default)*/ if (app_param->offset > 0) { g_variant_builder_add(&builder, "{sv}", "Offset", - g_variant_new("u",app_param->offset)); + g_variant_new("u", app_param->offset)); } filters = g_variant_builder_end(&builder); @@ -1027,16 +1112,42 @@ int __bt_pbap_call_search_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data g_free(value); g_free(order_str); g_free(field); - g_hash_table_destroy(filters); BT_DBG("-"); return BLUETOOTH_ERROR_NONE; } +int _bt_pbap_is_connected(bluetooth_device_address_t *device_address, + gboolean *connected) +{ + char address_string[18] = { 0, }; + + BT_CHECK_PARAMETER(device_address, return); + BT_CHECK_PARAMETER(connected, return); + + /* In now, only 1 pbap connection is allowed */ + if (g_pbap_server_address == NULL) { + *connected = FALSE; + return 0; + } + + _bt_convert_addr_type_to_string(address_string, + (unsigned char *)device_address->addr); + BT_DBG("Address String: %s", address_string); + + if (g_strcmp0(address_string, g_pbap_server_address) == 0) + *connected = TRUE; + else + *connected = FALSE; + + return 0; +} + int _bt_pbap_get_phonebook_size(const bluetooth_device_address_t *address, int source, int type) { BT_DBG("+"); + GDBusConnection *g_conn; GDBusProxy *g_pbap_session_proxy = NULL; char address_string[18] = { 0, }; char *source_string = NULL; @@ -1065,7 +1176,15 @@ int _bt_pbap_get_phonebook_size(const bluetooth_device_address_t *address, BT_DBG("Address[%s] Source[%s] Type[%s]", address_string, source_string, type_string); BT_DBG("Session Path = %s\n", g_pbap_session_path); - g_pbap_session_proxy = g_dbus_proxy_new_sync(dbus_connection, + + g_conn = _bt_gdbus_get_session_gconn(); + if (g_conn == NULL) { + BT_ERR("Couldn't connect to session bus"); + g_free(source_string); + g_free(type_string); + return 0; + } + g_pbap_session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, PBAP_SESSION_SERVICE, g_pbap_session_path, PBAP_SESSION_INTERFACE, NULL, &err); @@ -1113,6 +1232,7 @@ int _bt_pbap_get_phonebook(const bluetooth_device_address_t *address, int source, int type, bt_pbap_pull_parameters_t *app_param) { BT_DBG("+"); + GDBusConnection *g_conn; GDBusProxy *g_pbap_session_proxy = NULL; char address_string[18] = { 0, }; char *source_string = NULL; @@ -1145,7 +1265,15 @@ int _bt_pbap_get_phonebook(const bluetooth_device_address_t *address, address_string, source_string, type_string); BT_DBG("Session Path = %s\n", g_pbap_session_path); - g_pbap_session_proxy = g_dbus_proxy_new_sync(dbus_connection, + + g_conn = _bt_gdbus_get_session_gconn(); + if (g_conn == NULL) { + BT_ERR("Couldn't connect to session bus"); + g_free(source_string); + g_free(type_string); + return 0; + } + g_pbap_session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, PBAP_SESSION_SERVICE, g_pbap_session_path, PBAP_SESSION_INTERFACE, NULL, &err); @@ -1169,6 +1297,8 @@ int _bt_pbap_get_phonebook(const bluetooth_device_address_t *address, pbap_data->app_param = param; if (source == selected_path.folder && type == selected_path.type) { + g_free(source_string); + g_free(type_string); return __bt_pbap_call_get_phonebook(g_pbap_session_proxy, pbap_data); } @@ -1190,6 +1320,7 @@ int _bt_pbap_get_list(const bluetooth_device_address_t *address, int source, int type, bt_pbap_list_parameters_t *app_param) { BT_DBG("+"); + GDBusConnection *g_conn; GDBusProxy *g_pbap_session_proxy = NULL; char address_string[18] = { 0, }; char *source_string = NULL; @@ -1222,7 +1353,15 @@ int _bt_pbap_get_list(const bluetooth_device_address_t *address, int source, address_string, source_string, type_string); BT_DBG("Session Path = %s\n", g_pbap_session_path); - g_pbap_session_proxy = g_dbus_proxy_new_sync(dbus_connection, + + g_conn = _bt_gdbus_get_session_gconn(); + if (g_conn == NULL) { + BT_ERR("Couldn't connect to session bus"); + g_free(source_string); + g_free(type_string); + return 0; + } + g_pbap_session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, PBAP_SESSION_SERVICE, g_pbap_session_path, PBAP_SESSION_INTERFACE, NULL, &err); @@ -1271,6 +1410,7 @@ int _bt_pbap_pull_vcard(const bluetooth_device_address_t *address, int source, int type, bt_pbap_pull_vcard_parameters_t *app_param) { BT_DBG("+"); + GDBusConnection *g_conn; GDBusProxy *g_pbap_session_proxy = NULL; char address_string[18] = { 0, }; char *source_string = NULL; @@ -1302,7 +1442,15 @@ int _bt_pbap_pull_vcard(const bluetooth_device_address_t *address, address_string, source_string, type_string); BT_DBG("Session Path = %s\n", g_pbap_session_path); - g_pbap_session_proxy = g_dbus_proxy_new_sync(dbus_connection, + + g_conn = _bt_gdbus_get_session_gconn(); + if (g_conn == NULL) { + BT_ERR("Couldn't connect to session bus"); + g_free(source_string); + g_free(type_string); + return 0; + } + g_pbap_session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, PBAP_SESSION_SERVICE, g_pbap_session_path, PBAP_SESSION_INTERFACE, NULL, &err); @@ -1313,6 +1461,8 @@ int _bt_pbap_pull_vcard(const bluetooth_device_address_t *address, ERR("Unable to create proxy: %s", err->message); g_clear_error(&err); } + g_free(source_string); + g_free(type_string); return -1; } @@ -1324,6 +1474,8 @@ int _bt_pbap_pull_vcard(const bluetooth_device_address_t *address, pbap_data->app_param = param; if (source == selected_path.folder && type == selected_path.type) { + g_free(source_string); + g_free(type_string); return __bt_pbap_call_get_vcard(g_pbap_session_proxy, pbap_data); } @@ -1345,6 +1497,7 @@ int _bt_pbap_phonebook_search(const bluetooth_device_address_t *address, int source, int type, bt_pbap_search_parameters_t *app_param) { BT_DBG("+"); + GDBusConnection *g_conn; GDBusProxy *g_pbap_session_proxy = NULL; char address_string[18] = { 0, }; char *source_string = NULL; @@ -1370,14 +1523,21 @@ int _bt_pbap_phonebook_search(const bluetooth_device_address_t *address, BT_DBG("Address String: %s", address_string); source_string = g_strdup(SOURCE[source]); - type_string = g_strdup("nil"); + type_string = g_strdup(TYPE[type]); BT_DBG("Address[%s] Source[%s] Type[%s]", address_string, source_string, type_string); BT_DBG("Session Path = %s\n", g_pbap_session_path); - g_pbap_session_proxy = g_dbus_proxy_new_sync(dbus_connection, + g_conn = _bt_gdbus_get_session_gconn(); + if (g_conn == NULL) { + BT_ERR("Couldn't connect to session bus"); + g_free(source_string); + g_free(type_string); + return 0; + } + g_pbap_session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, PBAP_SESSION_SERVICE, g_pbap_session_path, PBAP_SESSION_INTERFACE, NULL, &err);