Increase the session timeout value
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-pbap.c
index adf3102..9132225 100644 (file)
@@ -1,12 +1,5 @@
 /*
-
- * 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 <malloc.h>
 #include <stacktrim.h>
-#if !defined(LIBNOTIFY_SUPPORT) && !defined(LIBNOTIFICATION_SUPPORT)
 #include <syspopup_caller.h>
-#endif
 #include <vconf.h>
+#include <storage.h>
 
 #include "bt-internal-types.h"
 #include "bt-service-common.h"
-//#include "bt-service-agent.h"
-//#include "bt-service-gap-agent.h"
-//#include "bt-service-adapter.h"
 #include "bt-service-event.h"
-//#include "bt-service-rfcomm-server.h"
-//#include "bt-service-device.h"
-//#include "bt-service-audio.h"
 #include "bt-service-pbap.h"
 #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"
 
 #define         PBAP_SESSION_SERVICE   "org.bluez.obex"
 #define         PBAP_SESSION_INTERFACE "org.bluez.obex.PhonebookAccess1"
-#define PBAP_VCARDLIST_MAXLENGTH 256
-
-typedef enum {
-PBAP_FIELD_ALL,
-PBAP_FIELD_VERSION,
-PBAP_FIELD_FN,
-PBAP_FIELD_N,
-PBAP_FIELD_PHOTO,
-PBAP_FIELD_BDAY,
-PBAP_FIELD_ADR,
-PBAP_FIELD_LABEL,
-PBAP_FIELD_TEL,
-PBAP_FIELD_EMAIL,
-PBAP_FIELD_MAILER,
-PBAP_FIELD_TZ,
-PBAP_FIELD_GEO,
-PBAP_FIELD_TITLE,
-PBAP_FIELD_ROLE,
-PBAP_FIELD_LOGO,
-PBAP_FIELD_AGENT,
-PBAP_FIELD_ORG,
-PBAP_FIELD_NOTE,
-PBAP_FIELD_REV,
-PBAP_FIELD_SOUND,
-PBAP_FIELD_URL,
-PBAP_FIELD_UID,
-PBAP_FIELD_KEY,
-PBAP_FIELD_NICKNAME,
-PBAP_FIELD_CATEGORIES,
-PBAP_FIELD_PROID,
-PBAP_FIELD_CLASS,
-PBAP_FIELD_SORT_STRING,
-PBAP_FIELD_X_IRMC_CALL_DATETIME,
-} bt_pbap_field_e;
+#define        PBAP_VCARDLIST_MAXLENGTH 256
+
+#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",
+               "N",
+               "PHOTO",
+               "BDAY",
+               "ADR",
+               "LABEL",
+               "TEL",
+               "EMAIL",
+               "MAILER",
+               "TZ",
+               "GEO",
+               "TITLE",
+               "ROLE",
+               "LOGO",
+               "AGENT",
+               "ORG",
+               "NOTE",
+               "REV",
+               "SOUND",
+               "URL",
+               "UID",
+               "KEY",
+               "NICKNAME",
+               "CATEGORIES",
+               "PROID",
+               "CLASS",
+               "SORT-STRING",
+               "X-IRMC-CALL-DATETIME", /* 29 */
+};
 
 char *SOURCE[] = {
                "int",  //Phone memory
@@ -118,8 +108,9 @@ char *SEARCH_FIELD[] = {
 };
 
 static char *g_pbap_session_path = NULL;
-static DBusGConnection *dbus_connection = NULL;
-static DBusGProxy *g_pbap_proxy = NULL;
+static char *g_pbap_server_address = NULL;
+static GDBusProxy *g_pbap_proxy = NULL;
+static gboolean g_is_pbap_connecting;
 
 static struct {
        int type;
@@ -150,11 +141,11 @@ typedef struct {
 
 static GSList *transfers;
 
-int __bt_pbap_call_get_phonebook_size(DBusGProxy *proxy, bt_pbap_data_t *pbap_data);
-int __bt_pbap_call_get_phonebook(DBusGProxy *proxy, bt_pbap_data_t *pbap_data);
-int __bt_pbap_call_get_vcards_list(DBusGProxy *proxy, bt_pbap_data_t *pbap_data);
-int __bt_pbap_call_get_vcard(DBusGProxy *proxy, bt_pbap_data_t *pbap_data);
-int __bt_pbap_call_search_phonebook(DBusGProxy *proxy, bt_pbap_data_t *pbap_data);
+int __bt_pbap_call_get_phonebook_size(GDBusProxy *proxy, bt_pbap_data_t *pbap_data);
+int __bt_pbap_call_get_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data);
+int __bt_pbap_call_get_vcards_list(GDBusProxy *proxy, bt_pbap_data_t *pbap_data);
+int __bt_pbap_call_get_vcard(GDBusProxy *proxy, bt_pbap_data_t *pbap_data);
+int __bt_pbap_call_search_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data);
 
 static void __bt_pbap_free_data(bt_pbap_data_t *pbap_data)
 {
@@ -198,10 +189,11 @@ void _bt_pbap_obex_transfer_completed(const char *transfer_path, gboolean transf
        bt_pbap_transfer_info_t *transfer_info;
        int result = 0;
        int success = transfer_status;
+       GVariant *signal = NULL;
        BT_DBG("Transfer [%s] Success [%d] \n", transfer_path, success);
 
        result = (success == TRUE) ? BLUETOOTH_ERROR_NONE
-                               : BLUETOOTH_ERROR_CANCEL;
+                               : BLUETOOTH_ERROR_INTERNAL;
 
        transfer_info = __bt_find_transfer_by_path(transfer_path);
        ret_if(transfer_info == NULL);
@@ -210,25 +202,20 @@ void _bt_pbap_obex_transfer_completed(const char *transfer_path, gboolean transf
                        transfer_info->remote_device, transfer_info->filename,
                        transfer_info->operation);
 
-       switch(transfer_info->operation) {
+       signal = g_variant_new("(issi)", result,
+                       transfer_info->remote_device,
+                       transfer_info->filename, success);
+       switch (transfer_info->operation) {
        case PULL_ALL: {
                _bt_send_event(BT_PBAP_CLIENT_EVENT,
                                        BLUETOOTH_PBAP_PHONEBOOK_PULL,
-                                       DBUS_TYPE_INT32, &result,
-                                       DBUS_TYPE_STRING, &transfer_info->remote_device,
-                                       DBUS_TYPE_STRING, &transfer_info->filename,
-                                       DBUS_TYPE_INT32, &success,
-                                       DBUS_TYPE_INVALID);
+                                       signal);
                break;
                }
        case GET_VCARD: {
                _bt_send_event(BT_PBAP_CLIENT_EVENT,
                                        BLUETOOTH_PBAP_VCARD_PULL,
-                                       DBUS_TYPE_INT32, &result,
-                                       DBUS_TYPE_STRING, &transfer_info->remote_device,
-                                       DBUS_TYPE_STRING, &transfer_info->filename,
-                                       DBUS_TYPE_INT32, &success,
-                                       DBUS_TYPE_INVALID);
+                                       signal);
                break;
                }
        default:
@@ -236,52 +223,113 @@ void _bt_pbap_obex_transfer_completed(const char *transfer_path, gboolean transf
                break;
 
        }
+
        transfers = g_slist_remove(transfers, transfer_info);
        __bt_free_transfer_info(transfer_info);
 }
 
-void __bt_pbap_connect_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void _bt_obex_pbap_client_disconnect(char *path)
+{
+       if (g_strcmp0(g_pbap_session_path, path) == 0) {
+               int result = BLUETOOTH_ERROR_NONE;
+               GVariant *signal = g_variant_new("(is)", result,
+                               g_pbap_server_address);
+
+               _bt_send_event(BT_PBAP_CLIENT_EVENT,
+                                       BLUETOOTH_PBAP_DISCONNECTED,
+                                       signal);
+
+               g_free(g_pbap_session_path);
+               g_pbap_session_path = NULL;
+
+               g_free(g_pbap_server_address);
+               g_pbap_server_address = NULL;
+
+               g_object_unref(g_pbap_proxy);
+               g_pbap_proxy = NULL;
+
+               selected_path.folder = -1;
+               selected_path.type = -1;
+       }
+       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)
 {
        char *session_path = NULL;
        char *address_string = user_data;
-       GError *g_error = NULL;
-       int connected = -1;
-       int result = BLUETOOTH_ERROR_CANCEL;
+       GError *error = NULL;
+       GVariant *value;
+       GVariant *signal = NULL;
+       int result = BLUETOOTH_ERROR_INTERNAL;
 
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
        BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error,
-                                       DBUS_TYPE_G_OBJECT_PATH, &session_path,
-                                       G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
+
+       if (value == NULL) {
+               BT_ERR("g_dbus_proxy_call_finish failed");
+               if (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;
        } else {
+               g_variant_get(value, "(&o)", &session_path);
+
                g_pbap_session_path = g_strdup(session_path);
                BT_DBG("Session Path = %s\n", g_pbap_session_path);
                result = BLUETOOTH_ERROR_NONE;
-               connected = 1;
+               g_pbap_server_address = g_strdup(address_string);
+
+               g_variant_unref(value);
        }
 
+       signal = g_variant_new("(is)", result, address_string);
+
        _bt_send_event(BT_PBAP_CLIENT_EVENT,
                                BLUETOOTH_PBAP_CONNECTED,
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_STRING, &address_string,
-                               DBUS_TYPE_INT32, &connected,
-                               DBUS_TYPE_INVALID);
+                               signal);
 
        g_free(address_string);
-       g_free(session_path);
        BT_DBG("-");
+
+       g_is_pbap_connecting = FALSE;
 }
 
 int _bt_pbap_connect(const bluetooth_device_address_t *address)
 {
        BT_DBG("+");
-       GHashTable *hash;
-       GValue *tgt_value;
+       GDBusConnection *g_conn;
        GError *error = NULL;
        char address_string[18] = { 0, };
        char *ptr = NULL;
+       GVariantBuilder builder;
+       GVariant *args;
 
        BT_CHECK_PARAMETER(address, return);
 
@@ -289,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],
@@ -296,79 +347,90 @@ 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 = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
-       if (error != NULL) {
-                       BT_ERR("Couldn't connect to system bus[%s]\n", error->message);
-                       g_error_free(error);
-                       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;
        }
-       BT_DBG("#2");
-       g_pbap_proxy = dbus_g_proxy_new_for_name(dbus_connection,
-                       PBAP_OBEX_CLIENT_SERVICE,
-                       PBAP_OBEX_CLIENT_PATH,
-                       PBAP_OBEX_CLIENT_INTERFACE);
+       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);
        if (!g_pbap_proxy) {
                BT_ERR("Failed to get a proxy for D-Bus\n");
-               return -1;
+               if (error) {
+                       ERR("Unable to create proxy: %s", error->message);
+                       g_clear_error(&error);
+               }
+               return BLUETOOTH_ERROR_INTERNAL;
        }
-       BT_DBG("#3");
-       hash = g_hash_table_new_full(g_str_hash, g_str_equal,
-                       NULL, (GDestroyNotify)g_free);
-       BT_DBG("#4");
-       tgt_value = g_new0(GValue, 1);
-       g_value_init(tgt_value, G_TYPE_STRING);
-       g_value_set_string(tgt_value, "pbap");
-       g_hash_table_insert(hash, "Target", tgt_value);
-       BT_DBG("#5");
+
+       /* Create Hash*/
+       g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
+       g_variant_builder_add(&builder, "{sv}", "Target",
+                                       g_variant_new("s", "pbap"));
+       args = g_variant_builder_end(&builder);
 
        ptr = g_strdup(address_string);
-       if (!dbus_g_proxy_begin_call(g_pbap_proxy, "CreateSession",
-                       (DBusGProxyCallNotify)__bt_pbap_connect_cb,
-                       ptr, NULL,
-                       G_TYPE_STRING, ptr,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       hash, G_TYPE_INVALID)) {
-               BT_ERR("Connect Dbus Call Error");
-               g_free(ptr);
-               g_object_unref(g_pbap_proxy);
-               g_hash_table_destroy(hash);
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
 
-       g_hash_table_destroy(hash);
+       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(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_disconnect_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        char *address_string = user_data;
-       GError *g_error = NULL;
-       int connected = -1;
+       GError *error = NULL;
+       GVariant *value;
        int result = BLUETOOTH_ERROR_INTERNAL ;
 
        BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error, G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
+
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+       BT_DBG("Address = %s", address_string);
+
+       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);
+               }
        } else {
+               g_object_unref(g_pbap_proxy);
+               g_pbap_proxy = NULL;
+
                g_free(g_pbap_session_path);
                g_pbap_session_path = NULL;
+
+               g_free(g_pbap_server_address);
+               g_pbap_server_address = NULL;
+
                result = BLUETOOTH_ERROR_NONE;
                selected_path.folder = -1;
                selected_path.type = -1;
-               connected = 0;
+
+               g_variant_unref(value);
        }
 
-       g_object_unref(proxy);
-       _bt_send_event(BT_PBAP_CLIENT_EVENT,
-                               BLUETOOTH_PBAP_CONNECTED,
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_STRING, &address_string,
-                               DBUS_TYPE_INT32, &connected,
-                               DBUS_TYPE_INVALID);
+       /* 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("-");
@@ -395,122 +457,144 @@ int _bt_pbap_disconnect(const bluetooth_device_address_t *address)
        BT_DBG("Session Path: %s", g_pbap_session_path);
 
        ptr = g_strdup(address_string);
-       if (!dbus_g_proxy_begin_call(g_pbap_proxy, "RemoveSession",
-                       (DBusGProxyCallNotify)__bt_pbap_disconnect_cb,
-                       ptr, NULL,
-                       DBUS_TYPE_G_OBJECT_PATH, g_pbap_session_path,
-                       G_TYPE_INVALID)) {
-               g_free(ptr);
-               BT_ERR("Disconnect Dbus Call Error");
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
 
-       return 0;
+       g_dbus_proxy_call(g_pbap_proxy, "RemoveSession",
+                       g_variant_new("(o)", g_pbap_session_path),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_disconnect_cb, ptr);
+
+       return BLUETOOTH_ERROR_NONE;
 }
 
-void __bt_pbap_select_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_select_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        BT_DBG("+");
-       GError *g_error = NULL;
+       GError *error = NULL;
+       GVariant *value;
        bt_pbap_data_t *pbap_data = user_data;
        char *address_string = pbap_data->data;
 
        BT_DBG("Address = %s", address_string);
-       if (dbus_g_proxy_end_call(proxy, call, &g_error, G_TYPE_INVALID)) {
-               switch (pbap_data->operation) {
-               case GET_SIZE: {
-                       __bt_pbap_call_get_phonebook_size(proxy, pbap_data);
-                       break;
-               }
-               case PULL_ALL: {
-                       __bt_pbap_call_get_phonebook(proxy, pbap_data);
-                       break;
-               }
-               case GET_LIST: {
-                       __bt_pbap_call_get_vcards_list(proxy, pbap_data);
-                       break;
-               }
-               case GET_VCARD: {
-                       __bt_pbap_call_get_vcard(proxy, pbap_data);
-                       break;
-               }
-               case PB_SEARCH: {
-                       __bt_pbap_call_search_phonebook(proxy, pbap_data);
-                       break;
-               }
-               default: {
-                       g_object_unref(proxy);
-                       __bt_pbap_free_data(pbap_data);
+
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+       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);
                }
-               } // End of Case
-       } else {
+
+               selected_path.folder = -1;
+               selected_path.type = -1;
+
+               g_object_unref(proxy);
+               __bt_pbap_free_data(pbap_data);
+               return;
+       }
+
+       switch (pbap_data->operation) {
+       case GET_SIZE: {
+               __bt_pbap_call_get_phonebook_size(proxy, pbap_data);
+               break;
+       }
+       case PULL_ALL: {
+               __bt_pbap_call_get_phonebook(proxy, pbap_data);
+               break;
+       }
+       case GET_LIST: {
+               __bt_pbap_call_get_vcards_list(proxy, pbap_data);
+               break;
+       }
+       case GET_VCARD: {
+               __bt_pbap_call_get_vcard(proxy, pbap_data);
+               break;
+       }
+       case PB_SEARCH: {
+               __bt_pbap_call_search_phonebook(proxy, pbap_data);
+               break;
+       }
+       default: {
+               selected_path.folder = -1;
+               selected_path.type = -1;
                g_object_unref(proxy);
                __bt_pbap_free_data(pbap_data);
        }
+       } // End of Case
 
+       g_variant_unref(value);
        BT_DBG("-");
 }
 
 
-void __bt_pbap_get_phonebook_size_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_get_phonebook_size_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        BT_DBG("+");
-       GError *g_error = NULL;
+       GError *error = NULL;
        int result = BLUETOOTH_ERROR_INTERNAL;
        bt_pbap_data_t *pbap_data = user_data;
        char *address_string = pbap_data->data;
-       unsigned int size = 0;
+       unsigned short int size = 0;
+       GVariant *value;
+       GVariant *signal = NULL;
 
        BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error,
-                       G_TYPE_UINT, &size,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+
+       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);
+               }
        } else {
-               BT_ERR("Success");
+               g_variant_get(value, "(q)", &size);
                result = BLUETOOTH_ERROR_NONE;
        }
+
        BT_DBG("Size of Phonebook: %d", size);
+
+       signal = g_variant_new("(isi)", result, address_string, size);
        _bt_send_event(BT_PBAP_CLIENT_EVENT,
                                BLUETOOTH_PBAP_PHONEBOOK_SIZE,
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_STRING, &address_string,
-                               DBUS_TYPE_INT32, &size,
-                               DBUS_TYPE_INVALID);
+                               signal);
+
+       g_variant_unref(value);
        g_object_unref(proxy);
        __bt_pbap_free_data(pbap_data);
        BT_DBG("-");
 }
 
-void __bt_pbap_get_phonebook_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_get_phonebook_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        BT_DBG("+");
-       GError *g_error = NULL;
+       GError *error = NULL;
        bt_pbap_data_t *pbap_data = user_data;
        char *address_string = pbap_data->data;
-       GHashTable *properties;
-       GValue *value = { 0 };
        bt_pbap_transfer_info_t *transfer_info;
        char *transfer = NULL;
        const gchar *filename =  NULL;
+       GVariant *value;
+       GVariant *properties;
 
        BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error,
-                       DBUS_TYPE_G_OBJECT_PATH, &transfer,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       &properties,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
-       } else {
-               if (properties != NULL) {
-                       value = g_hash_table_lookup(properties, "Filename");
-                       filename = value ? g_value_get_string(value) : NULL;
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+       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);
                }
+       } else {
+               g_variant_get(value, "(o@a{sv})", &transfer, &properties);
+
+               if (g_variant_lookup(properties, "Filename", "s", &filename) == FALSE)
+                       filename = NULL;
 
                BT_DBG("Transfer Path: %s", transfer);
                BT_DBG("File Name: %s", filename);
@@ -520,6 +604,8 @@ void __bt_pbap_get_phonebook_cb(DBusGProxy *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);
@@ -527,90 +613,107 @@ void __bt_pbap_get_phonebook_cb(DBusGProxy *proxy,
        BT_DBG("-");
 }
 
-void __bt_pbap_get_vcard_list_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_get_vcard_list_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        BT_DBG("+");
-       GError *g_error = NULL;
+       GError *error = NULL;
        int i;
        int result = BLUETOOTH_ERROR_INTERNAL;
-       GPtrArray *vcardlist = NULL;
        bt_pbap_data_t *pbap_data = user_data;
        char *address_string = pbap_data->data;
        char **vcard_list = NULL;
        char list_entry[PBAP_VCARDLIST_MAXLENGTH] = { 0, };
        int length = 0;
-
-       BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error,
-                       dbus_g_type_get_collection("GPtrArray", dbus_g_type_get_struct("GValueArray",
-                                       G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID)),
-                               &vcardlist, G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
-               vcard_list = g_new0(char *, length + 1);
+       GVariant *value;
+       GVariant *signal = NULL;
+
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+       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);
+               }
        } else {
-               BT_DBG("vcardlist len %d", vcardlist->len);
-               length = vcardlist->len;
                result = BLUETOOTH_ERROR_NONE;
+               gchar *elname, *elval;
 
-               vcard_list = g_new0(char *, length + 1);
+               GVariantIter iter;
+               GVariant *child = NULL;
+               GVariant *value1 = NULL;
 
-               GValue *v = g_new0(GValue, 1);//g_ptr_array_index(vcardlist, 0);
-               gchar *elname, *elval;
-               g_value_init(v, dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID));
-               for (i = 0; i < length; i++) {
-                       g_value_set_boxed(v, g_ptr_array_index(vcardlist, i));
-                       if (dbus_g_type_struct_get (v, 0, &elname, 1, &elval, G_MAXUINT)) {
-                               memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH);
-                               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);
-                               vcard_list[i] = g_strdup(list_entry);
-                       }
+               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);
+
+                       memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH);
+#if 0
+                       g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
+                                       "<card handle = \"%s\" name = \"%s\"/>", elname, elval);
+#else
+                       g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
+                                       "%s", elval);
+#endif
+                       //If possible send as Array of <STRING, STRING>
+                       BT_DBG("%s", list_entry);
+                       vcard_list[i] = g_strdup(list_entry);
+                       g_variant_unref(child);
                }
+
+               length = i;
+               g_variant_unref(value1);
+               g_variant_unref(value);
        }
 
+       BT_DBG("Address = %s", address_string);
+       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,
-                               BLUETOOTH_PBAP_VCARD_LIST,
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_STRING, &address_string,
-                               DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-                               &vcard_list, length,
-                               DBUS_TYPE_INVALID);
+                       BLUETOOTH_PBAP_VCARD_LIST,
+                       signal);
+
+       for (i = 0; i < length; i++)
+               g_free(vcard_list[i]);
 
+       g_free(vcard_list);
        g_object_unref(proxy);
        __bt_pbap_free_data(pbap_data);
        BT_DBG("-");
 }
 
-void __bt_pbap_get_vcard_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_get_vcard_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        BT_DBG("+");
-       GError *g_error = NULL;
+       GError *error = NULL;
        bt_pbap_data_t *pbap_data = user_data;
        char *address_string = pbap_data->data;
-       GHashTable *properties;
-       GValue *value = { 0 };
        bt_pbap_transfer_info_t *transfer_info;
        char *transfer = NULL;
        const gchar *filename =  NULL;
+       GVariant *value;
+       GVariant *properties;
 
        BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error,
-                       DBUS_TYPE_G_OBJECT_PATH, &transfer,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       &properties,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
-       } else {
-               if (properties != NULL) {
-                       value = g_hash_table_lookup(properties, "Filename");
-                       filename = value ? g_value_get_string(value) : NULL;
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+       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);
                }
+       } else {
+               g_variant_get(value, "(o@a{sv})", &transfer, &properties);
+
+               if (g_variant_lookup(properties, "Filename", "s", &filename) == FALSE)
+                       filename = NULL;
 
                BT_DBG("Transfer Path: %s", transfer);
                BT_DBG("File Name: %s", filename);
@@ -620,6 +723,9 @@ void __bt_pbap_get_vcard_cb(DBusGProxy *proxy,
                transfer_info->filename = (char *)filename;
                transfer_info->operation = GET_VCARD;
                transfers = g_slist_append(transfers, transfer_info);
+
+               g_variant_unref(properties);
+               g_variant_unref(value);
        }
 
        g_object_unref(proxy);
@@ -627,227 +733,294 @@ void __bt_pbap_get_vcard_cb(DBusGProxy *proxy,
        BT_DBG("-");
 }
 
-void __bt_pbap_search_phonebook_cb(DBusGProxy *proxy,
-               DBusGProxyCall *call, void *user_data)
+void __bt_pbap_search_phonebook_cb(GDBusProxy *proxy,
+               GAsyncResult *res, gpointer user_data)
 {
        BT_DBG("+");
-       GError *g_error = NULL;
+       GError *error = NULL;
        int i;
-       GPtrArray *vcardlist = NULL;
        bt_pbap_data_t *pbap_data = user_data;
        char *address_string = pbap_data->data;
        char **vcard_list = NULL;
        char list_entry[PBAP_VCARDLIST_MAXLENGTH] = { 0, };
        int length = 0;
        int result = BLUETOOTH_ERROR_INTERNAL;
-
-       BT_DBG("Address = %s", address_string);
-       if (!dbus_g_proxy_end_call(proxy, call, &g_error,
-                       dbus_g_type_get_collection("GPtrArray", dbus_g_type_get_struct("GValueArray",
-                                       G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID)),
-                               &vcardlist, G_TYPE_INVALID)) {
-               BT_ERR("Error Code[%d]: Message %s \n", g_error->code, g_error->message);
-               g_error_free(g_error);
+       GVariant *value;
+       GVariant *signal = NULL;
+
+       value = g_dbus_proxy_call_finish(proxy, res, &error);
+       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);
+               }
        } else {
-               BT_DBG("vcardlist len %d", vcardlist->len);
-               length = vcardlist->len;
                result = BLUETOOTH_ERROR_NONE;
+               gchar *elname, *elval;
 
-               vcard_list = g_new0(char *, length + 1);
+               GVariantIter iter;
+               GVariant *child = NULL;
+               GVariant *value1 = NULL;
 
-               GValue *v = g_new0(GValue, 1);//g_ptr_array_index(vcardlist, 0);
-               gchar *elname, *elval;
-               g_value_init(v, dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID));
-               for (i = 0; i < length; i++) {
-                       g_value_set_boxed(v, g_ptr_array_index(vcardlist, i));
-                       if (dbus_g_type_struct_get (v, 0, &elname, 1, &elval, G_MAXUINT)) {
-                               memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH);
-                               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);
-                               vcard_list[i] = g_strdup(list_entry);
-                       }
+               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++) {
+                       g_variant_get(child, "(&s&s)", &elname, &elval);
+
+                       memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH);
+                       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);
+                       vcard_list[i] = g_strdup(list_entry);
+
+                       g_variant_unref(child);
                }
+               length = i;
+               g_variant_unref(value1);
+               g_variant_unref(value);
        }
 
+       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));
+
        _bt_send_event(BT_PBAP_CLIENT_EVENT,
                                BLUETOOTH_PBAP_PHONEBOOK_SEARCH,
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_STRING, &address_string,
-                               DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-                               &vcard_list, length,
-                               DBUS_TYPE_INVALID);
+                               signal);
+
+       for (i = 0; i < length; i++)
+               g_free(vcard_list[i]);
+
+       g_free(vcard_list);
        g_object_unref(proxy);
        __bt_pbap_free_data(pbap_data);
        BT_DBG("-");
 }
 
-int __bt_pbap_call_get_phonebook_size(DBusGProxy *proxy, bt_pbap_data_t *pbap_data)
+int __bt_pbap_call_get_phonebook_size(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
 {
        BT_DBG("+");
-       if (!dbus_g_proxy_begin_call(proxy, "GetSize",
-                       (DBusGProxyCallNotify)__bt_pbap_get_phonebook_size_cb,
-                       pbap_data, NULL,
-                       G_TYPE_INVALID)) {
-               BT_ERR("GetSize Dbus Call Error");
-               __bt_pbap_free_data(pbap_data);
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
 
-       return BLUETOOTH_ERROR_NONE;
+       g_dbus_proxy_call(proxy, "GetSize",
+                       NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_get_phonebook_size_cb,
+                       pbap_data);
+
        BT_DBG("-");
+       return BLUETOOTH_ERROR_NONE;
 }
 
-int __bt_pbap_call_get_phonebook(DBusGProxy *proxy, bt_pbap_data_t *pbap_data)
+int __bt_pbap_call_get_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
 {
        BT_DBG("+");
-       GHashTable *filters;
-       GValue *max_count;
-       GValue *format;
-       GValue *order;
-       GValue *offset;
+
+       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;
 
-       filters = g_hash_table_new_full(g_str_hash, g_str_equal,
-                               NULL, (GDestroyNotify)g_free);
 
-       /* Add Format Filter only if other than vCard 2.1 (default)*/
-       if (app_param->format > 0) {
-               format_str = g_strdup(FORMAT[app_param->format]);
-               format = g_new0(GValue, 1);
-               g_value_init(format, G_TYPE_STRING);
-               g_value_set_string(format, format_str);
-               g_hash_table_insert(filters, "Format", format);
-               g_free(format_str);
-       }
+       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));
 
        /* Add Order Filter only if other than Indexed (default)*/
        if (app_param->order > 0) {
                order_str = g_strdup(ORDER[app_param->order]);
-               order = g_new0(GValue, 1);
-               g_value_init(order, G_TYPE_STRING);
-               g_value_set_string(order, order_str);
-               g_hash_table_insert(filters, "Order", order);
-               g_free(order_str);
+               g_variant_builder_add(&builder, "{sv}", "Order",
+                               g_variant_new("s", order_str));
        }
 
-       max_count = g_new0(GValue, 1);
-       g_value_init(max_count, G_TYPE_UINT);
-       g_value_set_uint(max_count, app_param->maxlist);
-       g_hash_table_insert(filters, "MaxCount", max_count);
-
        /* Add Offset Filter only if other than 0 (default)*/
        if (app_param->offset > 0) {
-               offset = g_new0(GValue, 1);
-               g_value_init(offset, G_TYPE_UINT);
-               g_value_set_uint(offset, app_param->offset);
-               g_hash_table_insert(filters, "Offset", offset);
+               g_variant_builder_add(&builder, "{sv}", "Offset",
+                                               g_variant_new("u", app_param->offset));
+       }
+
+       /* Add Format Filter only if other than vCard 2.1 (default)*/
+       if (app_param->format > 0) {
+               format_str = g_strdup(FORMAT[app_param->format]);
+               g_variant_builder_add(&builder, "{sv}", "Format",
+                                                       g_variant_new("s", format_str));
+       }
+
+       /* Add Filter AttributeMask (64bit) */
+       if (app_param->fields > 0) {
+               if (app_param->fields == PBAP_FIELD_ALL) {
+                       BT_DBG("** CHECKED ALL **");
+                       fields_str = g_strdup("ALL");
+                       g_variant_builder_add(&inner_builder, "s", fields_str);
+                       g_free(fields_str);
+               } else {
+                       for (i = 0; i < PBAP_NUM_OF_FIELDS_ENTRY; i++) {
+                               if (app_param->fields & (1ULL << i)) {
+                                       BT_DBG("** CHECKED[%d]", i);
+                                       fields_str = g_strdup(FIELDS[i]);
+                                       g_variant_builder_add(&inner_builder, "s", fields_str);
+                                       g_free(fields_str);
+                               }
+                       }
+               }
+
+               g_variant_builder_add(&builder, "{sv}", "Fields",
+                       g_variant_new("as", &inner_builder));
        }
 
+       filters = g_variant_builder_end(&builder);
+
 //****************************
 // Add code for Fields
 //
 //****************************
 
-       if (!dbus_g_proxy_begin_call(proxy, "PullAll",
-                       (DBusGProxyCallNotify)__bt_pbap_get_phonebook_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, target_file,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       filters,
-                       G_TYPE_INVALID)) {
-               BT_ERR("GetSize Dbus Call Error");
-               g_hash_table_destroy(filters);
-               return BLUETOOTH_ERROR_INTERNAL;
+       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);
        }
-       g_hash_table_destroy(filters);
 
-       return BLUETOOTH_ERROR_NONE;
+       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,
+                       (GAsyncReadyCallback)__bt_pbap_get_phonebook_cb,
+                       pbap_data);
+
+       g_free(format_str);
+       g_free(order_str);
+       g_free(target_file);
+
        BT_DBG("-");
+       return BLUETOOTH_ERROR_NONE;
 }
 
-int __bt_pbap_call_get_vcards_list(DBusGProxy *proxy, bt_pbap_data_t *pbap_data)
+int __bt_pbap_call_get_vcards_list(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
 {
        BT_DBG("+");
-       GHashTable *filters;
-       GValue *max_count;
-       GValue *order;
-       GValue *offset;
        char *order_str = NULL;
+       char *folder = NULL;
+       GVariantBuilder builder;
+       GVariant *filters;
+
        bt_pbap_list_parameters_t *app_param = pbap_data->app_param;
 
-       filters = g_hash_table_new_full(g_str_hash, g_str_equal,
-                               NULL, (GDestroyNotify)g_free);
+       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));
 
        /* Add Order Filter only if other than Indexed (default)*/
        if (app_param->order > 0) {
                order_str = g_strdup(ORDER[app_param->order]);
-               order = g_new0(GValue, 1);
-               g_value_init(order, G_TYPE_STRING);
-               g_value_set_string(order, order_str);
-               g_hash_table_insert(filters, "Order", order);
-               g_free(order_str);
+               g_variant_builder_add(&builder, "{sv}", "Order",
+                               g_variant_new("s", order_str));
        }
 
-       max_count = g_new0(GValue, 1);
-       g_value_init(max_count, G_TYPE_UINT);
-       g_value_set_uint(max_count, app_param->maxlist);
-       g_hash_table_insert(filters, "MaxCount", max_count);
-
        /* Add Offset Filter only if other than 0 (default)*/
        if (app_param->offset > 0) {
-               offset = g_new0(GValue, 1);
-               g_value_init(offset, G_TYPE_UINT);
-               g_value_set_uint(offset, app_param->offset);
-               g_hash_table_insert(filters, "Offset", offset);
+               g_variant_builder_add(&builder, "{sv}", "Offset",
+                                               g_variant_new("u", app_param->offset));
        }
 
-       if (!dbus_g_proxy_begin_call(proxy, "List",
-                       (DBusGProxyCallNotify)__bt_pbap_get_vcard_list_cb,
-                       pbap_data, NULL,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       filters,
-                       G_TYPE_INVALID)) {
-               BT_ERR("List Dbus Call Error");
-               g_hash_table_destroy(filters);
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
+       filters = g_variant_builder_end(&builder);
 
-       g_hash_table_destroy(filters);
+       folder = g_strdup(TYPE[selected_path.type]);
+       BT_DBG("Folder: %s", folder);
+
+
+       g_dbus_proxy_call(proxy, "List",
+                       g_variant_new("(s@a{sv})", folder, filters),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_get_vcard_list_cb,
+                       pbap_data);
+
+       g_free(folder);
+       g_free(order_str);
+       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;
 
-       return BLUETOOTH_ERROR_NONE;
        BT_DBG("-");
+       return BLUETOOTH_ERROR_NONE;
 }
 
-int __bt_pbap_call_get_vcard(DBusGProxy *proxy, bt_pbap_data_t *pbap_data)
+int __bt_pbap_call_get_vcard(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
 {
        BT_DBG("+");
-       GHashTable *filters;
-       GValue *format;
+
+       int i;
+       int ret;
        char *format_str = NULL;
-       char *target_file = "/opt/usr/media/Downloads/pb.vcf";
+       char *fields_str = NULL;
+       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;
 
-       filters = g_hash_table_new_full(g_str_hash, g_str_equal,
-                               NULL, (GDestroyNotify)g_free);
+       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) {
+//     if (app_param->format > 0) {
                format_str = g_strdup(FORMAT[app_param->format]);
-               format = g_new0(GValue, 1);
-               g_value_init(format, G_TYPE_STRING);
-               g_value_set_string(format, format_str);
-               g_hash_table_insert(filters, "Format", format);
-               g_free(format_str);
+               g_variant_builder_add(&builder, "{sv}", "Format",
+                                                       g_variant_new("s", format_str));
+//     }
+
+       /* Add Filter AttributeMask (64bit) */
+       if (app_param->fields > 0) {
+               if (app_param->fields == PBAP_FIELD_ALL) {
+                       BT_DBG("** CHECKED ALL **");
+                       fields_str = g_strdup("ALL");
+                       g_variant_builder_add(&inner_builder, "s", fields_str);
+                       g_free(fields_str);
+               } else {
+                       for (i = 0; i < PBAP_NUM_OF_FIELDS_ENTRY; i++) {
+                               if (app_param->fields & (1ULL << i)) {
+                                       BT_DBG("** CHECKED[%d]", i);
+                                       fields_str = g_strdup(FIELDS[i]);
+                                       g_variant_builder_add(&inner_builder, "s", fields_str);
+                                       g_free(fields_str);
+                               }
+                       }
+               }
+
+               g_variant_builder_add(&builder, "{sv}", "Fields",
+                       g_variant_new("as", &inner_builder));
        }
 
+       filters = g_variant_builder_end(&builder);
 
 //****************************
 // Add code for Fields
@@ -857,100 +1030,129 @@ int __bt_pbap_call_get_vcard(DBusGProxy *proxy, bt_pbap_data_t *pbap_data)
        sprintf(vcard, "%d.vcf", app_param->index);
        BT_DBG("Handle: %s", vcard);
        vcard_handle = g_strdup(vcard);
+       BT_DBG("vcard_handle: %s", vcard_handle);
 
-       if (!dbus_g_proxy_begin_call(proxy, "Pull",
-                       (DBusGProxyCallNotify)__bt_pbap_get_vcard_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, vcard_handle,
-                       G_TYPE_STRING, target_file,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       filters,
-                       G_TYPE_INVALID)) {
-               BT_ERR("GetSize Dbus Call Error");
-               g_hash_table_destroy(filters);
-               g_free(vcard_handle);
-               return BLUETOOTH_ERROR_INTERNAL;
+       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);
        }
 
-       g_hash_table_destroy(filters);
+       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",
+                       temp,
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_get_vcard_cb,
+                       pbap_data);
+
+       g_free(format_str);
        g_free(vcard_handle);
+       g_free(target_file);
 
-       return BLUETOOTH_ERROR_NONE;
        BT_DBG("-");
-
+       return BLUETOOTH_ERROR_NONE;
 }
 
-int __bt_pbap_call_search_phonebook(DBusGProxy *proxy, bt_pbap_data_t *pbap_data)
+int __bt_pbap_call_search_phonebook(GDBusProxy *proxy, bt_pbap_data_t *pbap_data)
 {
        BT_DBG("+");
-       GHashTable *filters;
-       GValue *max_count;
-       GValue *order;
-       GValue *offset;
+
        char *order_str = NULL;
        char *field = NULL;
        char *value = NULL;
        bt_pbap_search_parameters_t *app_param = pbap_data->app_param;
+       GVariantBuilder builder;
+       GVariant *filters;
+
+       g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
 
-       filters = g_hash_table_new_full(g_str_hash, g_str_equal,
-                               NULL, (GDestroyNotify)g_free);
+       /* Add MaxlistCount*/
+       g_variant_builder_add(&builder, "{sv}", "MaxCount",
+                                       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]);
-               order = g_new0(GValue, 1);
-               g_value_init(order, G_TYPE_STRING);
-               g_value_set_string(order, order_str);
-               g_hash_table_insert(filters, "Order", order);
-               g_free(order_str);
+               g_variant_builder_add(&builder, "{sv}", "Order",
+                               g_variant_new("s", order_str));
        }
 
-       max_count = g_new0(GValue, 1);
-       g_value_init(max_count, G_TYPE_UINT);
-       g_value_set_uint(max_count, app_param->maxlist);
-       g_hash_table_insert(filters, "MaxCount", max_count);
-
        /* Add Offset Filter only if other than 0 (default)*/
        if (app_param->offset > 0) {
-               offset = g_new0(GValue, 1);
-               g_value_init(offset, G_TYPE_UINT);
-               g_value_set_uint(offset, app_param->offset);
-               g_hash_table_insert(filters, "Offset", offset);
+               g_variant_builder_add(&builder, "{sv}", "Offset",
+                                               g_variant_new("u", app_param->offset));
        }
 
+       filters = g_variant_builder_end(&builder);
+
        field = g_strdup(SEARCH_FIELD[app_param->search_attribute]);
        value = g_strdup(app_param->search_value);
-       if (!dbus_g_proxy_begin_call(proxy, "Search",
-                       (DBusGProxyCallNotify)__bt_pbap_search_phonebook_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, field,
-                       G_TYPE_STRING, value,
-                       dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-                       filters,
-                       G_TYPE_INVALID)) {
-               BT_ERR("List Dbus Call Error");
-               g_hash_table_destroy(filters);
-               g_free(field);
-               g_free(value);
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
 
-       g_hash_table_destroy(filters);
-       g_free(field);
+       g_dbus_proxy_call(proxy, "Search",
+                       g_variant_new("(ss@a{sv})", field, value, filters),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_search_phonebook_cb,
+                       pbap_data);
+
        g_free(value);
+       g_free(order_str);
+       g_free(field);
 
-       return BLUETOOTH_ERROR_NONE;
        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("+");
-       DBusGProxy *g_pbap_session_proxy = NULL;
+       GDBusConnection *g_conn;
+       GDBusProxy *g_pbap_session_proxy = NULL;
        char address_string[18] = { 0, };
        char *source_string = NULL;
        char *type_string = NULL;
+       GError *err = NULL;
        bt_pbap_data_t *pbap_data = NULL;
 
        BT_CHECK_PARAMETER(address, return);
@@ -968,49 +1170,61 @@ int _bt_pbap_get_phonebook_size(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);
+       source_string = g_strdup(SOURCE[source]);
+       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 = dbus_g_proxy_new_for_name(dbus_connection,
-                       PBAP_SESSION_SERVICE,
-                       g_pbap_session_path,
-                       PBAP_SESSION_INTERFACE);
+
+       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);
+
        if (!g_pbap_session_proxy) {
                BT_ERR("Failed to get a proxy for D-Bus\n");
+               if (err) {
+                       ERR("Unable to create proxy: %s", err->message);
+                       g_clear_error(&err);
+               }
+               g_free(source_string);
+               g_free(type_string);
                return -1;
        }
 
+       BT_DBG("Prepare PBAP data");
        pbap_data = g_new0(bt_pbap_data_t, 1);
        pbap_data->operation = GET_SIZE;
        pbap_data->data = g_strdup(address_string);
 
        if (source ==  selected_path.folder && type == selected_path.type) {
-               return __bt_pbap_call_get_phonebook_size(g_pbap_session_proxy, pbap_data);
-       }
-
-       source_string = g_strdup(SOURCE[source]);
-       type_string = g_strdup(TYPE[type]);
-
-       BT_DBG("Address[%s] Source[%s] Type[%s]",
-               address_string, source_string, type_string);
-
-       if (!dbus_g_proxy_begin_call(g_pbap_session_proxy, "Select",
-                       (DBusGProxyCallNotify)__bt_pbap_select_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, source_string,
-                       G_TYPE_STRING, type_string,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Select Dbus Call Error");
+               BT_DBG("Call get_phonebook_size directly");
                g_free(source_string);
                g_free(type_string);
-               g_object_unref(g_pbap_session_proxy);
-               return BLUETOOTH_ERROR_INTERNAL;
+               return __bt_pbap_call_get_phonebook_size(g_pbap_session_proxy, pbap_data);
        }
 
+       BT_DBG("Call SELECT");
+       g_dbus_proxy_call(g_pbap_session_proxy, "Select",
+                       g_variant_new("(ss)", source_string, type_string),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_select_cb,
+                       pbap_data);
+
+       BT_DBG("Set Folders");
        selected_path.folder = source;
        selected_path.type = type;
 
        g_free(source_string);
        g_free(type_string);
-
        return 0;
 }
 
@@ -1018,10 +1232,12 @@ int _bt_pbap_get_phonebook(const bluetooth_device_address_t *address,
                int source, int type, bt_pbap_pull_parameters_t *app_param)
 {
        BT_DBG("+");
-       DBusGProxy *g_pbap_session_proxy = NULL;
+       GDBusConnection *g_conn;
+       GDBusProxy *g_pbap_session_proxy = NULL;
        char address_string[18] = { 0, };
        char *source_string = NULL;
        char *type_string = NULL;
+       GError *err = NULL;
 
        bt_pbap_data_t *pbap_data = NULL;
        bt_pbap_pull_parameters_t *param = NULL;
@@ -1042,13 +1258,34 @@ int _bt_pbap_get_phonebook(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);
 
+       source_string = g_strdup(SOURCE[source]);
+       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 = dbus_g_proxy_new_for_name(dbus_connection,
-                       PBAP_SESSION_SERVICE,
-                       g_pbap_session_path,
-                       PBAP_SESSION_INTERFACE);
+
+       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);
+
        if (!g_pbap_session_proxy) {
                BT_ERR("Failed to get a proxy for D-Bus\n");
+               if (err) {
+                       ERR("Unable to create proxy: %s", err->message);
+                       g_clear_error(&err);
+               }
+               g_free(source_string);
+               g_free(type_string);
                return -1;
        }
 
@@ -1060,31 +1297,19 @@ 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) {
-               return __bt_pbap_call_get_phonebook(g_pbap_session_proxy, pbap_data);
-       }
-
-       source_string = g_strdup(SOURCE[source]);
-       type_string = g_strdup(TYPE[type]);
-
-       BT_DBG("Address[%s] Source[%s] Type[%s]",
-                       address_string, source_string, type_string);
-
-       if (!dbus_g_proxy_begin_call(g_pbap_session_proxy, "Select",
-                       (DBusGProxyCallNotify)__bt_pbap_select_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, source_string,
-                       G_TYPE_STRING, type_string,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Select Dbus Call Error");
                g_free(source_string);
                g_free(type_string);
-               g_object_unref(g_pbap_session_proxy);
-               return BLUETOOTH_ERROR_INTERNAL;
+               return __bt_pbap_call_get_phonebook(g_pbap_session_proxy, pbap_data);
        }
 
+       g_dbus_proxy_call(g_pbap_session_proxy, "Select",
+                       g_variant_new("(ss)", source_string, type_string),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_select_cb,
+                       pbap_data);
+
        selected_path.folder = source;
        selected_path.type = type;
-
        g_free(source_string);
        g_free(type_string);
 
@@ -1095,10 +1320,12 @@ int _bt_pbap_get_list(const bluetooth_device_address_t *address, int source,
                int type,  bt_pbap_list_parameters_t *app_param)
 {
        BT_DBG("+");
-       DBusGProxy *g_pbap_session_proxy = NULL;
+       GDBusConnection *g_conn;
+       GDBusProxy *g_pbap_session_proxy = NULL;
        char address_string[18] = { 0, };
        char *source_string = NULL;
        char *type_string = NULL;
+       GError *err = NULL;
 
        bt_pbap_data_t *pbap_data = NULL;
        bt_pbap_list_parameters_t *param = NULL;
@@ -1119,16 +1346,38 @@ int _bt_pbap_get_list(const bluetooth_device_address_t *address, int source,
        _bt_convert_addr_type_to_string(address_string, (unsigned char *)address->addr);
                BT_DBG("Address String: %s", address_string);
 
+       source_string = g_strdup(SOURCE[source]);
+       type_string = g_strdup("nil");
+
+       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 = dbus_g_proxy_new_for_name(dbus_connection,
-                       PBAP_SESSION_SERVICE,
-                       g_pbap_session_path,
-                       PBAP_SESSION_INTERFACE);
+
+       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);
+
        if (!g_pbap_session_proxy) {
                BT_ERR("Failed to get a proxy for D-Bus\n");
+               if (err) {
+                       ERR("Unable to create proxy: %s", err->message);
+                       g_clear_error(&err);
+               }
+               g_free(source_string);
+               g_free(type_string);
                return -1;
        }
 
+       BT_DBG("Set PBAP Data");
        pbap_data = g_new0(bt_pbap_data_t, 1);
        pbap_data->operation = GET_LIST;
        pbap_data->data = g_strdup(address_string);
@@ -1136,32 +1385,20 @@ int _bt_pbap_get_list(const bluetooth_device_address_t *address, int source,
        memcpy(param, app_param, sizeof(bt_pbap_list_parameters_t));
        pbap_data->app_param = param;
 
+       /* Always Call Select for vCardListing
        if (source ==  selected_path.folder && type == selected_path.type) {
+               BT_DBG("Call Directly");
                return __bt_pbap_call_get_vcards_list(g_pbap_session_proxy, pbap_data);
-       }
-
-       source_string = g_strdup(SOURCE[source]);
-       type_string = g_strdup(TYPE[type]);
-
-       BT_DBG("Address[%s] Source[%s] Type[%s]",
-                       address_string, source_string, type_string);
-
-       if (!dbus_g_proxy_begin_call(g_pbap_session_proxy, "Select",
-                       (DBusGProxyCallNotify)__bt_pbap_select_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, source_string,
-                       G_TYPE_STRING, type_string,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Select Dbus Call Error");
-               g_free(source_string);
-               g_free(type_string);
-               g_object_unref(g_pbap_session_proxy);
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
-
+       } */
+       BT_DBG("Call SELECT");
+       g_dbus_proxy_call(g_pbap_session_proxy, "Select",
+                       g_variant_new("(ss)", source_string, type_string),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_select_cb,
+                       pbap_data);
+       BT_DBG("Set Folders");
        selected_path.folder = source;
        selected_path.type = type;
-
        g_free(source_string);
        g_free(type_string);
 
@@ -1173,12 +1410,14 @@ 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("+");
-       DBusGProxy *g_pbap_session_proxy = NULL;
+       GDBusConnection *g_conn;
+       GDBusProxy *g_pbap_session_proxy = NULL;
        char address_string[18] = { 0, };
        char *source_string = NULL;
        char *type_string = NULL;
        bt_pbap_data_t *pbap_data = NULL;
        bt_pbap_pull_vcard_parameters_t *param = NULL;
+       GError *err = NULL;
 
        BT_CHECK_PARAMETER(address, return);
 
@@ -1196,13 +1435,34 @@ int _bt_pbap_pull_vcard(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);
 
+       source_string = g_strdup(SOURCE[source]);
+       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 = dbus_g_proxy_new_for_name(dbus_connection,
-                       PBAP_SESSION_SERVICE,
-                       g_pbap_session_path,
-                       PBAP_SESSION_INTERFACE);
+
+       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);
+
        if (!g_pbap_session_proxy) {
                BT_ERR("Failed to get a proxy for D-Bus\n");
+               if (err) {
+                       ERR("Unable to create proxy: %s", err->message);
+                       g_clear_error(&err);
+               }
+               g_free(source_string);
+               g_free(type_string);
                return -1;
        }
 
@@ -1214,31 +1474,19 @@ 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) {
-               return __bt_pbap_call_get_vcard(g_pbap_session_proxy, pbap_data);
-       }
-
-       source_string = g_strdup(SOURCE[source]);
-       type_string = g_strdup(TYPE[type]);
-
-       BT_DBG("Address[%s] Source[%s] Type[%s]",
-                       address_string, source_string, type_string);
-
-       if (!dbus_g_proxy_begin_call(g_pbap_session_proxy, "Select",
-                       (DBusGProxyCallNotify)__bt_pbap_select_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, source_string,
-                       G_TYPE_STRING, type_string,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Select Dbus Call Error");
                g_free(source_string);
                g_free(type_string);
-               g_object_unref(g_pbap_session_proxy);
-               return BLUETOOTH_ERROR_INTERNAL;
+               return __bt_pbap_call_get_vcard(g_pbap_session_proxy, pbap_data);
        }
 
+       g_dbus_proxy_call(g_pbap_session_proxy, "Select",
+                       g_variant_new("(ss)", source_string, type_string),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_select_cb,
+                       pbap_data);
+
        selected_path.folder = source;
        selected_path.type = type;
-
        g_free(source_string);
        g_free(type_string);
 
@@ -1249,12 +1497,14 @@ int _bt_pbap_phonebook_search(const bluetooth_device_address_t *address,
                int source, int type, bt_pbap_search_parameters_t *app_param)
 {
        BT_DBG("+");
-       DBusGProxy *g_pbap_session_proxy = NULL;
+       GDBusConnection *g_conn;
+       GDBusProxy *g_pbap_session_proxy = NULL;
        char address_string[18] = { 0, };
        char *source_string = NULL;
        char *type_string = NULL;
        bt_pbap_data_t *pbap_data = NULL;
        bt_pbap_search_parameters_t *param = NULL;
+       GError *err = NULL;
 
        BT_CHECK_PARAMETER(address, return);
 
@@ -1272,13 +1522,34 @@ int _bt_pbap_phonebook_search(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);
 
+       source_string = g_strdup(SOURCE[source]);
+       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 = dbus_g_proxy_new_for_name(dbus_connection,
-                       PBAP_SESSION_SERVICE,
-                       g_pbap_session_path,
-                       PBAP_SESSION_INTERFACE);
+
+       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);
+
        if (!g_pbap_session_proxy) {
                BT_ERR("Failed to get a proxy for D-Bus\n");
+               if (err) {
+                       ERR("Unable to create proxy: %s", err->message);
+                       g_clear_error(&err);
+               }
+               g_free(source_string);
+               g_free(type_string);
                return -1;
        }
 
@@ -1289,28 +1560,16 @@ int _bt_pbap_phonebook_search(const bluetooth_device_address_t *address,
        memcpy(param, app_param, sizeof(bt_pbap_search_parameters_t));
        pbap_data->app_param = param;
 
+       /* Call Select for vCardListing
        if (source ==  selected_path.folder && type == selected_path.type) {
                return __bt_pbap_call_search_phonebook(g_pbap_session_proxy, pbap_data);
-       }
-
-       source_string = g_strdup(SOURCE[source]);
-       type_string = g_strdup(TYPE[type]);
+       }*/
 
-       BT_DBG("Address[%s] Source[%s] Type[%s]",
-                       address_string, source_string, type_string);
-
-       if (!dbus_g_proxy_begin_call(g_pbap_session_proxy, "Select",
-                       (DBusGProxyCallNotify)__bt_pbap_select_cb,
-                       pbap_data, NULL,
-                       G_TYPE_STRING, source_string,
-                       G_TYPE_STRING, type_string,
-                       G_TYPE_INVALID)) {
-               BT_ERR("Select Dbus Call Error");
-               g_object_unref(g_pbap_session_proxy);
-               g_free(source_string);
-               g_free(type_string);
-               return BLUETOOTH_ERROR_INTERNAL;
-       }
+       g_dbus_proxy_call(g_pbap_session_proxy, "Select",
+                       g_variant_new("(ss)", source_string, type_string),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       (GAsyncReadyCallback)__bt_pbap_select_cb,
+                       pbap_data);
 
        selected_path.folder = source;
        selected_path.type = type;