5 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
7 * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
8 * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
35 #include <sys/types.h>
37 #include <glib-object.h>
38 #include <pkgmgr-info.h>
39 #include "package-manager.h"
40 #include "package-manager-types.h"
42 #define PKG_TOOL_VERSION "0.1"
43 #define APP_INSTALLATION_PATH_RW "/opt/usr/apps"
45 static pkgmgr_client *gpc = NULL;
47 static int __process_request();
48 static void __print_usage();
49 static int __is_authorized();
50 static int __is_app_installed(char *pkgid);
51 static void __print_pkg_info(pkgmgr_info * pkg_info);
52 static int __return_cb(int req_id, const char *pkg_type, const char *pkgid,
53 const char *key, const char *val, const void *pmsg,
55 static int __convert_to_absolute_path(char *path);
57 /* Supported options */
58 const char *short_options = "iurmcgxCkaADL:Rlsd:p:t:n:T:S:qh";
59 const struct option long_options[] = {
60 {"install", 0, NULL, 'i'},
61 {"uninstall", 0, NULL, 'u'},
62 {"reinstall", 0, NULL, 'r'},
63 {"move", 0, NULL, 'm'},
64 {"clear", 0, NULL, 'c'},
65 {"getsize", 0, NULL, 'g'},
66 {"activate", 0, NULL, 'A'},
67 {"deactivate", 0, NULL, 'D'},
68 {"activate with Label", 1, NULL, 'L'},
69 {"reset device", 1, NULL, 'R'},
70 {"check", 0, NULL, 'C'},
71 {"kill", 0, NULL, 'k'},
72 {"app-path", 0, NULL, 'a'},
73 {"list", 0, NULL, 'l'},
74 {"show", 0, NULL, 's'},
75 {"descriptor", 1, NULL, 'd'},
76 {"package-path", 1, NULL, 'p'},
77 {"package-type", 1, NULL, 't'},
78 {"package-name", 1, NULL, 'n'},
79 {"move-type", 1, NULL, 'T'},
80 {"getsize-type", 1, NULL, 'T'},
81 {"csc", 1, NULL, 'S'},
82 {"quiet", 0, NULL, 'q'},
83 {"help", 0, NULL, 'h'},
84 {"get_pkg_size_info", 0, NULL, 'x'},
85 {0, 0, 0, 0} /* sentinel */
88 enum pm_tool_request_e {
104 GET_PKG_SIZE_INFO_REQ,
107 typedef enum pm_tool_request_e req_type;
109 struct pm_tool_args_t {
111 char pkg_path[PKG_NAME_STRING_LEN_MAX];
112 char pkg_type[PKG_TYPE_STRING_LEN_MAX];
113 char pkgid[PKG_NAME_STRING_LEN_MAX];
114 char des_path[PKG_NAME_STRING_LEN_MAX];
115 char label[PKG_NAME_STRING_LEN_MAX];
119 typedef struct pm_tool_args_t pm_tool_args;
122 static GMainLoop *main_loop = NULL;
124 static void __error_no_to_string(int errnumber, char **errstr)
129 case PKGCMD_ERR_PACKAGE_NOT_FOUND:
130 *errstr = PKGCMD_ERR_PACKAGE_NOT_FOUND_STR;
132 case PKGCMD_ERR_PACKAGE_INVALID:
133 *errstr = PKGCMD_ERR_PACKAGE_INVALID_STR;
135 case PKGCMD_ERR_PACKAGE_LOWER_VERSION:
136 *errstr = PKGCMD_ERR_PACKAGE_LOWER_VERSION_STR;
138 case PKGCMD_ERR_PACKAGE_EXECUTABLE_NOT_FOUND:
139 *errstr = PKGCMD_ERR_PACKAGE_EXECUTABLE_NOT_FOUND_STR;
141 case PKGCMD_ERR_MANIFEST_INVALID:
142 *errstr = PKGCMD_ERR_MANIFEST_INVALID_STR;
144 case PKGCMD_ERR_CONFIG_NOT_FOUND:
145 *errstr = PKGCMD_ERR_CONFIG_NOT_FOUND_STR;
147 case PKGCMD_ERR_CONFIG_INVALID:
148 *errstr = PKGCMD_ERR_CONFIG_INVALID_STR;
150 case PKGCMD_ERR_SIGNATURE_NOT_FOUND:
151 *errstr = PKGCMD_ERR_SIGNATURE_NOT_FOUND_STR;
153 case PKGCMD_ERR_SIGNATURE_INVALID:
154 *errstr = PKGCMD_ERR_SIGNATURE_INVALID_STR;
156 case PKGCMD_ERR_SIGNATURE_VERIFICATION_FAILED:
157 *errstr = PKGCMD_ERR_SIGNATURE_VERIFICATION_FAILED_STR;
159 case PKGCMD_ERR_ROOT_CERTIFICATE_NOT_FOUND:
160 *errstr = PKGCMD_ERR_ROOT_CERTIFICATE_NOT_FOUND_STR;
162 case PKGCMD_ERR_CERTIFICATE_INVALID:
163 *errstr = PKGCMD_ERR_CERTIFICATE_INVALID_STR;
165 case PKGCMD_ERR_CERTIFICATE_CHAIN_VERIFICATION_FAILED:
166 *errstr = PKGCMD_ERR_CERTIFICATE_CHAIN_VERIFICATION_FAILED_STR;
168 case PKGCMD_ERR_CERTIFICATE_EXPIRED:
169 *errstr = PKGCMD_ERR_CERTIFICATE_EXPIRED_STR;
171 case PKGCMD_ERR_INVALID_PRIVILEGE:
172 *errstr = PKGCMD_ERR_INVALID_PRIVILEGE_STR;
174 case PKGCMD_ERR_MENU_ICON_NOT_FOUND:
175 *errstr = PKGCMD_ERR_MENU_ICON_NOT_FOUND_STR;
177 case PKGCMD_ERR_FATAL_ERROR:
178 *errstr = PKGCMD_ERR_FATAL_ERROR_STR;
180 case PKGCMD_ERR_OUT_OF_STORAGE:
181 *errstr = PKGCMD_ERR_OUT_OF_STORAGE_STR;
183 case PKGCMD_ERR_OUT_OF_MEMORY:
184 *errstr = PKGCMD_ERR_OUT_OF_MEMORY_STR;
186 case PKGCMD_ERR_ARGUMENT_INVALID:
187 *errstr = PKGCMD_ERR_ARGUMENT_INVALID_STR;
190 *errstr = PKGCMD_ERR_UNKNOWN_STR;
195 static int __return_cb(int req_id, const char *pkg_type,
196 const char *pkgid, const char *key, const char *val,
197 const void *pmsg, void *priv_data)
199 if (strncmp(key, "error", strlen("error")) == 0) {
202 char *extra_str = NULL;
203 char *ret_result = NULL;
206 data.result = ret_val;
208 strtok((char*)val, delims);
209 ret_result = strtok(NULL, delims);
211 extra_str = strdup(ret_result);
212 printf("__return_cb req_id[%d] pkg_type[%s] pkgid[%s] key[%s] val[%d] error message: %s\n",
213 req_id, pkg_type, pkgid, key, ret_val, extra_str);
217 printf("__return_cb req_id[%d] pkg_type[%s] pkgid[%s] key[%s] val[%d]\n",
218 req_id, pkg_type, pkgid, key, ret_val);
220 printf("__return_cb req_id[%d] pkg_type[%s] "
221 "pkgid[%s] key[%s] val[%s]\n",
222 req_id, pkg_type, pkgid, key, val);
224 if (strncmp(key, "end", strlen("end")) == 0) {
225 if ((strncmp(val, "fail", strlen("fail")) == 0) && data.result == 0){
226 data.result = PKGCMD_ERR_FATAL_ERROR;
228 g_main_loop_quit(main_loop);
234 static int __convert_to_absolute_path(char *path)
236 char abs[PKG_NAME_STRING_LEN_MAX] = {'\0'};
237 char temp[PKG_NAME_STRING_LEN_MAX] = {'\0'};
240 printf("path is NULL\n");
243 strncpy(temp, path, PKG_NAME_STRING_LEN_MAX - 1);
244 if (strchr(path, '/') == NULL) {
245 getcwd(abs, PKG_NAME_STRING_LEN_MAX - 1);
246 if (abs[0] == '\0') {
247 printf("getcwd() failed\n");
250 memset(data.pkg_path, '\0', PKG_NAME_STRING_LEN_MAX);
251 snprintf(data.pkg_path, PKG_NAME_STRING_LEN_MAX - 1, "%s/%s", abs, temp);
254 if (strncmp(path, "./", 2) == 0) {
256 getcwd(abs, PKG_NAME_STRING_LEN_MAX - 1);
257 if (abs[0] == '\0') {
258 printf("getcwd() failed\n");
262 memset(data.pkg_path, '\0', PKG_NAME_STRING_LEN_MAX);
263 snprintf(data.pkg_path, PKG_NAME_STRING_LEN_MAX - 1, "%s/%s", abs, ptr);
269 static int __is_app_installed(char *pkgid)
274 static void __print_usage()
276 printf("\nPackage Manager Tool Version: %s\n\n", PKG_TOOL_VERSION);
277 printf("-i, --install install the package\n");
278 printf("-u, --uninstall uninstall the package\n");
279 printf("-r, --reinstall reinstall the package\n");
280 printf("-c, --clear clear user data\n");
281 printf("-m, --move move package\n");
282 printf("-g, --getsize get size of given package\n");
283 printf("-T, --getsize-type get type [0 : total size /1: data size]\n");
284 printf("-l, --list display list of installed packages\n");
285 printf("-s, --show show detail package info\n");
286 printf("-a, --app-path show app installation path\n");
287 printf("-C, --check check if applications belonging to a package are running or not\n");
288 printf("-k, --kill terminate applications belonging to a package\n");
289 printf("-d, --descriptor provide descriptor path\n");
290 printf("-p, --package-path provide package path\n");
291 printf("-n, --package-name provide package name\n");
292 printf("-t, --package-type provide package type\n");
293 printf("-T, --move-type provide move type [0 : move to internal /1: move to external]\n");
294 printf("-h, --help print this help\n\n");
296 printf("Usage: pkgcmd [options] \n");
297 printf("pkgcmd -i -t <pkg type> (-d <descriptor path>) -p <pkg path> \n");
298 printf("pkgcmd -u -n <pkgid> \n");
299 printf("pkgcmd -r -t <pkg type> -n <pkgid> \n");
300 printf("pkgcmd -l (-t <pkg type>) \n");
301 printf("pkgcmd -s -t <pkg type> -p <pkg path> \n");
302 printf("pkgcmd -s -t <pkg type> -n <pkg name> \n");
303 printf("pkgcmd -m -T <move type> -n <pkg name>\n\n");
304 printf("pkgcmd -g -T <getsize type> -n <pkgid> \n");
305 printf("pkgcmd -C -n <pkgid> \n");
306 printf("pkgcmd -k -n <pkgid> \n");
308 printf("Example:\n");
309 printf("pkgcmd -u -n com.samsung.calculator\n");
310 printf("pkgcmd -i -t rpm -p /mnt/nfs/com.samsung.calculator_0.1.2-95_armel.rpm\n");
311 printf("pkgcmd -r -t rpm -n com.samsung.calculator\n");
312 printf("pkgcmd -c -t rpm -n com.samsung.hello\n");
313 printf("pkgcmd -m -T 1 -n com.samsung.hello\n");
314 printf("pkgcmd -C -n com.samsung.hello\n");
315 printf("pkgcmd -k -n com.samsung.hello\n");
316 printf("pkgcmd -a\n");
317 printf("pkgcmd -a -t rpm -n com.samsung.hello\n");
318 printf("pkgcmd -l\n");
319 printf("pkgcmd -l -t tpk\n");
320 printf("pkgcmd -g -T 0 -n com.samsung.calculator\n");
326 static void __print_pkg_info(pkgmgr_info *pkg_info)
330 temp = pkgmgr_info_get_string(pkg_info, "pkg_type");
332 printf("pkg_type : %s\n", temp);
336 temp = pkgmgr_info_get_string(pkg_info, "pkgid");
338 printf("pkgid : %s\n", temp);
342 temp = pkgmgr_info_get_string(pkg_info, "version");
344 printf("version : %s\n", temp);
348 temp = pkgmgr_info_get_string(pkg_info, "api_version");
350 printf("api_version : %s\n", temp);
354 temp = pkgmgr_info_get_string(pkg_info, "pkg_vendor");
356 printf("pkg_vendor : %s\n", temp);
360 temp = pkgmgr_info_get_string(pkg_info, "pkg_description");
362 printf("pkg_description : %s\n", temp);
366 temp = pkgmgr_info_get_string(pkg_info, "pkg_mimetype");
368 printf("pkg_mimetype : %s\n", temp);
372 temp = pkgmgr_info_get_string(pkg_info, "pkg_installed_path_package");
374 printf("pkg_installed_path_package : %s\n", temp);
379 pkgmgr_info_get_string(pkg_info, "pkg_installed_path_descriptor");
381 printf("pkg_installed_path_descriptor : %s\n", temp);
385 temp = pkgmgr_info_get_string(pkg_info, "category");
387 printf("category : %s\n", temp);
391 temp = pkgmgr_info_get_string(pkg_info, "min_platform_version");
393 printf("min_platform_version : %s\n", temp);
397 temp = pkgmgr_info_get_string(pkg_info, "visible");
399 printf("visible : %s\n", temp);
403 temp = pkgmgr_info_get_string(pkg_info, "removable");
405 printf("removable : %s\n", temp);
409 temp = pkgmgr_info_get_string(pkg_info, "installed_size");
411 printf("installed_size : %s\n", temp);
415 temp = pkgmgr_info_get_string(pkg_info, "installed_time");
417 printf("installed_time : %s\n", temp);
421 temp = pkgmgr_info_get_string(pkg_info, "data_size");
423 printf("data_size : %s\n", temp);
427 temp = pkgmgr_info_get_string(pkg_info, "optional_id");
429 printf("optional_id : %s\n", temp);
434 static int __pkgmgr_list_cb (const pkgmgrinfo_pkginfo_h handle, void *user_data)
438 char *pkg_type = NULL;
439 char *pkg_version = NULL;
440 char *pkg_label = NULL;
441 char *pkg_rootpath = NULL;
443 ret = pkgmgrinfo_pkginfo_get_pkgid(handle, &pkgid);
445 printf("Failed to get pkgmgr_pkginfo_get_pkgid\n");
448 ret = pkgmgrinfo_pkginfo_get_type(handle, &pkg_type);
450 printf("Failed to get pkgmgr_pkginfo_get_type\n");
453 ret = pkgmgrinfo_pkginfo_get_version(handle, &pkg_version);
455 printf("Failed to get pkgmgr_pkginfo_get_version\n");
458 ret = pkgmgrinfo_pkginfo_get_label(handle, &pkg_label);
460 printf("Failed to get pkgmgr_pkginfo_get_label\n");
463 if (pkg_type && strcmp(pkg_type, "wgt") == 0)
465 char buf[1024] = {0};
466 ret = pkgmgrinfo_pkginfo_get_root_path(handle, &pkg_rootpath);
468 printf("pkgmgrinfo_pkginfo_get_root_path\n");
472 snprintf(buf, 1023, "%s/author-signature.xml", pkg_rootpath);
474 if (access(buf, F_OK) == 0)
476 printf("pkg_type [%s]\tpkgid [%s]\tname [%s]\tversion [%s]\tpkg_subtype [%s]\n", pkg_type, pkgid, pkg_label, pkg_version, "hybrid");
481 printf("pkg_type [%s]\tpkgid [%s]\tname [%s]\tversion [%s]\n", pkg_type, pkgid, pkg_label, pkg_version);
486 static int __pkg_list_cb (const pkgmgrinfo_pkginfo_h handle, void *user_data)
491 ret = pkgmgrinfo_pkginfo_get_pkgid(handle, &pkgid);
493 printf("pkgmgr_pkginfo_get_pkgid() failed\n");
496 ret = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, PM_GET_TOTAL_SIZE, (pkgmgr_client *)user_data, NULL, pkgid, NULL, NULL, NULL);
498 printf("pkgmgr_client_request_service Failed\n");
502 printf("pkg[%s] size = %d\n", pkgid, ret);
507 static void __pkg_size_info_recv_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *size_info, void *user_data)
509 printf("User get_package_size_info callback called.\n");
510 printf("Internal > data size: %lld, cache size: %lld, app size: %lld\n",
511 size_info->data_size, size_info->cache_size, size_info->app_size);
512 printf("External > data size: %lld, cache size: %lld, app size: %lld\n",
513 size_info->ext_data_size, size_info->ext_cache_size, size_info->ext_app_size);
515 pkgmgr_client_free(pc);
516 g_main_loop_quit(main_loop);
519 static void __total_pkg_size_info_recv_cb(pkgmgr_client *pc, const pkg_size_info_t *size_info, void *user_data)
521 printf("User get_total_package_size_info callback called.\n");
522 printf("Internal > data size: %lld, cache size: %lld, app size: %lld\n",
523 size_info->data_size, size_info->cache_size, size_info->app_size);
524 printf("External > data size: %lld, cache size: %lld, app size: %lld\n",
525 size_info->ext_data_size, size_info->ext_cache_size, size_info->ext_app_size);
527 pkgmgr_client_free(pc);
528 g_main_loop_quit(main_loop);
531 static int __process_request()
535 pkgmgr_client *pc = NULL;
536 char buf[1024] = {'\0'};
538 switch (data.request) {
540 if (data.pkg_path[0] == '\0') {
541 printf("Please provide the arguments.\n");
542 printf("use -h option to see usage\n");
543 data.result = PKGCMD_ERR_ARGUMENT_INVALID;
547 main_loop = g_main_loop_new(NULL, FALSE);
548 pc = pkgmgr_client_new(PC_REQUEST);
550 printf("PkgMgr Client Creation Failed\n");
551 data.result = PKGCMD_ERR_FATAL_ERROR;
555 if (data.pkg_type[0] == '\0') {
556 strncpy(data.pkg_type, "rpm", PKG_TYPE_STRING_LEN_MAX);
559 if (data.des_path[0] == '\0')
561 pkgmgr_client_install(pc, data.pkg_type, NULL,
562 data.pkg_path, NULL, mode,
566 pkgmgr_client_install(pc, data.pkg_type,
567 data.des_path, data.pkg_path,
568 NULL, mode, __return_cb, pc);
570 data.result = PKGCMD_ERR_FATAL_ERROR;
571 if (access(data.pkg_path, F_OK) != 0)
572 data.result = PKGCMD_ERR_PACKAGE_NOT_FOUND;
575 g_main_loop_run(main_loop);
580 if (data.pkgid[0] == '\0') {
581 printf("Please provide the arguments.\n");
582 printf("use -h option to see usage\n");
583 data.result = PKGCMD_ERR_ARGUMENT_INVALID;
587 main_loop = g_main_loop_new(NULL, FALSE);
588 pc = pkgmgr_client_new(PC_REQUEST);
590 printf("PkgMgr Client Creation Failed\n");
591 data.result = PKGCMD_ERR_FATAL_ERROR;
596 ret = __is_app_installed(data.pkgid);
598 printf("package is not installed\n");
603 pkgmgr_client_uninstall(pc, data.pkg_type, data.pkgid,
604 mode, __return_cb, NULL);
606 data.result = PKGCMD_ERR_FATAL_ERROR;
607 if (access(data.pkg_path, F_OK) != 0)
608 data.result = PKGCMD_ERR_PACKAGE_NOT_FOUND;
611 g_main_loop_run(main_loop);
616 if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
617 printf("Please provide the arguments.\n");
618 printf("use -h option to see usage\n");
619 data.result = PKGCMD_ERR_ARGUMENT_INVALID;
623 main_loop = g_main_loop_new(NULL, FALSE);
624 pc = pkgmgr_client_new(PC_REQUEST);
626 printf("PkgMgr Client Creation Failed\n");
627 data.result = PKGCMD_ERR_FATAL_ERROR;
632 ret = pkgmgr_client_reinstall(pc, data.pkg_type, data.pkgid, NULL, mode, __return_cb, pc);
634 data.result = PKGCMD_ERR_FATAL_ERROR;
635 if (access(data.pkg_path, F_OK) != 0)
636 data.result = PKGCMD_ERR_PACKAGE_NOT_FOUND;
639 g_main_loop_run(main_loop);
644 if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
645 printf("Please provide the arguments.\n");
646 printf("use -h option to see usage\n");
651 pc = pkgmgr_client_new(PC_REQUEST);
653 printf("PkgMgr Client Creation Failed\n");
658 ret = __is_app_installed(data.pkgid);
660 printf("package is not installed\n");
663 ret = pkgmgr_client_clear_user_data(pc, data.pkg_type,
671 if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
672 printf("Please provide the arguments.\n");
673 printf("use -h option to see usage\n");
678 pc = pkgmgr_client_new(PC_REQUEST);
680 printf("PkgMgr Client Creation Failed\n");
685 if ( strcmp(data.pkg_type, "app") == 0 ) {
686 if (strlen(data.label) == 0) {
687 ret = pkgmgr_client_activate_app(pc, data.pkgid);
691 printf("label [%s]\n", data.label);
692 char *largv[3] = {NULL, };
694 largv[1] = data.label;
695 ret = pkgmgr_client_activate_appv(pc, data.pkgid, largv);
700 ret = pkgmgr_client_activate(pc, data.pkg_type, data.pkgid);
710 if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
711 printf("Please provide the arguments.\n");
712 printf("use -h option to see usage\n");
717 pc = pkgmgr_client_new(PC_REQUEST);
719 printf("PkgMgr Client Creation Failed\n");
724 if ( strcmp(data.pkg_type, "app") == 0 ) {
725 ret = pkgmgr_client_deactivate_app(pc, data.pkgid);
729 ret = pkgmgr_client_deactivate(pc, data.pkg_type, data.pkgid);
738 if (data.pkgid[0] == '\0') {
739 printf("Please provide the arguments.\n");
740 printf("use -h option to see usage\n");
746 main_loop = g_main_loop_new(NULL, FALSE);
748 pc = pkgmgr_client_new(PC_REQUEST);
750 printf("PkgMgr Client Creation Failed\n");
755 ret = __is_app_installed(data.pkgid);
757 printf("package is not installed\n");
761 ret = pkgmgr_client_move(pc, data.pkgid, data.type, __return_cb, NULL);
763 printf("pkg[%s] move result = %d\n", data.pkgid, ret);
768 g_main_loop_run(main_loop);
774 if (data.pkg_type[0] == '\0' && data.pkgid[0] == '\0') {
775 printf("Tizen Application Installation Path: %s\n", APP_INSTALLATION_PATH_RW);
779 if ((data.pkg_type[0] == '\0') || (data.pkgid[0] == '\0')) {
780 printf("Use -h option to see usage\n");
784 if (strncmp(data.pkg_type, "rpm", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
785 snprintf(buf, 1023, "%s/%s", APP_INSTALLATION_PATH_RW, data.pkgid);
786 printf("Tizen Application Installation Path: %s\n", buf);
789 } else if (strncmp(data.pkg_type, "wgt", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
790 snprintf(buf, 1023, "%s/%s/res/wgt", APP_INSTALLATION_PATH_RW, data.pkgid);
791 printf("Tizen Application Installation Path: %s\n", buf);
794 } else if (strncmp(data.pkg_type, "tpk", PKG_TYPE_STRING_LEN_MAX - 1) == 0) {
795 snprintf(buf, 1023, "%s/%s", APP_INSTALLATION_PATH_RW, data.pkgid);
796 printf("Tizen Application Installation Path: %s\n", buf);
800 printf("Invalid package type.\n");
801 printf("use -h option to see usage\n");
809 if (data.pkgid[0] == '\0') {
810 printf("Please provide the arguments.\n");
811 printf("use -h option to see usage\n");
812 data.result = PKGCMD_ERR_ARGUMENT_INVALID;
816 pc = pkgmgr_client_new(PC_REQUEST);
818 printf("PkgMgr Client Creation Failed\n");
819 data.result = PKGCMD_ERR_FATAL_ERROR;
823 if (data.request == KILLAPP_REQ) {
824 ret = pkgmgr_client_request_service(PM_REQUEST_KILL_APP, 0, pc, NULL, data.pkgid, NULL, NULL, &pid);
826 data.result = PKGCMD_ERR_FATAL_ERROR;
830 printf("Pkgid: %s is Terminated\n", data.pkgid);
832 printf("Pkgid: %s is already Terminated\n", data.pkgid);
834 } else if (data.request == CHECKAPP_REQ) {
835 ret = pkgmgr_client_request_service(PM_REQUEST_CHECK_APP, 0, pc, NULL, data.pkgid, NULL, NULL, &pid);
837 data.result = PKGCMD_ERR_FATAL_ERROR;
842 printf("Pkgid: %s is Running\n", data.pkgid);
844 printf("Pkgid: %s is Not Running\n", data.pkgid);
850 if (data.pkg_type[0] == '\0') {
851 ret = pkgmgrinfo_pkginfo_get_list(__pkgmgr_list_cb, NULL);
853 printf("Failed to get package list\n");
858 pkgmgrinfo_pkginfo_filter_h handle;
859 ret = pkgmgrinfo_pkginfo_filter_create(&handle);
861 printf("Failed to get package filter handle\n");
864 ret = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_TYPE, data.pkg_type);
866 printf("Failed to add package type filter\n");
867 pkgmgrinfo_pkginfo_filter_destroy(handle);
870 ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, __pkgmgr_list_cb, NULL);
872 printf("Failed to get package filter list\n");
873 pkgmgrinfo_pkginfo_filter_destroy(handle);
876 pkgmgrinfo_pkginfo_filter_destroy(handle);
881 if (data.pkgid[0] != '\0') {
882 pkgmgr_info *pkg_info =
883 pkgmgr_info_new(data.pkg_type, data.pkgid);
884 if (pkg_info == NULL) {
885 printf("Failed to get pkginfo handle\n");
889 __print_pkg_info(pkg_info);
890 ret = pkgmgr_info_free(pkg_info);
893 if (data.pkg_path[0] != '\0') {
894 pkgmgr_info *pkg_info = pkgmgr_client_check_pkginfo_from_file(data.pkg_path);
895 if (pkg_info == NULL) {
896 printf("Failed to get pkginfo handle\n");
900 __print_pkg_info(pkg_info);
901 ret = pkgmgr_info_free(pkg_info);
904 printf("Either pkgid or pkgpath should be supplied\n");
909 ret = pkgmgr_client_request_service(PM_REQUEST_CSC, 0, NULL, NULL, NULL, data.des_path, NULL, (void *)data.pkg_path);
911 data.result = PKGCMD_ERR_FATAL_ERROR;
915 if (data.pkgid[0] == '\0') {
916 printf("Please provide the arguments.\n");
917 printf("use -h option to see usage\n");
922 pc = pkgmgr_client_new(PC_REQUEST);
924 printf("PkgMgr Client Creation Failed\n");
925 data.result = PKGCMD_ERR_FATAL_ERROR;
929 if (data.type == 9) {
930 ret = pkgmgrinfo_pkginfo_get_list(__pkg_list_cb, (void *)pc);
934 ret = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, data.type, pc, NULL, data.pkgid, NULL, NULL, NULL);
936 data.result = PKGCMD_ERR_FATAL_ERROR;
940 printf("pkg[%s] size = %d\n", data.pkgid, ret);
944 case GET_PKG_SIZE_INFO_REQ:
945 main_loop = g_main_loop_new(NULL, FALSE);
946 gpc = pkgmgr_client_new(PC_REQUEST);
948 printf("PkgMgr Client Creation Failed\n");
949 data.result = PKGCMD_ERR_FATAL_ERROR;
953 if (strcmp(data.pkgid, PKG_SIZE_INFO_TOTAL) == 0)
955 ret = pkgmgr_client_get_total_package_size_info(gpc, __total_pkg_size_info_recv_cb, NULL);
960 ret = pkgmgr_client_get_package_size_info(gpc, data.pkgid, __pkg_size_info_recv_cb, NULL);
963 data.result = PKGCMD_ERR_FATAL_ERROR;
967 printf("pkg[%s] ret: %d\n", data.pkgid, ret);
970 g_main_loop_run(main_loop);
973 case RESET_DEVICE_REQ:
974 ret = pkgmgr_client_reset_device();
983 printf("Wrong Request\n");
989 pkgmgr_client_free(pc);
995 static int __is_authorized()
997 /* pkgcmd needs root or developer privileges.
998 If launched via fork/exec, the launching program
999 must be running as root */
1001 uid_t uid = getuid();
1002 if ((uid_t) 0 == uid || (uid_t) 5100 == uid)
1008 int main(int argc, char *argv[])
1014 char *errstr = NULL;
1019 if (!__is_authorized()) {
1020 printf("You are not an authorized user!\n");
1021 return PKGCMD_ERR_FATAL_ERROR;
1027 gettimeofday(&tv, NULL);
1028 starttime = tv.tv_sec * 1000l + tv.tv_usec / 1000l;
1031 memset(data.des_path, '\0', PKG_NAME_STRING_LEN_MAX);
1032 memset(data.pkg_path, '\0', PKG_NAME_STRING_LEN_MAX);
1033 memset(data.pkgid, '\0', PKG_NAME_STRING_LEN_MAX);
1034 memset(data.pkg_type, '\0', PKG_TYPE_STRING_LEN_MAX);
1035 memset(data.label, '\0', PKG_TYPE_STRING_LEN_MAX);
1039 c = getopt_long(argc, argv, short_options, long_options,
1042 break; /* Parse end */
1044 case 'i': /* install */
1045 data.request = INSTALL_REQ;
1048 case 'u': /* uninstall */
1049 data.request = UNINSTALL_REQ;
1052 case 'r': /* reinstall */
1053 data.request = REINSTALL_REQ;
1056 case 'c': /* clear */
1057 data.request = CLEAR_REQ;
1060 case 'g': /* get pkg size */
1061 data.request = GETSIZE_REQ;
1064 case 'x': /* get pkg size info */
1065 data.request = GET_PKG_SIZE_INFO_REQ;
1068 case 'm': /* move */
1069 data.request = MOVE_REQ;
1072 case 'S': /* csc packages */
1073 data.request = CSC_REQ;
1075 strncpy(data.des_path, optarg, PKG_NAME_STRING_LEN_MAX);
1076 printf("csc file is %s\n", data.des_path);
1079 case 'A': /* activate */
1080 data.request = ACTIVATE_REQ;
1083 case 'D': /* deactivate */
1084 data.request = DEACTIVATE_REQ;
1087 case 'L': /* activate with Label */
1088 data.request = ACTIVATE_REQ;
1090 strncpy(data.label, optarg,
1091 PKG_NAME_STRING_LEN_MAX);
1094 case 'R': /* device reset */
1095 data.request = RESET_DEVICE_REQ;
1098 case 'a': /* app installation path */
1099 data.request = APPPATH_REQ;
1102 case 'k': /* Terminate applications of a package */
1103 data.request = KILLAPP_REQ;
1106 case 'C': /* Check running status of applications of a package */
1107 data.request = CHECKAPP_REQ;
1110 case 'l': /* list */
1111 data.request = LIST_REQ;
1114 case 's': /* show */
1115 data.request = SHOW_REQ;
1118 case 'p': /* package path */
1120 strncpy(data.pkg_path, optarg,
1121 PKG_NAME_STRING_LEN_MAX);
1122 ret = __convert_to_absolute_path(data.pkg_path);
1124 printf("conversion of relative path to absolute path failed\n");
1127 printf("path is %s\n", data.pkg_path);
1130 case 'd': /* descriptor path */
1132 strncpy(data.des_path, optarg,
1133 PKG_NAME_STRING_LEN_MAX);
1136 case 'n': /* package name */
1138 strncpy(data.pkgid, optarg,
1139 PKG_NAME_STRING_LEN_MAX);
1142 case 't': /* package type */
1144 strncpy(data.pkg_type, optarg,
1145 PKG_TYPE_STRING_LEN_MAX);
1148 case 'T': /* move type */
1149 data.type = atoi(optarg);
1152 case 'h': /* help */
1153 data.request = HELP_REQ;
1157 case '?': /* Not an option */
1169 ret = __process_request();
1170 if ((ret == -1) && (data.result != 0))
1171 data.result = PKGCMD_ERR_ARGUMENT_INVALID;
1174 __error_no_to_string(data.result, &errstr);
1175 printf("processing result : %s [%d] failed\n", errstr, data.result);
1177 if (data.request == INSTALL_REQ)
1182 gettimeofday(&tv, NULL);
1183 endtime = tv.tv_sec * 1000l + tv.tv_usec / 1000l;
1184 printf("spend time for pkgcmd is [%d]ms\n", (int)(endtime - starttime));