+++ /dev/null
-/*
- * system-dbus
- *
- * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __DBUS_H__
-#define __DBUS_H__
-
-#include <glib.h>
-#include <gio/gio.h>
-#include "extended-sd-main.h"
-
-#define DBUS_REPLY_TIMEOUT (-1)
-
-#define STORAGED_BUS_NAME "org.tizen.system.storage"
-#define STORAGED_OBJECT_PATH "/Org/Tizen/System/Storage"
-#define STORAGED_INTERFACE_NAME STORAGED_BUS_NAME
-
-#define STORAGED_PATH_BLOCK STORAGED_OBJECT_PATH"/Block"
-#define STORAGED_PATH_BLOCK_MANAGER STORAGED_PATH_BLOCK"/Manager"
-#define STORAGED_INTERFACE_BLOCK_MANAGER STORAGED_INTERFACE_NAME".BlockManager"
-
-#define VIEWTYPE_KEY "viewtype"
-#define DEVPATH_KEY "dev_path"
-#define MAPPING_NODE_KEY "mapping_node"
-#define SDCARD_SETUP_TYPE "_SDCARD_SETUP_TYPE_"
-
-struct dbus_int {
- int *list;
- int size;
-};
-
-int dbus_method_sync(const char *dest, const char *path,
- const char *interface, const char *method,
- const char *sig, char *param[]);
-int dbus_method_sync_with_reply(const char *dest,
- const char *path, const char *interface,
- const char *method, const char *sig,
- char *param[], GVariant **info);
-
-typedef void (*dbus_pending_cb)(void *data, GVariant *result, GError *err);
-
-int dbus_method_async_with_reply(const char *dest, const char *path,
- const char *interface, const char *method,
- const char *sig, char *param[], dbus_pending_cb cb, int timeout, void *data);
-
-/**
- * If result is NULL, err is set.
- * Do not invoke g_variant_unref() with result.
- */
-
-#endif
+++ /dev/null
-/*
- * system-dbus
- *
- * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <errno.h>
-#include <stdarg.h>
-
-#include "dbus-call.h"
-#include "log-util.h"
-
-#define DBUS_MAXIMUM_NAME_LENGTH 255
-
-struct pending_call_data {
- dbus_pending_cb func;
- void *data;
-};
-
-struct proxy_node {
- GDBusProxy *proxy;
- char *dest;
- char *path;
- char *interface;
-};
-
-static GList *proxy_pool;
-static pthread_mutex_t dmutex = PTHREAD_MUTEX_INITIALIZER;
-static int bus_init;
-
-static int g_dbus_error_to_errno(int code)
-{
- /**
- * if device is not supported,
- * deviced does not register the method call of the device.
- * in this case, dbus will return UNKNOWN_METHOD error.
- */
- /* refer to gio/gioenums.h */
- if (code == G_DBUS_ERROR_ACCESS_DENIED)
- return -EACCES;
- else if (code == G_DBUS_ERROR_UNKNOWN_METHOD)
- return -ENOTSUP;
- return -ECOMM;
-}
-
-static GVariant *append_g_variant(const char *sig, char *param[])
-{
- GVariantBuilder builder;
- GVariantBuilder *sub_builder;
- GVariant *var;
- struct dbus_int *array_int;
- char *ch;
- int i, j;
-
- if (!sig || !param)
- return NULL;
-
- g_variant_builder_init(&builder, G_VARIANT_TYPE_TUPLE);
-
- for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) {
- switch (*ch) {
- case 'i':
- g_variant_builder_add(&builder, "i", atoi(param[i]));
- break;
- case 'u':
- g_variant_builder_add(&builder, "u", strtoul(param[i], NULL, 10));
- break;
- case 't':
- g_variant_builder_add(&builder, "t", atoll(param[i]));
- break;
- case 's':
- g_variant_builder_add(&builder, "s", param[i]);
- break;
- case 'a':
- ++ch;
- switch (*ch) {
- case 'i':
- sub_builder = g_variant_builder_new(G_VARIANT_TYPE("ai"));
- array_int = (struct dbus_int *)param[i];
- for (j = 0; j < array_int->size; j++)
- g_variant_builder_add(sub_builder, "i", array_int->list[j]);
- var = g_variant_new("ai", sub_builder);
- g_variant_builder_unref(sub_builder);
- g_variant_builder_add_value(&builder, var);
- break;
- default:
- break;
- }
- break;
- default:
- return NULL;
- }
- }
-
- return g_variant_builder_end(&builder);
-}
-
-static struct proxy_node *find_matched_proxy_node(const char *dest,
- const char *path,
- const char *interface)
-{
- GList *elem;
- struct proxy_node *node;
- int plen;
-
- if (!dest || !path || !interface)
- return NULL;
-
- plen = strlen(path) + 1;
-
- /* find matched proxy object */
- for (elem = proxy_pool; elem; elem = elem->next) {
- node = elem->data;
- if (!node)
- continue;
- if (!strncmp(node->dest, dest, DBUS_MAXIMUM_NAME_LENGTH) &&
- !strncmp(node->path, path, plen) &&
- !strncmp(node->interface, interface,
- DBUS_MAXIMUM_NAME_LENGTH))
- return node;
- }
-
- return NULL;
-}
-
-static void on_name_vanished(GDBusConnection *connection,
- const gchar *name,
- gpointer user_data)
-{
- GList *elem;
- GList *next;
- struct proxy_node *node;
-
- pthread_mutex_lock(&dmutex);
- for (elem = proxy_pool, next = g_list_next(elem); elem;
- elem = next, next = g_list_next(elem)) {
- node = elem->data;
- if (!node)
- continue;
- proxy_pool = g_list_delete_link(proxy_pool, elem);
- g_object_unref(node->proxy);
- free(node->dest);
- free(node->path);
- free(node->interface);
- free(node);
- }
- pthread_mutex_unlock(&dmutex);
-}
-
-static GDBusProxy *get_proxy_from_proxy_pool(const char *dest,
- const char *path,
- const char *interface,
- GError **err)
-{
- GDBusConnection *conn;
- GDBusProxy *proxy;
- struct proxy_node *node;
-
- if (!dest || !path || !interface) {
- if (err)
- g_set_error(err, G_IO_ERROR,
- G_IO_ERROR_INVALID_ARGUMENT,
- "Cannot determine destination address");
- return NULL;
- }
-
- /* find matched proxy node in proxy pool */
- node = find_matched_proxy_node(dest, path, interface);
- if (node)
- return node->proxy;
-
- conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, err);
- if (!conn)
- return NULL;
-
- if (!bus_init) {
- bus_init++;
- g_bus_watch_name_on_connection(conn,
- STORAGED_BUS_NAME,
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- NULL,
- on_name_vanished,
- NULL,
- NULL);
- }
-
- proxy = g_dbus_proxy_new_sync(conn,
- G_DBUS_PROXY_FLAGS_NONE,
- NULL, /* GDBusinterfaceinfo */
- dest, /* bus name */
- path, /* object path */
- interface, /* interface name */
- NULL, /* GCancellable */
- err);
- if (!proxy)
- return NULL;
-
- node = malloc(sizeof(struct proxy_node));
- if (!node) {
- g_object_unref(proxy);
- if (err)
- g_set_error(err, G_IO_ERROR,
- G_IO_ERROR_FAILED,
- "Cannot allocate proxy_node memory");
- return NULL;
- }
-
- node->proxy = proxy;
- node->dest = strdup(dest);
- node->path = strdup(path);
- node->interface = strdup(interface);
-
- proxy_pool = g_list_append(proxy_pool, node);
-
- return proxy;
-}
-
-int dbus_method_sync(const char *dest, const char *path,
- const char *interface, const char *method,
- const char *sig, char *param[])
-{
- GDBusProxy *proxy;
- GError *err = NULL;
- GVariant *output;
- int result;
-
-#if !GLIB_CHECK_VERSION(2, 35, 0)
- g_type_init();
-#endif
-
- pthread_mutex_lock(&dmutex);
- proxy = get_proxy_from_proxy_pool(dest, path, interface, &err);
- if (!proxy) {
- pthread_mutex_unlock(&dmutex);
- DMSG_ERR("fail to get proxy from proxy pool : %s-%s (%d-%s)",
- interface, method, err->code, err->message);
- result = g_dbus_error_to_errno(err->code);
- g_clear_error(&err);
- return result;
- }
-
- output = g_dbus_proxy_call_sync(proxy,
- method, /* method name */
- append_g_variant(sig, param), /* parameters */
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_REPLY_TIMEOUT, /* timeout */
- NULL, /* GCancellable */
- &err);
- pthread_mutex_unlock(&dmutex);
-
- if (!output) {
- if (!err) {
- DMSG_ERR("g_dbus_proxy_call_sync error : %s-%s",
- interface, method);
- return -EPERM;
- }
- DMSG_ERR("g_dbus_proxy_call_sync error : %s-%s (%d-%s)",
- interface, method, err->code, err->message);
- result = g_dbus_error_to_errno(err->code);
- g_clear_error(&err);
- return result;
- }
-
- /* get output value */
- g_variant_get(output, "(i)", &result);
-
- g_variant_unref(output);
-
- return result;
-}
-
-int dbus_method_sync_with_reply(const char *dest,
- const char *path, const char *interface,
- const char *method, const char *sig,
- char *param[], GVariant **info)
-{
- GDBusProxy *proxy;
- GError *err = NULL;
- GVariant *output;
- int result;
-
-#if !GLIB_CHECK_VERSION(2, 35, 0)
- g_type_init();
-#endif
-
- pthread_mutex_lock(&dmutex);
- proxy = get_proxy_from_proxy_pool(dest, path, interface, &err);
- if (!proxy) {
- pthread_mutex_unlock(&dmutex);
- _E("fail to get proxy from proxy pool : %s-%s (%d-%s)",
- interface, method, err->code, err->message);
- result = g_dbus_error_to_errno(err->code);
- g_clear_error(&err);
- return result;
- }
-
- output = g_dbus_proxy_call_sync(proxy,
- method, /* method name */
- append_g_variant(sig, param), /* parameters */
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_REPLY_TIMEOUT, /* timeout */
- NULL, /* GCancellable */
- &err);
- pthread_mutex_unlock(&dmutex);
- if (!output) {
- if (!err) {
- _E("g_dbus_proxy_call_sync error : %s-%s",
- interface, method);
- return -EPERM;
- }
- _E("g_dbus_proxy_call_sync error : %s-%s (%d-%s)",
- interface, method, err->code, err->message);
- result = g_dbus_error_to_errno(err->code);
- g_clear_error(&err);
- return result;
- }
-
- *info = output;
- return 0;
-}
-
-static void cb_pending(GDBusProxy *proxy,
- GAsyncResult *res,
- gpointer user_data)
-{
- struct pending_call_data *data = user_data;
- GError *err = NULL;
- GVariant *output;
-
- output = g_dbus_proxy_call_finish(proxy,
- res, /* GAsyncResult */
- &err);
- if (!output)
- DMSG_ERR("g_dbus_proxy_call_finish error : %d-%s",
- err->code, err->message);
-
- if (data && data->func)
- data->func(data->data, output, err);
- free(data);
-
- if (err)
- g_clear_error(&err);
- if (output)
- g_variant_unref(output);
-}
-
-int dbus_method_async_with_reply(const char *dest, const char *path,
- const char *interface, const char *method,
- const char *sig, char *param[],
- dbus_pending_cb cb, int timeout, void *data)
-{
- GDBusProxy *proxy;
- GError *err = NULL;
- struct pending_call_data *pdata;
- int result;
-
-#if !GLIB_CHECK_VERSION(2, 35, 0)
- g_type_init();
-#endif
-
- pthread_mutex_lock(&dmutex);
- proxy = get_proxy_from_proxy_pool(dest, path, interface, &err);
- if (!proxy) {
- pthread_mutex_unlock(&dmutex);
- DMSG_ERR("fail to get proxy from proxy pool : %s-%s (%d-%s)",
- interface, method, err->code, err->message);
- result = g_dbus_error_to_errno(err->code);
- g_clear_error(&err);
- return result;
- }
-
- pdata = malloc(sizeof(struct pending_call_data));
- if (!pdata) {
- pthread_mutex_unlock(&dmutex);
- DMSG_ERR("malloc error : %s-%s",
- interface, method);
- return -ENOMEM;
- }
-
- pdata->func = cb;
- pdata->data = data;
-
- g_dbus_proxy_call(proxy,
- method, /* method name */
- append_g_variant(sig, param), /* parameters */
- G_DBUS_CALL_FLAGS_NONE,
- timeout, //DBUS_REPLY_TIMEOUT, /* timeout */
- NULL, /* GCancellable */
- (GAsyncReadyCallback)cb_pending, /* GAsyncReadyCallback */
- pdata); /* user data */
- pthread_mutex_unlock(&dmutex);
-
- return 0;
-}
#include <app_control.h>
+#include <libgdbus/dbus-system.h>
#include "extended-sd-main.h"
-#include "dbus-call.h"
-//#include "dbus-macro.h"
#include "log-util.h"
#define LUKS_NAME "crypto_LUKS"
static Evas_Object* create_page_3(appdata_s* ad);
static void
-format_done(void *data, GVariant *result, GError *err)
+format_done(GVariant *result, void *data, GError *err)
{
appdata_s* ad = (appdata_s*)data;
- char str_id[32];
- char *arr[2];
int ret;
FUNC_BEGIN();
return;
}
- snprintf(str_id, sizeof(str_id), "%d", ad->storage_id);
- arr[0] = str_id;
- arr[1] = "";
-
- ret = dbus_method_sync(STORAGED_BUS_NAME,
- STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "Mount", "is", arr);
+ ret = dbus_handle_method_sync_var(STORAGED_BUS_NAME,
+ STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "Mount", g_variant_new("(is)", ad->storage_id, ""));
if (ret < 0) {
DMSG("Failed to mount sd card as portable storage: %d", ret);
return;
appdata_s* ad = (appdata_s*)user_data;
GVariant *output;
GVariantIter *iter;
- char str_id[32];
- char str_option[32];
- char *arr[3];
char *new_fstype;
bool new_primary;
int ret;
if (state != STORAGE_STATE_REMOVED)
return;
- arr[0] = "mmc";
- ret = dbus_method_sync_with_reply(STORAGED_BUS_NAME,
- STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "GetDeviceList", "s", arr, &output);
- if (ret < 0) {
- DMSG("Failed to get storage information: %d", ret);
+ output = dbus_handle_method_sync_with_reply_var(STORAGED_BUS_NAME,
+ STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "GetDeviceList", g_variant_new("(s)", "mmc"));
+ if (!output) {
+ DMSG("Failed to get storage information");
return;
}
break;
}
- snprintf(str_id, sizeof(str_id), "%d", ad->storage_id);
- arr[0] = str_id;
- snprintf(str_option, sizeof(str_option), "%d", UNMOUNT_FORCE);
- arr[1] = str_option;
- arr[2] = "vfat";
-
- ret = dbus_method_async_with_reply(STORAGED_BUS_NAME,
+ ret = dbus_handle_method_async_with_reply_var(STORAGED_BUS_NAME,
STORAGED_PATH_BLOCK_MANAGER,
STORAGED_INTERFACE_BLOCK_MANAGER,
"FormatwithType",
- "iis",
- arr,
+ g_variant_new("(iis)", ad->storage_id, UNMOUNT_FORCE, "vfat"),
format_done,
120000,
ad);
}
static void
-unmount_done(void *data, GVariant *result, GError *err)
+unmount_done(GVariant *result, void *data, GError *err)
{
appdata_s* ad = (appdata_s*)data;
int ret;
_format_click_cb(void *data, Evas_Object* obj, void *event_info)
{
FUNC_BEGIN();
- char str_id[32];
- char str_option[32];
- char *arr[2];
int ret;
appdata_s* ad = (appdata_s*)data;
elm_object_part_content_set(ad->portable_storage_page_data->portable_storage_page_base_layout, "elm.swallow.content", page_content);
- snprintf(str_id, sizeof(str_id), "%d", ad->storage_id);
- arr[0] = str_id;
- snprintf(str_option, sizeof(str_option), "%d", UNMOUNT_FORCE);
- arr[1] = str_option;
- ret = dbus_method_async_with_reply(STORAGED_BUS_NAME,
+ ret = dbus_handle_method_async_with_reply_var(STORAGED_BUS_NAME,
STORAGED_PATH_BLOCK_MANAGER,
STORAGED_INTERFACE_BLOCK_MANAGER,
"Unmount",
- "ii",
- arr,
+ g_variant_new("(ii)", ad->storage_id, UNMOUNT_FORCE),
unmount_done,
DBUS_REPLY_TIMEOUT,
ad);