Add debug mode request 63/103163/5
authorSangyoon Jang <s89.jang@samsung.com>
Wed, 7 Dec 2016 11:22:35 +0000 (20:22 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Thu, 8 Dec 2016 10:46:02 +0000 (02:46 -0800)
Change-Id: I39577120dfa29c360a28fb3974324012eb41f23c
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
client/include/package-manager.h
client/src/pkgmgr.c
client/src/pkgmgr_client_internal.h
installer/pkgmgr_installer.c
installer/pkgmgr_installer.h

index ef17c7e1a8b7e2d1b26ddfd3ff7e6330d849ca8f..b962425cac771c7ac58adad1730879c89b345e9b 100644 (file)
@@ -984,6 +984,19 @@ int pkgmgr_client_usr_get_pkg_restriction_mode(pkgmgr_client *pc, const char *pk
 int pkgmgr_client_set_app_label(pkgmgr_client *pc, char *appid, char *label);
 int pkgmgr_client_usr_set_app_label(pkgmgr_client *pc, char *appid, char *label, uid_t uid);
 
+/**
+ * @brief      Set debug mode
+ *
+ * This API sets debug mode value for request.\n
+ *
+ * @param[in]  pc      The pointer to pkgmgr_client instance
+ * @param[in]  debug_mode      indicates the request is debug mode or not
+ * @return     0 if success, error code(<0) if fail\n
+ * @retval     PKGMGR_R_OK     success
+ * @retval     PKGMGR_R_EINVAL invalid argument
+ */
+int pkgmgr_client_set_debug_mode(pkgmgr_client *pc, bool debug_mode);
+
 /** @} */
 
 
index feb8dd576e550a78f064889a1d02bda24ff808d4..e1551f2b79710fad609ae54b37fefc5049c6f68c 100644 (file)
@@ -490,6 +490,8 @@ API int pkgmgr_client_usr_install(pkgmgr_client *pc, const char *pkg_type,
                g_variant_builder_add(builder, "s",
                                client->tep_move ? "tep_move" : "tep_copy");
        }
+       if (client->debug_mode)
+               g_variant_builder_add(builder, "s", "-G");
 
        args = g_variant_new("as", builder);
        g_variant_builder_unref(builder);
@@ -2162,3 +2164,17 @@ API int pkgmgr_client_set_app_label(pkgmgr_client *pc, char *appid, char *label)
 {
        return pkgmgr_client_usr_set_app_label(pc, appid, label, _getuid());
 }
+
+API int pkgmgr_client_set_debug_mode(pkgmgr_client *pc, bool debug_mode)
+{
+       struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
+
+       if (pc == NULL) {
+               ERR("invalid parameter");
+               return PKGMGR_R_EINVAL;
+       }
+
+       client->debug_mode = debug_mode;
+
+       return PKGMGR_R_OK;
+}
index 4949a01fc7231422f0b5f68e3cac7be6879b1ba2..7f5766d806b728ddf329e9a1f8b002bb3c2cf3b7 100644 (file)
@@ -53,6 +53,7 @@ struct pkgmgr_client_t {
        GList *cb_info_list;
        char *tep_path;
        bool tep_move;
+       bool debug_mode;
 };
 
 int pkgmgr_client_connection_connect(struct pkgmgr_client_t *pc);
index 0e94bf800b7357eae1cd25ccd2d96eb296184204..dadd55da3c086b6e1922174b8012ccaa064f6b35 100644 (file)
@@ -60,7 +60,7 @@
 #define OPTVAL_PARTIAL_RW 1005
 
 /* Supported options */
-const char *short_opts = "k:l:i:d:c:m:t:o:r:p:s:b:e:M:y:u:w:D:A:q";
+const char *short_opts = "k:l:i:d:c:m:t:o:r:p:s:b:e:M:y:u:w:D:A:qG";
 const struct option long_opts[] = {
        { "session-id", 1, NULL, 'k' },
        { "license-path", 1, NULL, 'l' },
@@ -78,6 +78,7 @@ const struct option long_opts[] = {
        { "direct-manifest-install", 1, NULL, 'y' },
        { "mount-install", 1, NULL, 'w' },
        { "recovery", 1, NULL, 'b' },
+       { "debug-mode", 0, NULL, 'G' },
        { "preload", 0, NULL, OPTVAL_PRELOAD }, /* for preload RO */
        { "force-remove", 0, NULL, OPTVAL_FORCE_REMOVAL }, /* for preload RO/RW */
        { "preload-rw", 0, NULL, OPTVAL_PRELOAD_RW }, /* for preload RW */
@@ -105,6 +106,7 @@ struct pkgmgr_installer {
        int no_removal;
        int keep_rwdata;
        int partial_rw;
+       int debug_mode;
        GDBusConnection *conn;
 };
 
@@ -564,6 +566,10 @@ pkgmgr_installer_receive_request(pkgmgr_installer *pi,
                        pi->target_uid = (uid_t)atoi(optarg);
                        break;
 
+               case 'G': /* debug mode */
+                       pi->debug_mode = 1;
+                       break;
+
                        /* Otherwise */
                case '?':       /* Not an option */
                        break;
@@ -684,6 +690,12 @@ API int pkgmgr_installer_get_partial_rw(pkgmgr_installer *pi)
        return pi->partial_rw;
 }
 
+API int pkgmgr_installer_get_debug_mode(pkgmgr_installer *pi)
+{
+       CHK_PI_RET(PKGMGR_REQ_INVALID);
+       return pi->debug_mode;
+}
+
 API int pkgmgr_installer_send_app_uninstall_signal(pkgmgr_installer *pi,
                             const char *pkg_type,
                             const char *pkgid,
index f45cd1afaf3eae1261297ee0a1901fb3a0b30ca8..d602940c832e36a9b4e95cc571b9ed1ffed2e3e1 100644 (file)
@@ -733,6 +733,41 @@ int main(int argc, char **argv)
  */
 int pkgmgr_installer_get_partial_rw(pkgmgr_installer *pi);
 
+/**
+       @brief          Get debug mode value
+       @pre            pkgmgr_installer_receive_request() must be called.
+       @post           None
+       @see            pkgmgr_installer_receive_request
+       @param[in]      pi      pkgmgr_installer object
+       @return         Operation result
+       @retval         0 if a request is not debug mode
+       @retval         1 if a request is debug mode
+       @remark         None
+       @code
+#include <pkgmgr_installer.h>
+int main(int argc, char **argv)
+{
+       pkgmgr_installer *pi;
+       int r = 0;
+       int force_remove = 0;
+
+       pi = pkgmgr_installer_new();
+       if(!pi) return -1;
+       if(pkgmgr_installer_receive_request(pi, argc, argv)) {
+               r = -1;
+               goto CLEANUP_RET;
+       }
+       force_remove = pkgmgr_installer_get_debug_mode(pi);
+
+       // Do something...
+
+       pkgmgr_installer_free(pi);
+       return r;
+}
+       @endcode
+*/
+int pkgmgr_installer_get_debug_mode(pkgmgr_installer *pi);
+
 /**
        @brief          Send a app status signal
        @pre            None