Modify the privilege for battry RX / TX function
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-pbap.c
index f5a81b8..9132225 100644 (file)
@@ -20,9 +20,7 @@
 #include <string.h>
 #include <malloc.h>
 #include <stacktrim.h>
-#if !defined(LIBNOTIFY_SUPPORT) && !defined(LIBNOTIFICATION_SUPPORT)
 #include <syspopup_caller.h>
-#endif
 #include <vconf.h>
 #include <storage.h>
 
@@ -33,7 +31,6 @@
 #include <glib.h>
 #include <gio/gio.h>
 
-#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"
@@ -45,7 +42,7 @@
 #define        PBAP_NUM_OF_FIELDS_ENTRY 29
 #define        PBAP_FIELD_ALL (0xFFFFFFFFFFFFFFFFULL)
 
-#define PBAP_DEFAULT_DOWNLAOD_PATH "/opt/usr/media/Downloads/"
+#define PBAP_DEFAULT_DOWNLAOD_PATH "/opt/usr/home/owner/media/Downloads"
 #define PBAP_DEFAULT_FILE_NAME "pb.vcf"
 
 char *FIELDS[] = {
@@ -112,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;
@@ -208,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,
@@ -257,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)
 {
@@ -273,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;
@@ -286,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);
@@ -296,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;
@@ -313,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],
@@ -320,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);
@@ -336,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*/
@@ -349,13 +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);
 
        BT_DBG("-");
-       return 0;
+       return BLUETOOTH_ERROR_NONE;
 }
 
 void __bt_pbap_disconnect_cb(GDBusProxy *proxy,
@@ -364,6 +391,7 @@ void __bt_pbap_disconnect_cb(GDBusProxy *proxy,
        char *address_string = user_data;
        GError *error = NULL;
        GVariant *value;
+       int result = BLUETOOTH_ERROR_INTERNAL ;
 
        BT_DBG("Address = %s", address_string);
 
@@ -387,11 +415,22 @@ void __bt_pbap_disconnect_cb(GDBusProxy *proxy,
                g_free(g_pbap_server_address);
                g_pbap_server_address = NULL;
 
+               result = BLUETOOTH_ERROR_NONE;
                selected_path.folder = -1;
                selected_path.type = -1;
+
+               g_variant_unref(value);
        }
 
-       /* PBAP disconnected event will be sent in event reciever */
+       /* 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("-");
@@ -424,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,
@@ -565,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);
@@ -603,19 +644,19 @@ 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);
 #if 0
-                       g_snprintf (list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
+                       g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
                                        "<card handle = \"%s\" name = \"%s\"/>", elname, elval);
 #else
-                       g_snprintf (list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
+                       g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
                                        "%s", elval);
 #endif
                        //If possible send as Array of <STRING, STRING>
@@ -630,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,
@@ -671,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);
@@ -723,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,
                                        "<card handle = \"%s\" name = \"%s\"/>", elname, elval);
                        //If possible send as Array of <STRING, STRING>
                        BT_DBG("%s", list_entry);
@@ -747,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,
@@ -792,24 +833,24 @@ int __bt_pbap_call_get_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
        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)*/
@@ -872,6 +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_free(target_file);
 
        BT_DBG("-");
        return BLUETOOTH_ERROR_NONE;
@@ -887,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);
@@ -940,14 +982,14 @@ int __bt_pbap_call_get_vcard(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
        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) {
@@ -1020,6 +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_free(target_file);
 
        BT_DBG("-");
        return BLUETOOTH_ERROR_NONE;
@@ -1036,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);
@@ -1074,10 +1117,37 @@ int __bt_pbap_call_search_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data
        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;
@@ -1106,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);
@@ -1154,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;
@@ -1186,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);
@@ -1210,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);
        }
 
@@ -1231,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;
@@ -1263,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);
@@ -1312,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;
@@ -1343,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);
@@ -1354,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;
        }
 
@@ -1365,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);
        }
 
@@ -1386,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;
@@ -1418,7 +1530,14 @@ int _bt_pbap_phonebook_search(const bluetooth_device_address_t *address,
 
        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);