[bluetooth-frwk] Create/destroy session implementation added
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-map-client.c
index 187854e..b42e1fa 100644 (file)
@@ -230,4 +230,99 @@ static int __bt_opp_client_start_XXXXXXXXXX(int request_id, char *address
        /* TODO: MAP */
 }
 
+int _bt_create_session_sync(char* address, char** session_id)
+{
+       BT_DBG("Entered SERVICE create session");
+       GDBusConnection *g_conn;
+       GDBusProxy *session_proxy;
+       GError *err = NULL;
+       const char *session_path;
+
+       retv_if(address == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
+
+       g_conn = _bt_gdbus_get_session_gconn();
+       retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE,
+                                               NULL, BT_OBEX_SERVICE_NAME,
+                                               BT_OBEX_CLIENT_PATH,
+                                               BT_OBEX_CLIENT_INTERFACE,
+                                               NULL, &err);
+       if (err) {
+               BT_ERR("Unable to create session_proxy: %s", err->message);
+               g_clear_error(&err);
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+       retv_if(session_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       GVariantBuilder* builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+       g_variant_builder_add(builder, "{sv}", "Target",
+                       g_variant_new("s", "map"));
+       GVariant *args = g_variant_builder_end(builder);
+       g_variant_builder_unref (builder);
+       GVariant *param = g_variant_new("(s@a{sv})", address, args);
+
+       char* string = g_variant_print (param, true);
+
+       GVariant *value = g_dbus_proxy_call_sync(session_proxy, "CreateSession", param,
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+       if (err != NULL) {
+               BT_ERR("Could not create session: %s\n", err->message);
+               g_error_free(err);
+               return BLUETOOTH_ERROR_INTERNAL;
+       } else {
+               if (NULL == value) {
+                       BT_ERR("create session returned value is null\n");
+                       return BLUETOOTH_ERROR_INTERNAL;
+               } else {
+                       BT_DBG("create session succeed\n");
+               }
+       }
+
+       g_variant_get(value, "(&o)", session_id);
+       BT_DBG("session_id = \"%s\"\n", *session_id);
+
+       return BLUETOOTH_ERROR_NONE;
+}
+
+int _bt_destroy_session_sync(char* session_id)
+{
+       BT_DBG("Entered SERVICE destroy session with id: \"%s\"", session_id);
+       GDBusConnection *g_conn;
+       GDBusProxy *session_proxy;
+       GError *err = NULL;
+
+       retv_if(session_id == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
+
+       g_conn = _bt_gdbus_get_session_gconn();
+       retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE,
+                                               NULL, BT_OBEX_SERVICE_NAME,
+                                               BT_OBEX_CLIENT_PATH,
+                                               BT_OBEX_CLIENT_INTERFACE,
+                                               NULL, &err);
+       if (err) {
+               BT_ERR("Unable to create session_proxy: %s", err->message);
+               g_clear_error(&err);
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+       retv_if(session_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       GVariant *param = g_variant_new("(o)", session_id);
+
+       char* string = g_variant_print (param, true);
+
+       GVariant *value = g_dbus_proxy_call_sync(session_proxy, "RemoveSession", param,
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+       if (err != NULL) {
+               BT_ERR("Could not remove session: %s\n", err->message);
+               g_error_free(err);
+               return BLUETOOTH_ERROR_INTERNAL;
+       } else {
+               BT_DBG("remove session succeed\n");
+       }
+
+       return BLUETOOTH_ERROR_NONE;
+}
 /* TODO: MAP */