Refactor __process_request function of pkg_cmd.c 38/188638/22
authorilho <ilho159.kim@samsung.com>
Fri, 7 Sep 2018 02:49:48 +0000 (11:49 +0900)
committerilho <ilho159.kim@samsung.com>
Tue, 20 Nov 2018 02:52:52 +0000 (11:52 +0900)
change that function's long switch-case statement using function pointer

Change-Id: I2bbc26dab024b8827cb706dae14c73f8414a1252
Signed-off-by: ilho <ilho159.kim@samsung.com>
src/pkg_cmd.c

index 14a416841a3cfacaa11a8c7d34b8f899f5bf98cd..667d58b385a5f72507f22b3bf802eca8959f0ae3 100644 (file)
@@ -127,6 +127,8 @@ enum pm_tool_request_e {
 };
 typedef enum pm_tool_request_e req_type;
 
+typedef int (*dispatch_func)(uid_t target_uid);
+
 struct pm_tool_args_t {
        req_type request;
        char pkg_path[PATH_MAX];
@@ -599,661 +601,816 @@ static int __pkgmgr_list_clear_cb(const pkgmgrinfo_pkginfo_h handle, void *user_
        ret = pkgmgr_client_usr_clear_user_data(pc, pkg_type, pkgid, PM_QUIET,
                                                uid);
        if (ret >= 0)
-         ret = data.result;
+               ret = data.result;
        pkgmgr_client_free(pc);
 
        return ret;
 }
 
-static int __process_request(uid_t target_uid)
+static void __invalid_arg_handler(void)
 {
-       int ret = -1;
-       pkgmgr_client *pc = NULL;
-       pkgmgr_client *listen_pc = NULL;
-       pkgmgrinfo_appinfo_h appinfo_h;
-       char buf[1024] = {'\0'};
-       int pid = -1;
-       char pkg_old[PATH_MAX] = {0, };
-       char pkg_new[PATH_MAX] = {0, };
-
-#if !GLIB_CHECK_VERSION(2, 35, 0)
-       g_type_init();
-#endif
-       switch (data.request) {
-       case INSTALL_REQ:
-               if (data.pkg_path[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE;
-                       break;
-               }
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
-               }
+       printf("Please provide the arguments.\n");
+       printf("use -h option to see usage\n");
+       data.result = PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE;
+}
 
-               if (data.debug_mode)
-                       pkgmgr_client_set_debug_mode(pc, true);
+static int __install_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-               if (data.tep_path[0] != '\0')
-                       pkgmgr_client_set_tep_path(pc, data.tep_path, data.tep_move);
+       if (data.pkg_path[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
-               if (data.des_path[0] == '\0')
-                       ret = pkgmgr_client_usr_install(pc,
-                                       data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
-                                       NULL, data.pkg_path, NULL, PM_QUIET,
-                                       __return_cb, pc, target_uid);
-               else
-                       ret = pkgmgr_client_usr_install(pc,
-                                       data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
-                                       data.des_path, data.pkg_path,
-                                       NULL, PM_QUIET, __return_cb, pc, target_uid);
+       if (data.debug_mode)
+               pkgmgr_client_set_debug_mode(pc, true);
 
-               if (ret < 0) {
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       if (access(data.pkg_path, F_OK) != 0)
-                               data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
-                       break;
-               }
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
-       case CREATE_DELTA:
-               printf("CREATE_DELTA\n");
-               if (data.pkg_old[0] == '\0' || data.pkg_new[0] == '\0') {
-                       printf("tpk pkg missing\n");
-                       break;
-               }
-               if (data.delta_pkg[0] == '\0') {
-                       snprintf(data.resolved_path_delta_pkg, PATH_MAX, "/tmp/delta_pkg");
-                       printf("output file will be /tmp/delta_pkg.delta\n");
-               }
-               const char *unzip_argv[] = {"sh", "/etc/package-manager/pkgmgr-unzip-pkg.sh", "-a",
-                               data.resolved_path_pkg_old, "-b", data.resolved_path_pkg_new, "-p",
-                               data.resolved_path_delta_pkg, NULL};
-               ret = __xsystem(unzip_argv);
-               if (ret != 0) {
-                       printf("unzip is fail .\n");
-                       return ret;
-               }
-               printf("unzip is success .\n");
-               char *ptr_old_pkg = NULL;
-               ptr_old_pkg = strrchr(data.resolved_path_pkg_old, '/');
-               if (!ptr_old_pkg) {
-                       printf("not able to extract package name.\n");
-                       break;
-               }
-               ptr_old_pkg++;
-               char *ptr_new_pkg = NULL;
-               ptr_new_pkg = strrchr(data.resolved_path_pkg_new, '/');
-               if (!ptr_new_pkg) {
-                       printf("not able to extract package name.\n");
-                       break;
-               }
-               ptr_new_pkg++;
-
-               snprintf(pkg_old, PATH_MAX, "%s%s%s", TEMP_DELTA_REPO, ptr_old_pkg, UNZIPFILE);
-               snprintf(pkg_new, PATH_MAX, "%s%s%s", TEMP_DELTA_REPO, ptr_new_pkg, UNZIPFILE);
-               __create_diff_file(pkg_old, pkg_new);
-
-               const char *delta_argv[] = {"sh", "/etc/package-manager/pkgmgr-create-delta.sh", "-a",
-                               data.resolved_path_pkg_old, "-b", data.resolved_path_pkg_new, "-p",
-                               data.resolved_path_delta_pkg, NULL};
-               ret = __xsystem(delta_argv);
-               if (ret != 0) {
-                       printf("create delta script fail .\n");
-                       return ret;
-               }
-               printf("create delta script success .\n");
-               break;
-       case UNINSTALL_REQ:
-               if (data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE;
-                       break;
-               }
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
-               }
+       if (data.tep_path[0] != '\0')
+               pkgmgr_client_set_tep_path(pc, data.tep_path, data.tep_move);
 
-               ret = __is_app_installed(data.pkgid, target_uid);
-               if (ret == -1) {
-                       printf("package is not installed\n");
-                       break;
-               }
+       if (data.des_path[0] == '\0')
+               ret = pkgmgr_client_usr_install(pc,
+                               data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
+                               NULL, data.pkg_path, NULL, PM_QUIET,
+                               __return_cb, pc, target_uid);
+       else
+               ret = pkgmgr_client_usr_install(pc,
+                               data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
+                               data.des_path, data.pkg_path,
+                               NULL, PM_QUIET, __return_cb, pc, target_uid);
 
-               ret = pkgmgr_client_usr_uninstall(pc, data.pkg_type, data.pkgid,
-                               PM_QUIET, __return_cb, NULL, target_uid);
-               if (ret < 0) {
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       if (access(data.pkg_path, F_OK) != 0)
-                               data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
-                       break;
-               }
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
+       if (ret < 0) {
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               if (access(data.pkg_path, F_OK) != 0)
+                       data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       g_main_loop_run(main_loop);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-       case REINSTALL_REQ:
-               if (data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE;
-                       break;
-               }
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
-               }
+static int __uninstall_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-               if (data.debug_mode)
-                       pkgmgr_client_set_debug_mode(pc, true);
+       if (data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
-               ret = pkgmgr_client_usr_reinstall(pc, NULL, data.pkgid, NULL, PM_QUIET, __return_cb, pc, target_uid);
-               if (ret < 0) {
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       if (access(data.pkg_path, F_OK) != 0)
-                               data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
-                       break;
-               }
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
-       case MOUNT_INSTALL_REQ:
-               if (data.pkg_path[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE;
-                       break;
-               }
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
-               }
+       ret = __is_app_installed(data.pkgid, target_uid);
+       if (ret == -1) {
+               printf("package is not installed\n");
+               pkgmgr_client_free(pc);
+               return ret;
+       }
 
-               if (data.debug_mode)
-                       pkgmgr_client_set_debug_mode(pc, true);
+       ret = pkgmgr_client_usr_uninstall(pc, data.pkg_type, data.pkgid,
+                       PM_QUIET, __return_cb, NULL, target_uid);
+       if (ret < 0) {
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               if (access(data.pkg_path, F_OK) != 0)
+                       data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       g_main_loop_run(main_loop);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-               if (data.tep_path[0] != '\0')
-                       pkgmgr_client_set_tep_path(pc, data.tep_path, data.tep_move);
+static int __reinstall_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-               if (data.des_path[0] == '\0')
-                       ret = pkgmgr_client_usr_mount_install(pc,
-                                       data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
-                                       NULL, data.pkg_path, NULL, PM_QUIET,
-                                       __return_cb, pc, target_uid);
-               else
-                       ret = pkgmgr_client_usr_mount_install(pc,
-                                       data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
-                                       data.des_path, data.pkg_path,
-                                       NULL, PM_QUIET, __return_cb, pc, target_uid);
+       if (data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
-               if (ret < 0) {
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       if (access(data.pkg_path, F_OK) != 0)
-                               data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
-                       break;
-               }
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
-       case CLEAR_REQ:
-               if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
-               }
+       if (data.debug_mode)
+               pkgmgr_client_set_debug_mode(pc, true);
 
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       ret = -1;
-                       break;
-               }
-               ret = __is_app_installed(data.pkgid, target_uid);
-               if (ret == -1) {
-                       printf("package is not installed\n");
-                       break;
-               }
-               ret = pkgmgr_client_usr_clear_user_data(pc, data.pkg_type,
-                               data.pkgid, PM_QUIET, target_uid);
-               if (ret < 0)
-                       break;
-               ret = data.result;
-               break;
+       ret = pkgmgr_client_usr_reinstall(pc, NULL,
+                       data.pkgid, NULL, PM_QUIET, __return_cb, pc, target_uid);
+       if (ret < 0) {
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               if (access(data.pkg_path, F_OK) != 0)
+                       data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       g_main_loop_run(main_loop);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-       case CLEAR_ALL_REQ:
-               if (data.pkg_type[0] == '\0') {
-                       ret = 0;
-                       ret = pkgmgrinfo_pkginfo_get_usr_list(__pkgmgr_list_clear_cb, NULL, target_uid);
-                       if (ret == -1)
-                               printf("no packages found\n");
-                       break;
-               } else {
-                       pkgmgrinfo_pkginfo_filter_h handle;
+static int __mount_install_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-                       ret = pkgmgrinfo_pkginfo_filter_create(&handle);
-                       if (ret == -1) {
-                               printf("Failed to get package filter handle\n");
-                               break;
-                       }
+       if (data.pkg_path[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
-                       ret = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_TYPE, data.pkg_type);
-                       if (ret == -1) {
-                               printf("Failed to add package type filter\n");
-                               pkgmgrinfo_pkginfo_filter_destroy(handle);
-                               break;
-                       }
+       if (data.debug_mode)
+               pkgmgr_client_set_debug_mode(pc, true);
 
-                       ret = pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo(handle, __pkgmgr_list_clear_cb, NULL, target_uid);
-                       if (ret != PMINFO_R_OK)
-                               printf("no package filter list\n");
+       if (data.tep_path[0] != '\0')
+               pkgmgr_client_set_tep_path(pc, data.tep_path, data.tep_move);
 
-                       pkgmgrinfo_pkginfo_filter_destroy(handle);
-                       break;
-               }
+       if (data.des_path[0] == '\0')
+               ret = pkgmgr_client_usr_mount_install(pc,
+                               data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
+                               NULL, data.pkg_path, NULL, PM_QUIET,
+                               __return_cb, pc, target_uid);
+       else
+               ret = pkgmgr_client_usr_mount_install(pc,
+                               data.pkg_type[0] != '\0' ? data.pkg_type : NULL,
+                               data.des_path, data.pkg_path,
+                               NULL, PM_QUIET, __return_cb, pc, target_uid);
 
-       case ACTIVATE_REQ:
-               if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
-               }
+       if (ret < 0) {
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               if (access(data.pkg_path, F_OK) != 0)
+                       data.result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       g_main_loop_run(main_loop);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       ret = -1;
-                       break;
-               }
+static int __getsize_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-               if (strlen(data.label) != 0) {
-                       printf("requested label = %s\n", data.label);
+       if (data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
 
-                       ret = pkgmgr_client_usr_set_app_label(pc, data.pkgid,
-                               data.label, target_uid);
-                       if (ret < 0) {
-                               printf("set_app_label is failed\n");
-                               break;
-                       }
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
-                       printf("set_app_label is done\n");
-               }
+       if (data.type == 9) {
+               ret = pkgmgrinfo_pkginfo_get_usr_list(__pkg_list_cb,
+                               (void *)(pc), target_uid);
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       ret = pkgmgr_client_usr_request_service(PM_REQUEST_GET_SIZE, data.type,
+                       pc, NULL, data.pkgid, target_uid, NULL, NULL, NULL);
+       if (ret < 0) {
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               pkgmgr_client_free(pc);
+               return ret;
+       }
 
-               if (strcmp(data.pkg_type, "app") == 0) {
-                       if (data.global && data.uid != -1) {
-                               if (data.uid != __get_current_user_id()) {
-                                       printf("Invalid uid : %d\n", data.uid);
-                                       ret = -1;
-                                       break;
-                               } else {
-                                       target_uid = data.uid;
-                               }
-                       }
-                       ret = pkgmgrinfo_appinfo_get_usr_disabled_appinfo(data.pkgid,
-                                       target_uid, &appinfo_h);
-                       if (ret != PMINFO_R_OK) {
-                               printf("Failed to get appinfo[%s]\n", data.pkgid);
-                               ret = -1;
-                               break;
-                       }
+       printf("pkg[%s] size = %d\n", data.pkgid, ret);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-                       if (data.global) {
-                               if (data.uid != -1)
-                                       /* enable global app for this user only */
-                                       ret = pkgmgr_client_activate_global_app_for_uid(pc,
-                                                       data.pkgid, __app_return_cb, NULL,
-                                                       __get_current_user_id());
-                               else
-                                       /* enable global app for all user */
-                                       ret = pkgmgr_client_usr_activate_app(pc, data.pkgid,
-                                                       __app_return_cb, NULL, GLOBAL_USER);
-                       } else {
-                               /* enable local app */
-                               ret = pkgmgr_client_usr_activate_app(pc, data.pkgid,
-                                               __app_return_cb, NULL, target_uid);
-                       }
+static int __clear_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-                       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-               } else {
-                       listen_pc = pkgmgr_client_new(PC_LISTENING);
-                       if (listen_pc == NULL) {
-                               printf("PkgMgr Client Creation Failed\n");
-                               ret = -1;
-                               break;
-                       }
-                       ret = pkgmgr_client_listen_status(listen_pc, __return_cb, NULL);
-                       if (ret < 0) {
-                               printf("Failed to set callback[%d]\n", ret);
-                               break;
-                       }
-                       ret = pkgmgr_client_usr_activate(pc, data.pkg_type, data.pkgid,
-                                       target_uid);
-               }
-               if (ret < 0)
-                       break;
+       if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
 
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               return -1;
+       }
+       ret = __is_app_installed(data.pkgid, target_uid);
+       if (ret == -1) {
+               printf("package is not installed\n");
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       ret = pkgmgr_client_usr_clear_user_data(pc, data.pkg_type,
+                       data.pkgid, PM_QUIET, target_uid);
+       if (ret < 0) {
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-       case DEACTIVATE_REQ:
-               if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
-               }
+static int __clear_all_req_dispatcher(uid_t target_uid)
+{
+       int ret;
 
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       ret = -1;
-                       break;
-               }
+       if (data.pkg_type[0] == '\0') {
+               ret = pkgmgrinfo_pkginfo_get_usr_list(__pkgmgr_list_clear_cb,
+                       NULL, target_uid);
+               if (ret == -1)
+                       printf("no packages found\n");
+               return ret;
+       }
+       pkgmgrinfo_pkginfo_filter_h handle;
 
-               if (strcmp(data.pkg_type, "app") == 0) {
-                       ret = pkgmgrinfo_appinfo_get_usr_appinfo(data.pkgid,
-                                       target_uid, &appinfo_h);
-                       if (ret != PMINFO_R_OK) {
-                               printf("Failed to get appinfo[%s]\n", data.pkgid);
-                               ret = -1;
-                               break;
-                       }
+       ret = pkgmgrinfo_pkginfo_filter_create(&handle);
+       if (ret == -1) {
+               printf("Failed to get package filter handle\n");
+               return ret;
+       }
 
-                       if (data.global) {
-                               if (data.uid != -1 && data.uid != getuid()) {
-                                       printf("Invalid uid : %d\n", data.uid);
-                                       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-                                       ret = -1;
-                                       break;
-                               }
-                               if (data.uid != -1)
-                                       /* disable global app for this user only */
-                                       ret = pkgmgr_client_deactivate_global_app_for_uid(pc,
-                                                       data.pkgid, __app_return_cb, NULL,
-                                                       __get_current_user_id());
-                               else
-                                       /* disable global app for all user */
-                                       ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid,
-                                                       __app_return_cb, NULL, GLOBAL_USER);
-                       } else {
-                               /* disable local app */
-                               ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid,
-                                               __app_return_cb, NULL, target_uid);
-                       }
+       ret = pkgmgrinfo_pkginfo_filter_add_string(handle,
+               PMINFO_PKGINFO_PROP_PACKAGE_TYPE, data.pkg_type);
+       if (ret == -1) {
+               printf("Failed to add package type filter\n");
+               pkgmgrinfo_pkginfo_filter_destroy(handle);
+               return ret;
+       }
 
-                       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-               } else {
-                       listen_pc = pkgmgr_client_new(PC_LISTENING);
-                       if (listen_pc == NULL) {
-                               printf("PkgMgr Client Creation Failed\n");
-                               ret = -1;
-                               break;
-                       }
-                       ret = pkgmgr_client_listen_status(listen_pc, __return_cb, NULL);
-                       if (ret < 0) {
-                               printf("Failed to set callback[%d]\n", ret);
-                               break;
-                       }
-                       ret = pkgmgr_client_usr_deactivate(pc, data.pkg_type, data.pkgid,
-                                       target_uid);
-               }
-               if (ret < 0)
-                       break;
+       ret = pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo(handle,
+               __pkgmgr_list_clear_cb, NULL, target_uid);
+       if (ret != PMINFO_R_OK)
+               printf("no package filter list\n");
 
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
+       pkgmgrinfo_pkginfo_filter_destroy(handle);
+       return ret;
+}
 
-       case MOVE_REQ:
-               if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
-               }
-               if (data.type < 0 || data.type > 2) {
-                       printf("Invalid move type...See usage\n");
-                       ret = -1;
-                       break;
-               }
+static int __move_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       ret = -1;
-                       break;
-               }
-               ret = __is_app_installed(data.pkgid, target_uid);
-               if (ret == -1) {
-                       printf("package is not installed\n");
-                       break;
-               }
-               ret = pkgmgr_client_usr_request_service(PM_REQUEST_MOVE, data.type, pc,
-                               data.pkg_type, data.pkgid, target_uid, NULL, __return_cb, NULL);
+       if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+       if (data.type < 0 || data.type > 2) {
+               printf("Invalid move type...See usage\n");
+               return -1;
+       }
 
-               if (ret < 0)
-                       break;
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               return -1;
+       }
+       ret = __is_app_installed(data.pkgid, target_uid);
+       if (ret == -1) {
+               printf("package is not installed\n");
+               pkgmgr_client_free(pc);
+               return ret;
+       }
+       ret = pkgmgr_client_usr_request_service(PM_REQUEST_MOVE, data.type, pc,
+                       data.pkg_type, data.pkgid, target_uid, NULL, __return_cb, NULL);
 
-               g_main_loop_run(main_loop);
-               ret = data.result;
-               break;
+       if (ret < 0) {
+               pkgmgr_client_free(pc);
+               return ret;
+       }
 
-       case APPPATH_REQ:
-               if (data.pkg_type[0] == '\0' && data.pkgid[0] == '\0') {
-                       printf("Tizen Application Installation Path: %s\n", APP_INSTALLATION_PATH_RW);
-                       ret = 0;
-                       break;
+       g_main_loop_run(main_loop);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
+
+static int __activate_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgrinfo_appinfo_h appinfo_h;
+       pkgmgr_client *pc;
+       pkgmgr_client *listen_pc = NULL;
+
+       if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               return -1;
+       }
+
+       if (strlen(data.label) != 0) {
+               printf("requested label = %s\n", data.label);
+
+               ret = pkgmgr_client_usr_set_app_label(pc, data.pkgid,
+                       data.label, target_uid);
+               if (ret < 0) {
+                       printf("set_app_label is failed\n");
+                       pkgmgr_client_free(pc);
+                       return ret;
                }
-               if ((data.pkg_type[0] == '\0') || (data.pkgid[0] == '\0')) {
-                       printf("Use -h option to see usage\n");
-                       ret = -1;
-                       break;
+
+               printf("set_app_label is done\n");
+       }
+
+       if (strcmp(data.pkg_type, "app") == 0) {
+               if (data.global && data.uid != -1) {
+                       if (data.uid != __get_current_user_id()) {
+                               printf("Invalid uid : %d\n", data.uid);
+                               pkgmgr_client_free(pc);
+                               return -1;
+                       }
+                       target_uid = data.uid;
                }
-               if (strncmp(data.pkg_type, "wgt", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
-                       snprintf(buf, 1023, "%s/%s/res/wgt", APP_INSTALLATION_PATH_RW, data.pkgid);
-                       printf("Tizen Application Installation Path: %s\n", buf);
-                       ret = 0;
-                       break;
-               } else if (strncmp(data.pkg_type, "tpk", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
-                       snprintf(buf, 1023, "%s/%s", APP_INSTALLATION_PATH_RW, data.pkgid);
-                       printf("Tizen Application Installation Path: %s\n", buf);
-                       ret = 0;
-                       break;
-               } else {
-                       printf("Invalid package type.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
+               ret = pkgmgrinfo_appinfo_get_usr_disabled_appinfo(data.pkgid,
+                               target_uid, &appinfo_h);
+               if (ret != PMINFO_R_OK) {
+                       printf("Failed to get appinfo[%s]\n", data.pkgid);
+                       pkgmgr_client_free(pc);
+                       return -1;
                }
-               break;
 
-       case KILLAPP_REQ:
-       case CHECKAPP_REQ:
-               if (data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_INVALID_VALUE;
-                       break;
+               if (data.global) {
+                       if (data.uid != -1)
+                               /* enable global app for this user only */
+                               ret = pkgmgr_client_activate_global_app_for_uid(pc,
+                                               data.pkgid, __app_return_cb, NULL,
+                                               __get_current_user_id());
+                       else
+                               /* enable global app for all user */
+                               ret = pkgmgr_client_usr_activate_app(pc, data.pkgid,
+                                               __app_return_cb, NULL, GLOBAL_USER);
+               } else {
+                       /* enable local app */
+                       ret = pkgmgr_client_usr_activate_app(pc, data.pkgid,
+                                       __app_return_cb, NULL, target_uid);
                }
-
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
+               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+       } else {
+               listen_pc = pkgmgr_client_new(PC_LISTENING);
+               if (listen_pc == NULL) {
                        printf("PkgMgr Client Creation Failed\n");
-                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
+                       pkgmgr_client_free(pc);
+                       return -1;
+               }
+               ret = pkgmgr_client_listen_status(listen_pc, __return_cb, NULL);
+               if (ret < 0) {
+                       printf("Failed to set callback[%d]\n", ret);
+                       pkgmgr_client_free(pc);
+                       pkgmgr_client_free(listen_pc);
+                       return ret;
+               }
+               ret = pkgmgr_client_usr_activate(pc, data.pkg_type, data.pkgid,
+                               target_uid);
+       }
+       if (ret < 0) {
+               pkgmgr_client_free(pc);
+               if (listen_pc)
+                       pkgmgr_client_free(listen_pc);
+               return ret;
+       }
+
+       g_main_loop_run(main_loop);
+
+       pkgmgr_client_free(pc);
+       if (listen_pc)
+               pkgmgr_client_free(listen_pc);
+       return data.result;
+}
+
+static int __deactivate_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgrinfo_appinfo_h appinfo_h;
+       pkgmgr_client *pc;
+       pkgmgr_client *listen_pc = NULL;
+
+       if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               return -1;
+       }
+
+       if (strcmp(data.pkg_type, "app") == 0) {
+               ret = pkgmgrinfo_appinfo_get_usr_appinfo(data.pkgid,
+                               target_uid, &appinfo_h);
+               if (ret != PMINFO_R_OK) {
+                       printf("Failed to get appinfo[%s]\n", data.pkgid);
+                       pkgmgr_client_free(pc);
+                       return -1;
                }
 
-               if (data.request == KILLAPP_REQ) {
-                       ret = pkgmgr_client_usr_request_service(PM_REQUEST_KILL_APP, 0, pc,
-                               NULL, data.pkgid, target_uid, NULL, NULL, &pid);
-                       if (ret < 0) {
-                               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                               break;
+               if (data.global) {
+                       if (data.uid != -1 && data.uid != getuid()) {
+                               printf("Invalid uid : %d\n", data.uid);
+                               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+                               pkgmgr_client_free(pc);
+                               return -1;
                        }
-                       if (pid)
-                               printf("Pkgid: %s is Terminated\n", data.pkgid);
+                       if (data.uid != -1)
+                               /* disable global app for this user only */
+                               ret = pkgmgr_client_deactivate_global_app_for_uid(pc,
+                                               data.pkgid, __app_return_cb, NULL,
+                                               __get_current_user_id());
                        else
-                               printf("Pkgid: %s is already Terminated\n", data.pkgid);
-
-               } else if (data.request == CHECKAPP_REQ) {
-                       ret = pkgmgr_client_usr_request_service(PM_REQUEST_CHECK_APP, 0, pc,
-                               NULL, data.pkgid, target_uid, NULL, NULL, &pid);
-                       if (ret < 0) {
-                               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                               break;
-                       }
+                               /* disable global app for all user */
+                               ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid,
+                                               __app_return_cb, NULL, GLOBAL_USER);
+               } else {
+                       /* disable local app */
+                       ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid,
+                                       __app_return_cb, NULL, target_uid);
+               }
 
-                       if (pid)
-                               printf("Pkgid: %s is Running\n", data.pkgid);
-                       else
-                               printf("Pkgid: %s is Not Running\n", data.pkgid);
+               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+       } else {
+               listen_pc = pkgmgr_client_new(PC_LISTENING);
+               if (listen_pc == NULL) {
+                       printf("PkgMgr Client Creation Failed\n");
+                       pkgmgr_client_free(pc);
+                       return -1;
                }
-               ret = data.result;
-               break;
+               ret = pkgmgr_client_listen_status(listen_pc, __return_cb, NULL);
+               if (ret < 0) {
+                       printf("Failed to set callback[%d]\n", ret);
+                       pkgmgr_client_free(pc);
+                       pkgmgr_client_free(listen_pc);
+                       return ret;
+               }
+               ret = pkgmgr_client_usr_deactivate(pc, data.pkg_type, data.pkgid,
+                               target_uid);
+       }
+       if (ret < 0) {
+               pkgmgr_client_free(pc);
+               if (listen_pc)
+                       pkgmgr_client_free(listen_pc);
+               return ret;
+       }
 
-       case LIST_REQ:
-               if (data.pkg_type[0] == '\0') {
-                       ret = 0;
-                       ret = pkgmgrinfo_pkginfo_get_usr_list(__pkgmgr_list_cb, NULL, target_uid);
-                       if (ret == -1)
-                               printf("no packages found\n");
-                       break;
-               } else {
-                       pkgmgrinfo_pkginfo_filter_h handle;
+       g_main_loop_run(main_loop);
 
-                       ret = pkgmgrinfo_pkginfo_filter_create(&handle);
-                       if (ret == -1) {
-                               printf("Failed to get package filter handle\n");
-                               break;
-                       }
+       pkgmgr_client_free(pc);
+       if (listen_pc)
+               pkgmgr_client_free(listen_pc);
+       return data.result;
+}
 
-                       ret = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_TYPE, data.pkg_type);
-                       if (ret == -1) {
-                               printf("Failed to add package type filter\n");
-                               pkgmgrinfo_pkginfo_filter_destroy(handle);
-                               break;
-                       }
+static int __apppath_req_dispatcher(uid_t target_uid)
+{
+       char buf[1024];
 
-                       ret = pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo(handle, __pkgmgr_list_cb, NULL, target_uid);
-                       if (ret != PMINFO_R_OK)
-                               printf("no package filter list\n");
+       if (data.pkg_type[0] == '\0' && data.pkgid[0] == '\0') {
+               printf("Tizen Application Installation Path: %s\n",
+                       APP_INSTALLATION_PATH_RW);
+               return 0;
+       }
+       if ((data.pkg_type[0] == '\0') || (data.pkgid[0] == '\0')) {
+               printf("Use -h option to see usage\n");
+               return -1;
+       }
+       if (strncmp(data.pkg_type, "wgt", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
+               snprintf(buf, 1023, "%s/%s/res/wgt",
+                       APP_INSTALLATION_PATH_RW, data.pkgid);
+               printf("Tizen Application Installation Path: %s\n", buf);
+               return 0;
+       } else if (strncmp(data.pkg_type, "tpk", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
+               snprintf(buf, 1023, "%s/%s", APP_INSTALLATION_PATH_RW, data.pkgid);
+               printf("Tizen Application Installation Path: %s\n", buf);
+               return 0;
+       } else {
+               printf("Invalid package type.\n");
+               printf("use -h option to see usage\n");
+               return -1;
+       }
+}
 
-                       pkgmgrinfo_pkginfo_filter_destroy(handle);
-                       break;
-               }
+static int __checkapp_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       int pid = -1;
+       pkgmgr_client *pc;
 
-       case SHOW_REQ:
-               /* unsupported */
-               ret = -1;
-               break;
+       if (data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
 
-       case GETSIZE_REQ:
-               if (data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
-               }
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
+       if (data.request == KILLAPP_REQ) {
+               ret = pkgmgr_client_usr_request_service(PM_REQUEST_KILL_APP, 0, pc,
+                       NULL, data.pkgid, target_uid, NULL, NULL, &pid);
+               if (ret < 0) {
                        data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
-               }
-
-               if (data.type == 9) {
-                       ret = pkgmgrinfo_pkginfo_get_usr_list(__pkg_list_cb, (void *)pc, target_uid);
-                       break;
+                       pkgmgr_client_free(pc);
+                       return ret;
                }
-               ret = pkgmgr_client_usr_request_service(PM_REQUEST_GET_SIZE, data.type,
-                               pc, NULL, data.pkgid, target_uid, NULL, NULL, NULL);
+               if (pid)
+                       printf("Pkgid: %s is Terminated\n", data.pkgid);
+               else
+                       printf("Pkgid: %s is already Terminated\n", data.pkgid);
+       } else if (data.request == CHECKAPP_REQ) {
+               ret = pkgmgr_client_usr_request_service(PM_REQUEST_CHECK_APP, 0, pc,
+                       NULL, data.pkgid, target_uid, NULL, NULL, &pid);
                if (ret < 0) {
                        data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
-                       break;
+                       pkgmgr_client_free(pc);
+                       return ret;
                }
 
-               printf("pkg[%s] size = %d\n", data.pkgid, ret);
-               ret = data.result;
-               break;
+               if (pid)
+                       printf("Pkgid: %s is Running\n", data.pkgid);
+               else
+                       printf("Pkgid: %s is Not Running\n", data.pkgid);
+       }
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-       case GET_PKG_SIZE_INFO_REQ:
-               if (data.pkgid[0] == '\0') {
-                       printf("Please provide the arguments.\n");
-                       printf("use -h option to see usage\n");
-                       ret = -1;
-                       break;
-               }
+static int __killapp_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       int pid = -1;
+       pkgmgr_client *pc;
 
-               main_loop = g_main_loop_new(NULL, FALSE);
-               pc = pkgmgr_client_new(PC_REQUEST);
-               if (pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       data.result = PKGMGR_INSTALLER_ERR_FATAL_ERROR;
-                       break;
-               }
+       if (data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
 
-               if (strcmp(data.pkgid, PKG_SIZE_INFO_TOTAL) == 0)
-                       ret = pkgmgr_client_usr_get_total_package_size_info(pc,
-                               __total_pkg_size_info_recv_cb, NULL,
-                               target_uid);
-               else
-                       ret = pkgmgr_client_usr_get_package_size_info(pc,
-                               data.pkgid, __pkg_size_info_recv_cb, NULL,
-                               target_uid);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+               return -1;
+       }
 
+       if (data.request == KILLAPP_REQ) {
+               ret = pkgmgr_client_usr_request_service(PM_REQUEST_KILL_APP, 0, pc,
+                       NULL, data.pkgid, target_uid, NULL, NULL, &pid);
                if (ret < 0) {
-                       data.result = PKGMGR_INSTALLER_ERR_FATAL_ERROR;
-                       break;
+                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+                       pkgmgr_client_free(pc);
+                       return ret;
+               }
+               if (pid)
+                       printf("Pkgid: %s is Terminated\n", data.pkgid);
+               else
+                       printf("Pkgid: %s is already Terminated\n", data.pkgid);
+       } else if (data.request == CHECKAPP_REQ) {
+               ret = pkgmgr_client_usr_request_service(PM_REQUEST_CHECK_APP, 0, pc,
+                       NULL, data.pkgid, target_uid, NULL, NULL, &pid);
+               if (ret < 0) {
+                       data.result = PKGMGR_INSTALLER_ERRCODE_ERROR;
+                       pkgmgr_client_free(pc);
+                       return ret;
                }
 
-               printf("pkg[%s] ret: %d\n", data.pkgid, ret);
-               ret = data.result;
+               if (pid)
+                       printf("Pkgid: %s is Running\n", data.pkgid);
+               else
+                       printf("Pkgid: %s is Not Running\n", data.pkgid);
+       }
+       pkgmgr_client_free(pc);
+       return data.result;
+}
 
-               g_main_loop_run(main_loop);
-               break;
+static int __list_req_dispatcher(uid_t target_uid)
+{
+       int ret;
 
-       case HELP_REQ:
-               __print_usage();
-               ret = 0;
-               break;
+       if (data.pkg_type[0] == '\0') {
+               ret = pkgmgrinfo_pkginfo_get_usr_list(__pkgmgr_list_cb,
+                       NULL, target_uid);
+               if (ret == -1)
+                       printf("no packages found\n");
+               return ret;
+       }
+       pkgmgrinfo_pkginfo_filter_h handle;
 
-       default:
-               printf("Wrong Request\n");
-               ret = -1;
-               break;
+       ret = pkgmgrinfo_pkginfo_filter_create(&handle);
+       if (ret == -1) {
+               printf("Failed to get package filter handle\n");
+               return ret;
+       }
+
+       ret = pkgmgrinfo_pkginfo_filter_add_string(handle,
+               PMINFO_PKGINFO_PROP_PACKAGE_TYPE, data.pkg_type);
+       if (ret == -1) {
+               printf("Failed to add package type filter\n");
+               pkgmgrinfo_pkginfo_filter_destroy(handle);
+               return ret;
+       }
+
+       ret = pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo(handle,
+               __pkgmgr_list_cb, NULL, target_uid);
+       if (ret != PMINFO_R_OK)
+               printf("no package filter list\n");
+
+       pkgmgrinfo_pkginfo_filter_destroy(handle);
+       return ret;
+}
+
+/* unsupported */
+static int __show_req_dispatcher(uid_t target_uid)
+{
+       return -1;
+}
+
+static int __help_req_dispatcher(uid_t target_uid)
+{
+       __print_usage();
+       return 0;
+}
+
+static int __create_delta_dispatcher(uid_t target_uid)
+{
+       int ret;
+       char pkg_old[PATH_MAX];
+       char pkg_new[PATH_MAX];
+
+       printf("CREATE_DELTA\n");
+       if (data.pkg_old[0] == '\0' || data.pkg_new[0] == '\0') {
+               printf("tpk pkg missing\n");
+               return -1;
+       }
+       if (data.delta_pkg[0] == '\0') {
+               snprintf(data.resolved_path_delta_pkg, PATH_MAX, "/tmp/delta_pkg");
+               printf("output file will be /tmp/delta_pkg.delta\n");
+       }
+       const char *unzip_argv[] = {"sh",
+               "/etc/package-manager/pkgmgr-unzip-pkg.sh", "-a",
+                       data.resolved_path_pkg_old, "-b", data.resolved_path_pkg_new, "-p",
+                       data.resolved_path_delta_pkg, NULL};
+       ret = __xsystem(unzip_argv);
+       if (ret != 0) {
+               printf("unzip is fail .\n");
+               return ret;
+       }
+       printf("unzip is success .\n");
+       char *ptr_old_pkg = NULL;
+       ptr_old_pkg = strrchr(data.resolved_path_pkg_old, '/');
+
+       if (!ptr_old_pkg) {
+               printf("not able to extract package name.\n");
+               return ret;
+       }
+       ptr_old_pkg++;
+       char *ptr_new_pkg = NULL;
+       ptr_new_pkg = strrchr(data.resolved_path_pkg_new, '/');
+
+       if (!ptr_new_pkg) {
+               printf("not able to extract package name.\n");
+               return ret;
+       }
+       ptr_new_pkg++;
+
+       snprintf(pkg_old, PATH_MAX, "%s%s%s", TEMP_DELTA_REPO,
+               ptr_old_pkg, UNZIPFILE);
+       snprintf(pkg_new, PATH_MAX, "%s%s%s", TEMP_DELTA_REPO,
+               ptr_new_pkg, UNZIPFILE);
+       __create_diff_file(pkg_old, pkg_new);
+
+       const char *delta_argv[] = {"sh",
+               "/etc/package-manager/pkgmgr-create-delta.sh", "-a",
+               data.resolved_path_pkg_old, "-b", data.resolved_path_pkg_new, "-p",
+               data.resolved_path_delta_pkg, NULL};
+       ret = __xsystem(delta_argv);
+       if (ret != 0) {
+               printf("create delta script fail .\n");
+               return ret;
        }
+       printf("create delta script success .\n");
+       return ret;
+}
+
+static int __get_pkg_size_info_req_dispatcher(uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
 
-       if (pc) {
+       if (data.pkgid[0] == '\0') {
+               __invalid_arg_handler();
+               return -1;
+       }
+
+       main_loop = g_main_loop_new(NULL, FALSE);
+       pc = pkgmgr_client_new(PC_REQUEST);
+       if (pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               data.result = PKGMGR_INSTALLER_ERR_FATAL_ERROR;
+               return -1;
+       }
+
+       if (strcmp(data.pkgid, PKG_SIZE_INFO_TOTAL) == 0)
+               ret = pkgmgr_client_usr_get_total_package_size_info(pc,
+                       __total_pkg_size_info_recv_cb, NULL,
+                       target_uid);
+       else
+               ret = pkgmgr_client_usr_get_package_size_info(pc,
+                       data.pkgid, __pkg_size_info_recv_cb, NULL,
+                       target_uid);
+
+       if (ret < 0) {
+               data.result = PKGMGR_INSTALLER_ERR_FATAL_ERROR;
                pkgmgr_client_free(pc);
-               pc = NULL;
+               return ret;
        }
 
-       if (listen_pc) {
-               pkgmgr_client_free(listen_pc);
-               listen_pc = NULL;
+       printf("pkg[%s] ret: %d\n", data.pkgid, ret);
+
+       g_main_loop_run(main_loop);
+       pkgmgr_client_free(pc);
+       return data.result;
+}
+
+static dispatch_func __process_request_func_ptr[] = {
+       [INSTALL_REQ] = __install_req_dispatcher,
+       [UNINSTALL_REQ] = __uninstall_req_dispatcher,
+       [REINSTALL_REQ] = __reinstall_req_dispatcher,
+       [MOUNT_INSTALL_REQ] = __mount_install_req_dispatcher,
+       [GETSIZE_REQ] = __getsize_req_dispatcher,
+       [CLEAR_REQ] = __clear_req_dispatcher,
+       [CLEAR_ALL_REQ] = __clear_all_req_dispatcher,
+       [MOVE_REQ] = __move_req_dispatcher,
+       [ACTIVATE_REQ] = __activate_req_dispatcher,
+       [DEACTIVATE_REQ] = __deactivate_req_dispatcher,
+       [APPPATH_REQ] = __apppath_req_dispatcher,
+       [CHECKAPP_REQ] = __checkapp_req_dispatcher,
+       [KILLAPP_REQ] = __killapp_req_dispatcher,
+       [LIST_REQ] = __list_req_dispatcher,
+       [SHOW_REQ] = __show_req_dispatcher,
+       [HELP_REQ] = __help_req_dispatcher,
+       [CREATE_DELTA] = __create_delta_dispatcher,
+       [GET_PKG_SIZE_INFO_REQ] = __get_pkg_size_info_req_dispatcher,
+};
+
+static int __process_request(uid_t target_uid)
+{
+       int ret;
+
+#if !GLIB_CHECK_VERSION(2, 35, 0)
+       g_type_init();
+#endif
+       size_t req_size =
+               sizeof(__process_request_func_ptr) / sizeof(dispatch_func);
+
+       if (data.request >= req_size || data.request == 0) {
+               printf("Wrong Request\n");
+               return -1;
        }
+       ret = __process_request_func_ptr[data.request](target_uid);
 
        return ret;
 }