2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <package-manager.h>
23 #include <pkgmgr-info.h>
24 #include <tzplatform_config.h>
26 #include "package_manager.h"
27 #include "package_manager_internal.h"
29 static GHashTable *__cb_table = NULL;
31 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
32 typedef struct _event_info {
34 package_manager_event_type_e event_type;
35 package_manager_event_state_e event_state;
36 struct _event_info *next;
39 struct package_manager_s {
45 package_manager_event_cb event_cb;
46 package_manager_global_event_cb global_event_cb;
50 struct package_manager_request_s {
59 package_manager_request_event_cb event_cb;
63 struct package_manager_filter_s {
64 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
67 static int package_manager_request_new_id()
69 static int request_handle_id = 0;
70 return request_handle_id++;
73 static int package_manager_new_id()
75 static int manager_handle_id = 0;
76 return manager_handle_id++;
79 API int package_manager_request_create(package_manager_request_h *request)
81 struct package_manager_request_s *package_manager_request;
83 if (request == NULL) {
86 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
90 package_manager_request =
91 calloc(1, sizeof(struct package_manager_request_s));
92 if (package_manager_request == NULL) {
94 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
96 "failed to create a package_manager handle");
99 package_manager_request->ctype = PC_REQUEST;
100 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
101 if (package_manager_request->pc == NULL) {
102 free(package_manager_request);
104 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
106 "failed to create a package_manager client");
109 package_manager_request->handle_id = package_manager_request_new_id();
111 *request = package_manager_request;
113 return PACKAGE_MANAGER_ERROR_NONE;
116 static int package_manager_client_validate_handle(package_manager_request_h
119 if (request == NULL || request->pc == NULL) {
120 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
123 return PACKAGE_MANAGER_ERROR_NONE;
126 API int package_manager_request_destroy(package_manager_request_h request)
128 if (package_manager_client_validate_handle(request)) {
130 package_manager_error
131 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
135 pkgmgr_client_free(request->pc);
139 return PACKAGE_MANAGER_ERROR_NONE;
142 API int package_manager_request_set_event_cb(package_manager_request_h request,
143 package_manager_request_event_cb
144 callback, void *user_data)
148 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
149 if (retval != PACKAGE_MANAGER_ERROR_NONE)
152 if (package_manager_client_validate_handle(request)) {
154 package_manager_error
155 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
159 request->event_cb = callback;
160 request->user_data = user_data;
162 return PACKAGE_MANAGER_ERROR_NONE;
165 API int package_manager_request_unset_event_cb(package_manager_request_h request)
167 // TODO: Please implement this function.
168 if (package_manager_client_validate_handle(request)) {
169 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
172 return PACKAGE_MANAGER_ERROR_NONE;
176 API int package_manager_request_set_type(package_manager_request_h request,
177 const char *pkg_type)
179 if (package_manager_client_validate_handle(request)) {
181 package_manager_error
182 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
186 request->pkg_type = pkg_type;
188 return PACKAGE_MANAGER_ERROR_NONE;
191 API int package_manager_request_set_mode(package_manager_request_h request,
192 package_manager_request_mode_e mode)
194 if (package_manager_client_validate_handle(request)) {
196 package_manager_error
197 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
201 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
202 request->mode = PM_QUIET;
204 request->mode = PM_DEFAULT;
206 return PACKAGE_MANAGER_ERROR_NONE;
209 static int package_manager_get_event_type(const char *key,
210 package_manager_event_type_e *
214 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
216 if (strcasecmp(key, "install") == 0)
217 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
218 else if (strcasecmp(key, "uninstall") == 0)
219 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
220 else if (strcasecmp(key, "update") == 0)
221 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
223 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
225 return PACKAGE_MANAGER_ERROR_NONE;
228 static int __add_event_info(event_info ** head, int req_id,
229 package_manager_event_type_e event_type,
230 package_manager_event_state_e event_state)
232 event_info *evt_info;
236 evt_info = (event_info *) calloc(1, sizeof(event_info));
237 if (evt_info == NULL) {
238 _LOGD("calloc failed");
241 evt_info->req_id = req_id;
242 evt_info->event_type = event_type;
243 evt_info->next = NULL;
248 current = prev = *head;
251 current = current->next;
254 prev->next = evt_info;
260 static int __find_event_info(event_info ** head, int req_id,
261 package_manager_event_type_e * event_type,
262 package_manager_event_state_e * event_state)
269 _LOGE("tmp is NULL");
273 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
276 if (tmp->req_id == req_id) {
277 *event_type = tmp->event_type;
285 static int __update_event_info(event_info ** head, int req_id,
286 package_manager_event_type_e event_type,
287 package_manager_event_state_e event_state)
289 package_manager_event_type_e evt_type;
290 package_manager_event_state_e evt_state;
293 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
294 __add_event_info(head, req_id, event_type, event_state);
299 _LOGE("tmp is NULL");
304 if (tmp->req_id == req_id) {
305 tmp->event_type = event_type;
316 static int __remove_event_info(event_info **head request, int req_id)
327 if (current->next->req_id == req_id) {
329 current->next = current->next->next;
341 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
342 const char *pkg_name, const char *key,
343 const char *val, const void *pmsg, void *data)
346 package_manager_event_type_e event_type = -1;
347 package_manager_event_state_e event_state = -1;
349 _LOGD("request_event_handler is called");
351 package_manager_request_h request = data;
353 if (strcasecmp(key, "start") == 0) {
354 ret = package_manager_get_event_type(val, &event_type);
355 if (ret != PACKAGE_MANAGER_ERROR_NONE)
356 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
358 __add_event_info(&(request->head), req_id, event_type,
359 PACKAGE_MANAGER_EVENT_STATE_STARTED);
361 if (request->event_cb)
362 request->event_cb(req_id, pkg_type, pkg_name,
364 PACKAGE_MANAGER_EVENT_STATE_STARTED,
365 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
367 } else if (strcasecmp(key, "install_percent") == 0
368 || strcasecmp(key, "progress_percent") == 0) {
369 if (__find_event_info
370 (&(request->head), req_id, &event_type,
371 &event_state) == 0) {
372 __update_event_info(&(request->head), req_id,
374 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
375 if (request->event_cb)
376 request->event_cb(req_id, pkg_type, pkg_name,
378 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
380 PACKAGE_MANAGER_ERROR_NONE,
384 } else if (strcasecmp(key, "error") == 0) {
385 if (strcasecmp(key, "0") != 0) {
386 if (__find_event_info
387 (&(request->head), req_id, &event_type,
388 &event_state) == 0) {
389 __update_event_info(&(request->head), req_id,
391 PACKAGE_MANAGER_EVENT_STATE_FAILED);
394 if (request->event_cb)
395 request->event_cb(req_id, pkg_type,
396 pkg_name, event_type,
397 PACKAGE_MANAGER_EVENT_STATE_FAILED,
399 PACKAGE_MANAGER_ERROR_NONE,
403 } else if (strcasecmp(key, "end") == 0) {
404 if (__find_event_info
405 (&(request->head), req_id, &event_type,
406 &event_state) == 0) {
407 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
408 if (request->event_cb)
409 request->event_cb(req_id, pkg_type,
410 pkg_name, event_type,
411 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
413 PACKAGE_MANAGER_ERROR_NONE,
417 if (strcasecmp(key, "ok") != 0)
418 if (request->event_cb)
419 request->event_cb(req_id, pkg_type,
420 pkg_name, event_type,
421 PACKAGE_MANAGER_EVENT_STATE_FAILED,
423 PACKAGE_MANAGER_ERROR_NONE,
428 return PACKAGE_MANAGER_ERROR_NONE;
431 API int package_manager_request_install(package_manager_request_h request,
432 const char *path, int *id)
436 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
437 if (retval != PACKAGE_MANAGER_ERROR_NONE)
440 if (package_manager_client_validate_handle(request)) {
441 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
444 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
448 request->pkg_path = path;
449 uid_t uid = getuid();
450 if (uid != GLOBAL_USER)
451 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
452 request->pkg_path, NULL,
453 request->mode, request_event_handler,
457 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
458 request->pkg_path, NULL,
459 request->mode, request_event_handler,
462 if (request_id == PKGMGR_R_EINVAL) {
463 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
464 } else if (request_id == PKGMGR_R_ENOPKG) {
465 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
466 } else if (request_id == PKGMGR_R_ENOMEM) {
467 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
468 } else if (request_id == PKGMGR_R_EIO) {
469 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
470 } else if (request_id == PKGMGR_R_EPRIV) {
471 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
472 } else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR) {
473 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
478 return PACKAGE_MANAGER_ERROR_NONE;
481 API int package_manager_request_uninstall(package_manager_request_h request,
482 const char *name, int *id)
486 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
487 if (retval != PACKAGE_MANAGER_ERROR_NONE)
490 if (package_manager_client_validate_handle(request)) {
491 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
494 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
498 request->pkg_name = name;
499 uid_t uid = getuid();
500 if (uid != GLOBAL_USER)
501 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
502 request->pkg_name, request->mode,
503 request_event_handler, request, uid);
505 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
506 request->pkg_name, request->mode,
507 request_event_handler, request);
509 if (request_id == PKGMGR_R_EINVAL) {
510 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
511 } else if (request_id == PKGMGR_R_ENOPKG) {
512 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
513 } else if (request_id == PKGMGR_R_ENOMEM) {
514 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
515 } else if (request_id == PKGMGR_R_EIO) {
516 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
517 } else if (request_id == PKGMGR_R_EPRIV) {
518 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
519 } else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR) {
520 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
525 return PACKAGE_MANAGER_ERROR_NONE;
528 API int package_manager_request_move(package_manager_request_h request,
529 const char *name, package_manager_move_type_e move_type)
533 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
534 if (retval != PACKAGE_MANAGER_ERROR_NONE)
537 if (package_manager_client_validate_handle(request)) {
538 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
541 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
545 request->pkg_name = name;
546 uid_t uid = getuid();
547 if (uid != GLOBAL_USER)
548 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
549 move_type, request->mode, uid);
551 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
552 move_type, request->mode);
553 if (ret == PKGMGR_R_EINVAL) {
554 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
555 } else if (ret == PKGMGR_R_ENOPKG) {
556 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
557 } else if (ret == PKGMGR_R_ENOMEM) {
558 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
559 } else if (ret == PKGMGR_R_EIO) {
560 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
561 } else if (ret == PKGMGR_R_EPRIV) {
562 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
563 } else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR) {
564 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
568 return PACKAGE_MANAGER_ERROR_NONE;
571 API int package_manager_create(package_manager_h * manager)
575 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
576 if (retval != PACKAGE_MANAGER_ERROR_NONE)
579 struct package_manager_s *package_manager = NULL;
581 if (manager == NULL) {
583 package_manager_error
584 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
588 package_manager = calloc(1, sizeof(struct package_manager_s));
589 if (package_manager == NULL) {
591 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
593 "failed to create a package_manager handle");
596 package_manager->ctype = PC_LISTENING;
597 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
598 if (package_manager->pc == NULL) {
599 free(package_manager);
601 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
603 "failed to create a package_manager client");
606 package_manager->handle_id = package_manager_new_id();
608 *manager = package_manager;
610 return PACKAGE_MANAGER_ERROR_NONE;
613 static int package_manager_validate_handle(package_manager_h manager)
615 if (manager == NULL || manager->pc == NULL) {
616 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
619 return PACKAGE_MANAGER_ERROR_NONE;
622 API int package_manager_destroy(package_manager_h manager)
624 if (package_manager_validate_handle(manager)) {
626 package_manager_error
627 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
631 pkgmgr_client_free(manager->pc);
635 return PACKAGE_MANAGER_ERROR_NONE;
638 static int __add_event(event_info ** head, int req_id,
639 package_manager_event_type_e event_type,
640 package_manager_event_state_e event_state)
642 event_info *evt_info;
644 evt_info = (event_info *) calloc(1, sizeof(event_info));
645 if (evt_info == NULL) {
646 _LOGD("calloc failed");
649 evt_info->req_id = req_id;
650 evt_info->event_type = event_type;
651 evt_info->next = NULL;
658 static int __find_event(event_info ** head, int req_id,
659 package_manager_event_type_e * event_type,
660 package_manager_event_state_e * event_state)
667 _LOGE("tmp is NULL");
671 *event_type = tmp->event_type;
675 static int __update_event(event_info ** head, int req_id,
676 package_manager_event_type_e event_type,
677 package_manager_event_state_e event_state)
679 package_manager_event_type_e evt_type;
680 package_manager_event_state_e evt_state;
683 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
684 __add_event_info(head, req_id, event_type, event_state);
689 _LOGE("tmp is NULL");
693 tmp->event_type = event_type;
700 /* App Event Listening Policy:
701 * +----------------+------------+---------------+------------------+
702 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
703 * +----------------+------------+---------------+------------------+
704 * |User Process App| Grant | Grant | Deny |
705 * +----------------+------------+---------------+------------------+
706 * |Platform module | Grant | Grant | Grant |
707 * +----------------+------------+---------------+------------------+
708 * UID assignment policy:
709 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
711 #define REGULAR_USER 5000
712 static int __validate_event_signal(uid_t target_uid)
714 uid_t self = getuid();
716 if (self == target_uid)
719 if (self < REGULAR_USER)
725 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
726 const char *pkg_name, const char *key,
727 const char *val, const void *pmsg, void *data)
730 package_manager_event_type_e event_type = -1;
731 package_manager_event_state_e event_state = -1;
733 _LOGD("global_event_handler is called");
735 package_manager_h manager = data;
737 if (__validate_event_signal(target_uid))
738 return PACKAGE_MANAGER_ERROR_NONE;
740 if (strcasecmp(key, "start") == 0) {
741 ret = package_manager_get_event_type(val, &event_type);
742 if (ret != PACKAGE_MANAGER_ERROR_NONE)
743 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
745 __add_event(&(manager->head), req_id, event_type,
746 PACKAGE_MANAGER_EVENT_STATE_STARTED);
748 if (manager->event_cb && getuid() == target_uid)
749 manager->event_cb(pkg_type, pkg_name,
751 PACKAGE_MANAGER_EVENT_STATE_STARTED,
752 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
753 if (manager->global_event_cb)
754 manager->global_event_cb(target_uid, pkg_type, pkg_name,
756 PACKAGE_MANAGER_EVENT_STATE_STARTED,
757 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
759 } else if (strcasecmp(key, "install_percent") == 0
760 || strcasecmp(key, "progress_percent") == 0) {
762 (&(manager->head), req_id, &event_type,
763 &event_state) == 0) {
764 __update_event(&(manager->head), req_id,
766 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
767 if (manager->event_cb && getuid() == target_uid)
768 manager->event_cb(pkg_type, pkg_name,
770 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
772 PACKAGE_MANAGER_ERROR_NONE,
774 if (manager->global_event_cb)
775 manager->global_event_cb(target_uid, pkg_type, pkg_name,
777 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
779 PACKAGE_MANAGER_ERROR_NONE,
783 } else if (strcasecmp(key, "error") == 0) {
784 if (strcasecmp(key, "0") != 0) {
786 (&(manager->head), req_id, &event_type,
787 &event_state) == 0) {
788 __update_event(&(manager->head), req_id,
790 PACKAGE_MANAGER_EVENT_STATE_FAILED);
793 if (manager->event_cb && getuid() == target_uid)
794 manager->event_cb(pkg_type,
795 pkg_name, event_type,
796 PACKAGE_MANAGER_EVENT_STATE_FAILED,
798 PACKAGE_MANAGER_ERROR_NONE,
800 if (manager->global_event_cb)
801 manager->global_event_cb(target_uid, pkg_type,
802 pkg_name, event_type,
803 PACKAGE_MANAGER_EVENT_STATE_FAILED,
805 PACKAGE_MANAGER_ERROR_NONE,
808 } else if (strcasecmp(key, "end") == 0) {
810 (&(manager->head), req_id, &event_type,
811 &event_state) == 0) {
812 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
813 if (manager->event_cb && getuid() == target_uid)
814 manager->event_cb(pkg_type,
815 pkg_name, event_type,
816 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
818 PACKAGE_MANAGER_ERROR_NONE,
820 if (manager->global_event_cb)
821 manager->global_event_cb(target_uid, pkg_type,
822 pkg_name, event_type,
823 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
825 PACKAGE_MANAGER_ERROR_NONE,
829 if (strcasecmp(key, "ok") != 0) {
830 if (manager->event_cb && getuid() == target_uid)
831 manager->event_cb(pkg_type,
832 pkg_name, event_type,
833 PACKAGE_MANAGER_EVENT_STATE_FAILED,
835 PACKAGE_MANAGER_ERROR_NONE,
837 if (manager->global_event_cb)
838 manager->global_event_cb(target_uid, pkg_type,
839 pkg_name, event_type,
840 PACKAGE_MANAGER_EVENT_STATE_FAILED,
842 PACKAGE_MANAGER_ERROR_NONE,
848 return PACKAGE_MANAGER_ERROR_NONE;
851 API int package_manager_set_event_status(package_manager_h manager, int status_type)
855 if (manager == NULL){
856 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
859 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
862 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
865 return PACKAGE_MANAGER_ERROR_NONE;
868 API int package_manager_set_event_cb(package_manager_h manager,
869 package_manager_event_cb callback,
874 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
875 if (retval != PACKAGE_MANAGER_ERROR_NONE)
878 if (package_manager_validate_handle(manager)) {
880 package_manager_error
881 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
885 manager->event_cb = callback;
886 manager->user_data = user_data;
888 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
890 return PACKAGE_MANAGER_ERROR_NONE;
893 API int package_manager_unset_event_cb(package_manager_h manager)
895 if (manager == NULL) {
897 package_manager_error
898 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
902 // TODO: Please implement this function.
903 return PACKAGE_MANAGER_ERROR_NONE;
906 API int package_manager_set_global_event_cb(package_manager_h manager,
907 package_manager_global_event_cb callback,
912 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
913 if (retval != PACKAGE_MANAGER_ERROR_NONE)
916 if (package_manager_validate_handle(manager)) {
918 package_manager_error
919 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
923 if (getuid() >= REGULAR_USER) {
924 _LOGE("Regular user is not allowed for this api");
925 return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
928 manager->global_event_cb = callback;
929 manager->user_data = user_data;
931 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
933 return PACKAGE_MANAGER_ERROR_NONE;
936 API int package_manager_unset_global_event_cb(package_manager_h manager)
938 if (manager == NULL) {
940 package_manager_error
941 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
945 // TODO: Please implement this function.
946 return PACKAGE_MANAGER_ERROR_NONE;
949 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
951 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
954 char *pkg_id_dup = NULL;
956 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
957 if (retval != PACKAGE_MANAGER_ERROR_NONE)
960 if (app_id == NULL || package_id == NULL)
961 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
963 uid_t uid = getuid();
964 if (uid != GLOBAL_USER)
966 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
967 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
970 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
971 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
973 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
974 if (retval != PMINFO_R_OK)
976 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
979 pkg_id_dup = strdup(pkg_id);
980 if (pkg_id_dup == NULL)
982 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
983 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
986 *package_id = pkg_id_dup;
988 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
990 return PACKAGE_MANAGER_ERROR_NONE;
993 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
996 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
997 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1000 retval = package_info_get_package_info(package_id, package_info);
1002 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1003 return package_manager_error(retval, __FUNCTION__, NULL);
1005 return PACKAGE_MANAGER_ERROR_NONE;
1008 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
1013 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1014 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1017 retval = package_info_foreach_package_info(callback, user_data);
1019 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1020 return package_manager_error(retval, __FUNCTION__, NULL);
1023 return PACKAGE_MANAGER_ERROR_NONE;
1027 API int package_manager_compare_package_cert_info(const char *lhs_package_id, const char *rhs_package_id, package_manager_compare_result_type_e *compare_result)
1029 pkgmgrinfo_cert_compare_result_type_e result;
1030 uid_t uid = getuid();
1032 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1033 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1034 if (uid != GLOBAL_USER)
1036 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1037 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1040 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1041 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1043 *compare_result = (package_manager_compare_result_type_e)result;
1045 return PACKAGE_MANAGER_ERROR_NONE;
1048 API int package_manager_compare_app_cert_info(const char *lhs_app_id, const char *rhs_app_id, package_manager_compare_result_type_e *compare_result)
1050 pkgmgrinfo_cert_compare_result_type_e result;
1051 uid_t uid = getuid();
1053 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1054 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1055 if (uid != GLOBAL_USER)
1057 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1058 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1061 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1062 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1065 *compare_result = (package_manager_compare_result_type_e)result;
1067 return PACKAGE_MANAGER_ERROR_NONE;
1070 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1074 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1075 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1078 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1079 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1081 char *pkg_id = NULL;
1082 bool is_preload = 0;
1083 uid_t uid = getuid();
1084 if (uid != GLOBAL_USER)
1086 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1087 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1090 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1091 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1093 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1094 if (retval != PMINFO_R_OK)
1096 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1097 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1099 if (uid != GLOBAL_USER)
1101 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
1103 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1104 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1105 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1109 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
1111 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1112 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1113 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1116 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK)
1118 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1119 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1120 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1128 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1129 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1131 return PACKAGE_MANAGER_ERROR_NONE;
1134 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1138 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1139 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1142 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo =NULL;
1143 pkgmgrinfo_permission_type permission = 0;
1144 uid_t uid = getuid();
1145 if (uid != GLOBAL_USER)
1147 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1148 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1150 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1151 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1153 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1154 if (retval != PMINFO_R_OK)
1155 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1157 if (permission == PMINFO_PERMISSION_NORMAL)
1158 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1159 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1160 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1161 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1162 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1164 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1166 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1167 return PACKAGE_MANAGER_ERROR_NONE;
1170 API int package_manager_clear_cache_dir(const char *package_id)
1174 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1175 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1178 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1179 if (res == PKGMGR_R_EINVAL)
1181 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1183 else if (res == PKGMGR_R_ENOPKG)
1185 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1187 else if (res == PKGMGR_R_ENOMEM)
1189 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1191 else if (res == PKGMGR_R_EIO)
1193 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1195 else if (res == PKGMGR_R_EPRIV)
1197 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1199 else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR)
1201 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1203 else if (res != PKGMGR_R_OK)
1205 _LOGE("Unexpected error");
1206 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1209 return PACKAGE_MANAGER_ERROR_NONE;
1212 API int package_manager_clear_all_cache_dir(void)
1216 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1217 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1220 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1223 static void __initialize_cb_table(void)
1225 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, pkgmgr_client_free, NULL);
1228 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1230 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1231 if (callback == NULL)
1233 _LOGE("callback is null.");
1234 g_hash_table_remove(__cb_table, pc);
1238 package_size_info_t size_info;
1239 size_info.data_size = result->data_size;
1240 size_info.cache_size = result->cache_size;
1241 size_info.app_size = result->app_size;
1242 size_info.external_data_size = result->ext_data_size;
1243 size_info.external_cache_size = result->ext_cache_size;
1244 size_info.external_app_size = result->ext_app_size;
1246 callback(pkgid, &size_info, user_data);
1248 g_hash_table_remove(__cb_table, pc);
1251 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1253 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1254 if (callback == NULL)
1256 _LOGE("callback is null.");
1257 g_hash_table_remove(__cb_table, pc);
1261 package_size_info_t size_info;
1262 size_info.data_size = result->data_size;
1263 size_info.cache_size = result->cache_size;
1264 size_info.app_size = result->app_size;
1265 size_info.external_data_size = result->ext_data_size;
1266 size_info.external_cache_size = result->ext_cache_size;
1267 size_info.external_app_size = result->ext_app_size;
1269 callback(&size_info, user_data);
1271 g_hash_table_remove(__cb_table, pc);
1274 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1276 if (package_id == NULL || callback == NULL)
1278 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1281 if (__cb_table == NULL)
1283 __initialize_cb_table();
1286 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1289 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1293 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1295 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1299 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1302 if (res == PKGMGR_R_EINVAL)
1304 pkgmgr_client_free(pc);
1305 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1307 else if (res == PKGMGR_R_ENOPKG)
1309 pkgmgr_client_free(pc);
1310 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1312 else if (res == PKGMGR_R_ENOMEM)
1314 pkgmgr_client_free(pc);
1315 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1317 else if (res == PKGMGR_R_EIO)
1319 pkgmgr_client_free(pc);
1320 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1322 else if (res == PKGMGR_R_EPRIV)
1324 pkgmgr_client_free(pc);
1325 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1327 else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR)
1329 pkgmgr_client_free(pc);
1330 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1332 else if (res != PKGMGR_R_OK)
1334 _LOGE("Unexpected error");
1335 pkgmgr_client_free(pc);
1336 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1339 g_hash_table_insert(__cb_table, pc, callback);
1341 _LOGD("Successful");
1342 return PACKAGE_MANAGER_ERROR_NONE;
1345 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1347 return package_manager_get_package_size_info(PKG_SIZE_INFO_TOTAL, callback, user_data);
1350 API int package_manager_filter_create(package_manager_filter_h *handle)
1353 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1355 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1356 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1362 package_manager_error
1363 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1367 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1368 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1370 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1373 *handle = pkgmgr_filter;
1375 return PACKAGE_MANAGER_ERROR_NONE;
1378 API int package_manager_filter_destroy(package_manager_filter_h handle)
1385 package_manager_error
1386 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1390 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1391 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1393 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1396 return PACKAGE_MANAGER_ERROR_NONE;
1399 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1400 const char *property, const bool value)
1404 if ((handle == NULL) || (property == NULL))
1407 package_manager_error
1408 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1412 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1413 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1415 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1418 return PACKAGE_MANAGER_ERROR_NONE;
1421 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1425 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1426 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1429 if ((handle == NULL) || (count == NULL))
1431 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1434 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1437 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1440 return PACKAGE_MANAGER_ERROR_NONE;
1443 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1444 package_manager_package_info_cb callback, void *user_data)
1448 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1449 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1452 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1454 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1456 return package_manager_error(retval, __FUNCTION__, NULL);
1460 return PACKAGE_MANAGER_ERROR_NONE;
1464 API int package_manager_drm_generate_license_request(const char *resp_data, char **req_data, char **license_url)
1468 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1469 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1472 if (resp_data == NULL || req_data == NULL || license_url == NULL) {
1473 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1477 return PACKAGE_MANAGER_ERROR_NONE;
1480 API int package_manager_drm_register_license(const char *resp_data)
1484 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1485 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1488 if (resp_data == NULL) {
1489 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1493 return PACKAGE_MANAGER_ERROR_NONE;
1496 API int package_manager_drm_decrypt_package(const char *drm_file_path, const char *decrypted_file_path)
1500 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1501 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1504 if (drm_file_path == NULL || decrypted_file_path == NULL) {
1505 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1509 return PACKAGE_MANAGER_ERROR_NONE;
1512 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1515 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1517 package_size_info_t *size_info = (package_size_info_t *)handle;
1519 *data_size = (long long)size_info->data_size;
1520 return PACKAGE_MANAGER_ERROR_NONE;
1523 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1526 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1528 package_size_info_t *size_info = (package_size_info_t *)handle;
1530 *cache_size = size_info->cache_size;
1531 return PACKAGE_MANAGER_ERROR_NONE;
1534 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1537 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1539 package_size_info_t *size_info = (package_size_info_t *)handle;
1540 *app_size = size_info->app_size;
1541 return PACKAGE_MANAGER_ERROR_NONE;
1544 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1547 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1549 package_size_info_t *size_info = (package_size_info_t *)handle;
1550 *ext_data_size = size_info->external_data_size;
1551 return PACKAGE_MANAGER_ERROR_NONE;
1554 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1557 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1559 package_size_info_t *size_info = (package_size_info_t *)handle;
1560 *ext_cache_size = size_info->external_cache_size;
1561 return PACKAGE_MANAGER_ERROR_NONE;
1564 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1567 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1569 package_size_info_t *size_info = (package_size_info_t *)handle;
1570 *ext_app_size = size_info->external_app_size;
1571 return PACKAGE_MANAGER_ERROR_NONE;