};
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];
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;
}