Implement pkg enable/disable 18/78918/6 accepted/tizen/common/20160719.171906 accepted/tizen/ivi/20160718.104421 accepted/tizen/mobile/20160718.104306 accepted/tizen/tv/20160718.104230 accepted/tizen/wearable/20160718.104324 submit/tizen/20160718.020809
authorJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 7 Jul 2016 10:14:14 +0000 (19:14 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 18 Jul 2016 01:48:29 +0000 (18:48 -0700)
Related changes
[pkgmgr-tool] https://review.tizen.org/gerrit/78916
[slp-pkgmgr] https://review.tizen.org/gerrit/78917
[app-installers] https://review.tizen.org/gerrit/78919
[tpk-backend] https://review.tizen.org/gerrit/#/c/79070/

Change-Id: I2ebab9538ada5468b0a9859ae171dfdf740fda2c
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/pkgmgr-server.c
src/request.c

index dbcbd37..deb83ab 100644 (file)
@@ -918,14 +918,48 @@ static int __process_move(pm_dbus_msg *item)
 
 static int __process_enable_pkg(pm_dbus_msg *item)
 {
-       /* TODO */
-       return 0;
+       char *backend_cmd;
+       char **argv;
+       char args[MAX_PKG_ARGS_LEN];
+       int pid;
+
+       backend_cmd = _get_backend_cmd(item->pkg_type);
+       if (backend_cmd == NULL)
+               return -1;
+
+       snprintf(args, sizeof(args), "%s -k %s -A %s", backend_cmd,
+                       item->req_id, item->pkgid);
+       argv = __generate_argv(args);
+
+       pid = __fork_and_exec_with_args(argv, item->uid);
+
+       g_strfreev(argv);
+       free(backend_cmd);
+
+       return pid;
 }
 
 static int __process_disable_pkg(pm_dbus_msg *item)
 {
-       /* TODO */
-       return 0;
+       char *backend_cmd;
+       char **argv;
+       char args[MAX_PKG_ARGS_LEN];
+       int pid;
+
+       backend_cmd = _get_backend_cmd(item->pkg_type);
+       if (backend_cmd == NULL)
+               return -1;
+
+       snprintf(args, sizeof(args), "%s -k %s -D %s", backend_cmd,
+                       item->req_id, item->pkgid);
+       argv = __generate_argv(args);
+
+       pid = __fork_and_exec_with_args(argv, item->uid);
+
+       g_strfreev(argv);
+       free(backend_cmd);
+
+       return pid;
 }
 
 static int __process_enable_app(pm_dbus_msg *item)
index c0ff811..d58f978 100644 (file)
@@ -526,6 +526,7 @@ static int __handle_request_enable_pkg(uid_t uid,
        uid_t target_uid = (uid_t)-1;
        char *pkgtype = NULL;
        char *pkgid = NULL;
+       char *reqkey = NULL;
 
        g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
        if (target_uid == (uid_t)-1 || pkgid == NULL) {
@@ -534,15 +535,21 @@ static int __handle_request_enable_pkg(uid_t uid,
                return -1;
        }
 
-       if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_ENABLE_PKG, pkgtype,
+       reqkey = __generate_reqkey(pkgid);
+       if (reqkey == NULL)
+               return -1;
+
+       if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_ENABLE_PKG, pkgtype,
                                pkgid, "")) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
+               free(reqkey);
                return -1;
        }
 
        g_dbus_method_invocation_return_value(invocation,
                        g_variant_new("(i)", PKGMGR_R_OK));
+       free(reqkey);
 
        return 0;
 }
@@ -553,6 +560,7 @@ static int __handle_request_disable_pkg(uid_t uid,
        uid_t target_uid = (uid_t)-1;
        char *pkgtype = NULL;
        char *pkgid = NULL;
+       char *reqkey = NULL;
 
        g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
        if (target_uid == (uid_t)-1 || pkgid == NULL) {
@@ -561,15 +569,21 @@ static int __handle_request_disable_pkg(uid_t uid,
                return -1;
        }
 
-       if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_DISABLE_PKG, pkgtype,
+       reqkey = __generate_reqkey(pkgid);
+       if (reqkey == NULL)
+               return -1;
+
+       if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_DISABLE_PKG, pkgtype,
                                pkgid, "")) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
+               free(reqkey);
                return -1;
        }
 
        g_dbus_method_invocation_return_value(invocation,
                        g_variant_new("(i)", PKGMGR_R_OK));
+       free(reqkey);
 
        return 0;
 }