Modify _invoke_dbus_method_sync to make it work 39/213039/1 accepted/tizen_5.5_unified_mobile_hotfix tizen_5.5_mobile_hotfix accepted/tizen/5.5/unified/20191031.014417 accepted/tizen/5.5/unified/mobile/hotfix/20201027.082014 accepted/tizen/unified/20190911.111611 submit/tizen/20190910.110038 submit/tizen_5.5/20191031.000001 submit/tizen_5.5_mobile_hotfix/20201026.185101 tizen_5.5.m2_release
authorlokilee73 <changjoo.lee@samsung.com>
Thu, 29 Aug 2019 12:05:53 +0000 (21:05 +0900)
committerlokilee73 <changjoo.lee@samsung.com>
Thu, 29 Aug 2019 12:06:10 +0000 (21:06 +0900)
Change-Id: I73aa41cfeb9bf354a0ad7181ad2e793d25638daa
Signed-off-by: lokilee73 <changjoo.lee@samsung.com>
src/dbus_util.c

index 8ea8f4b..d80ff07 100644 (file)
@@ -22,8 +22,8 @@
 #define DBUS_REPLY_TIMEOUT (120 * 1000)
 
 #define POWEROFF_BUS_NAME       "org.tizen.system.popup"
-#define POWEROFF_OBJECT_PATH    "/Org/Tizen/System/Popup/Poweroff"
-#define POWEROFF_INTERFACE_NAME POWEROFF_BUS_NAME".Poweroff"
+#define POWEROFF_OBJECT_PATH    "/Org/Tizen/System/Popup/Powerkey"
+#define POWEROFF_INTERFACE_NAME POWEROFF_BUS_NAME".Powerkey"
 #define METHOD_POWEROFF_NAME   "PopupLaunch"
 
 static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[])
@@ -63,47 +63,64 @@ static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[]
 
 
 
-
-static int _invoke_dbus_method_async(const char *dest, const char *path,
+static int _invoke_dbus_method_sync(const char *dest, const char *path,
                const char *interface, const char *method,
-               const char *sig, char *param[])
+               int size, char *param[])
 {
        DBusConnection *conn;
-       DBusMessage *msg;
-       DBusMessageIter iter;
-       int r;
+       DBusMessage *msg = NULL;
+       DBusMessage *reply;
+       DBusMessageIter iter, aiter, piter;
+       DBusError err;
+       int ret, result, i;
+       char *key, *value;
 
        conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
        if (!conn) {
-               _E("dbus_bus_get error");
-               return 0;
+               ret = 0;
+               _E("Failed to dbus_bus_get.");
+               return -EPERM;
        }
 
        msg = dbus_message_new_method_call(dest, path, interface, method);
        if (!msg) {
-               _E("dbus_message_new_method_call(%s:%s-%s)", path, interface, method);
-               return 0;
+               _E("Failed to dbus_message_new_method_call(%s:%s-%s).", path, interface, method);
+               return -EBADMSG;
        }
 
        dbus_message_iter_init_append(msg, &iter);
-       r = _append_variant(&iter, sig, param);
-       if (r < 0) {
-               _E("append_variant error(%d)", r);
-               dbus_message_unref(msg);
-               return 0;
+       dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{ss}", &aiter);
+       for (i = 0 ; i < size ; i = i + 2) {
+               key = param[i];
+               value = param[i+1];
+               _I("key=%s value=%s", key, value);
+               dbus_message_iter_open_container(&aiter, DBUS_TYPE_DICT_ENTRY, NULL, &piter);
+               dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, &key);
+               dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, &value);
+               dbus_message_iter_close_container(&aiter, &piter);
        }
 
-       r = dbus_connection_send(conn, msg, NULL);
+       dbus_message_iter_close_container(&iter, &aiter);
+       dbus_error_init(&err);
+
+       reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
        dbus_message_unref(msg);
-       if (r != TRUE) {
-               _E("dbus_connection_send error(%s:%s:%s-%s)", dest, path, interface, method);
-               return 0;
+       if (!reply) {
+               _E("Failed to dbus_connection_send. dest=%s %s:%s-%s. err.name=%s: %s", dest, path, interface, method, err.name, err.message);
+               dbus_error_free(&err);
+               return -ECOMM;
        }
 
-       _D("dbus_connection_send, ret=%d", r);
-       return 1;
-}
+       ret = dbus_message_get_args(reply, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
+       dbus_message_unref(reply);
+       if (!ret) {
+               _E("No message dest=%s %s:%s-%s. err.name=%s: %s", dest, path, interface, method, err.name, err.message);
+               dbus_error_free(&err);
+               return -ENOMSG;
+       }
 
+       return result;
+}
 
 
 
@@ -165,9 +182,13 @@ void dbus_util_send_perceptible_signal(int pid)
 void dbus_util_send_poweroff_signal(void)
 {
        int ret = 0;
+       char *param[2];
+
+       param[0] = "_SYSPOPUP_CONTENT_";
+       param[1] = "powerkey";
 
-       ret = _invoke_dbus_method_async(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME,
-                       METHOD_POWEROFF_NAME, NULL, NULL);
+       ret = _invoke_dbus_method_sync(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME,
+                       METHOD_POWEROFF_NAME, sizeof(param)/sizeof(param[0]), param);
        ret_if(!ret);
 
        _D("%s-%s", POWEROFF_INTERFACE_NAME, METHOD_POWEROFF_NAME);