4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
7 * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
36 #include <pkgmgr-info.h>
37 #include <iniparser.h>
38 /* For multi-user support */
39 #include <tzplatform_config.h>
41 #include "package-manager.h"
42 #include "pkgmgr_client_debug.h"
43 #include "pkgmgr_client_internal.h"
45 /* API export macro */
47 #define API __attribute__ ((visibility("default")))
50 #define BINSH_NAME "/bin/sh"
53 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
54 #define REGULAR_USER 5000
56 static inline uid_t _getuid(void)
60 if (uid < REGULAR_USER)
66 static int _get_request_id()
68 static int internal_req_id = 1;
70 return internal_req_id++;
73 static struct cb_info *__create_event_cb_info(struct pkgmgr_client_t *client,
74 pkgmgr_handler event_cb, void *data, const char *req_key)
76 struct cb_info *cb_info;
78 cb_info = calloc(1, sizeof(struct cb_info));
79 if (cb_info == NULL) {
83 cb_info->client = client;
84 cb_info->event_cb = event_cb;
86 cb_info->req_id = _get_request_id();
87 if (req_key != NULL) {
88 cb_info->req_key = strdup(req_key);
89 if (cb_info->req_key == NULL) {
99 static struct cb_info *__create_app_event_cb_info(
100 struct pkgmgr_client_t *client, pkgmgr_app_handler app_event_cb,
101 void *data, const char *req_key)
103 struct cb_info *cb_info;
105 cb_info = calloc(1, sizeof(struct cb_info));
106 if (cb_info == NULL) {
107 ERR("out of memory");
110 cb_info->client = client;
111 cb_info->app_event_cb = app_event_cb;
112 cb_info->data = data;
113 cb_info->req_id = _get_request_id();
114 if (req_key != NULL) {
115 cb_info->req_key = strdup(req_key);
116 if (cb_info->req_key == NULL) {
117 ERR("out of memory");
126 static struct cb_info *__create_size_info_cb_info(
127 struct pkgmgr_client_t *client,
128 pkgmgr_pkg_size_info_receive_cb size_info_cb,
129 void *data, const char *req_key)
131 struct cb_info *cb_info;
133 cb_info = calloc(1, sizeof(struct cb_info));
134 if (cb_info == NULL) {
135 ERR("out of memory");
138 cb_info->client = client;
139 cb_info->size_info_cb = size_info_cb;
140 cb_info->data = data;
141 cb_info->req_id = _get_request_id();
142 if (req_key != NULL) {
143 cb_info->req_key = strdup(req_key);
144 if (cb_info->req_key == NULL) {
145 ERR("out of memory");
154 static gboolean __free_cb_info_at_main_thread(gpointer user_data)
156 struct cb_info *cb_info = (struct cb_info *)user_data;
158 free(cb_info->req_key);
161 return G_SOURCE_REMOVE;
164 static void __free_cb_info(struct cb_info *cb_info)
166 g_idle_add(__free_cb_info_at_main_thread, cb_info);
169 static int __get_size_process(pkgmgr_client *pc, const char *pkgid, uid_t uid,
170 pkgmgr_getsize_type get_type, pkgmgr_handler event_cb,
174 int ret = PKGMGR_R_ECOMM;
175 long long size_info = 0;
176 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
178 if (pc == NULL || pkgid == NULL) {
179 ERR("invalid parameter");
180 return PKGMGR_R_EINVAL;
183 if (client->pc_type != PC_REQUEST) {
184 ERR("client->pc_type is not PC_REQUEST");
185 return PKGMGR_R_EINVAL;
188 ret = pkgmgr_client_connection_send_request(client, "getsize_sync",
189 g_variant_new("(usi)", uid, pkgid, get_type), &result);
190 if (ret != PKGMGR_R_OK) {
191 ERR("request failed: %d", ret);
195 g_variant_get(result, "(ix)", &ret, &size_info);
196 if (ret != PKGMGR_R_OK) {
197 ERR("request result failed: %d", ret);
198 g_variant_unref(result);
203 ERR("invalid size_info=(%lld)", size_info);
206 ret = (int)size_info;
207 DBG("size_info(%lld), return size(%d)", size_info, ret);
210 g_variant_unref(result);
215 static int __move_pkg_process(pkgmgr_client *pc, const char *pkgid,
216 const char *pkg_type, uid_t uid, pkgmgr_move_type move_type,
217 pkgmgr_handler event_cb, void *data)
221 ret = pkgmgr_client_usr_move(pc, pkg_type, pkgid, move_type, event_cb, data, uid);
223 ERR("move request failed");
230 static int __check_app_process(pkgmgr_request_service_type service_type,
231 pkgmgr_client *pc, const char *pkgid, uid_t uid, void *data)
234 int ret = PKGMGR_R_ECOMM;
235 pkgmgrinfo_pkginfo_h handle;
237 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
239 retvm_if(client->pc_type != PC_REQUEST, PKGMGR_R_EINVAL, "client->pc_type is not PC_REQUEST\n");
241 ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, &handle);
242 if (ret != PMINFO_R_OK) {
243 ERR("pkgmgrinfo_pkginfo_get_pkginfo failed");
244 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
245 return PKGMGR_R_ERROR;
248 if (service_type == PM_REQUEST_KILL_APP) {
249 ret = pkgmgr_client_connection_send_request(client, "kill",
250 g_variant_new("(us)", uid, pkgid), &result);
251 } else if (service_type == PM_REQUEST_CHECK_APP) {
252 ret = pkgmgr_client_connection_send_request(client, "check",
253 g_variant_new("(us)", uid, pkgid), &result);
255 ERR("unexpected service type: %d", service_type);
256 ret = PKGMGR_R_ERROR;
259 if (ret != PKGMGR_R_OK) {
260 ERR("request failed: %d", ret);
264 g_variant_get(result, "(ii)", &ret, &pid);
265 g_variant_unref(result);
266 if (ret != PKGMGR_R_OK) {
267 ERR("request failed, ret=%d", ret);
273 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
279 static int __request_size_info(pkgmgr_client *pc, uid_t uid)
282 int ret = PKGMGR_R_ECOMM;
283 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
286 ERR("invalid parameter");
287 return PKGMGR_R_EINVAL;
290 if (client->pc_type != PC_REQUEST) {
291 ERR("client->pc_type is not PC_REQUEST");
292 return PKGMGR_R_EINVAL;
295 ret = pkgmgr_client_connection_send_request(client, "getsize",
296 g_variant_new("(usi)", uid, "size_info",
297 PM_GET_SIZE_INFO), &result);
298 if (ret != PKGMGR_R_OK) {
299 ERR("request failed: %d", ret);
303 /* just free result here because it cannot return result(reqkey) */
304 g_variant_unref(result);
309 API pkgmgr_client *pkgmgr_client_new(pkgmgr_client_type pc_type)
311 struct pkgmgr_client_t *client;
313 if (pc_type == PC_BROADCAST) {
314 ERR("broadcast type is not supported");
318 if (pc_type != PC_REQUEST && pc_type != PC_LISTENING) {
319 ERR("invalid parameter");
323 client = calloc(1, sizeof(struct pkgmgr_client_t));
324 if (client == NULL) {
325 ERR("out of memory");
329 client->pc_type = pc_type;
330 client->status_type = PKGMGR_CLIENT_STATUS_ALL;
332 if (pkgmgr_client_connection_connect(client) != PKGMGR_R_OK) {
337 return (pkgmgr_client *)client;
340 API int pkgmgr_client_free(pkgmgr_client *pc)
342 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
345 ERR("invalid argument");
346 return PKGMGR_R_EINVAL;
349 pkgmgr_client_remove_listen_status(client);
350 pkgmgr_client_connection_disconnect(client);
351 if (client->tep_path)
352 free(client->tep_path);
358 struct manifest_and_type type_map[] = {
359 { "res/wgt/config.xml", "wgt" },
360 { "config.xml", "wgt" },
361 { "tizen-manifest.xml", "tpk" },
365 static char *__get_type_from_path(const char *pkg_path)
367 const char *type = NULL;
371 uf = unzOpen(pkg_path);
373 ERR("failed to open zip file %s", pkg_path);
377 for (i = 0; type_map[i].manifest != NULL; i++) {
378 if (unzLocateFile(uf, type_map[i].manifest, 0) == UNZ_OK) {
379 DBG("pkgtype of %s: [%s]", pkg_path, type_map[i].type);
380 type = type_map[i].type;
386 return type ? strdup(type) : NULL;
389 API int pkgmgr_client_set_tep_path(pkgmgr_client *pc, const char *tep_path,
392 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *) pc;
394 if (pc == NULL || tep_path == NULL) {
395 ERR("invalied parameter");
396 return PKGMGR_R_EINVAL;
399 if (client->tep_path)
400 free(client->tep_path);
402 client->tep_path = strdup(tep_path);
403 client->tep_move = tep_move;
408 API int pkgmgr_client_usr_install(pkgmgr_client *pc, const char *pkg_type,
409 const char *descriptor_path, const char *pkg_path,
410 const char *optional_data, pkgmgr_mode mode,
411 pkgmgr_handler event_cb, void *data, uid_t uid)
414 int ret = PKGMGR_R_ECOMM;
415 char *req_key = NULL;
416 GVariantBuilder *builder = NULL;
417 GVariant *args = NULL;
418 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
419 struct cb_info *cb_info;
421 if (pc == NULL || pkg_path == NULL) {
422 ERR("invalid parameter");
423 return PKGMGR_R_EINVAL;
426 if (client->pc_type != PC_REQUEST) {
427 ERR("client type is not PC_REQUEST");
428 return PKGMGR_R_EINVAL;
431 if (access(pkg_path, F_OK) != 0) {
432 ERR("failed to access: %s", pkg_path);
433 return PKGMGR_R_EINVAL;
436 if (client->tep_path != NULL && access(client->tep_path, F_OK) != 0) {
437 ERR("failed to access: %s", client->tep_path);
438 return PKGMGR_R_EINVAL;
441 /* build arguments */
442 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
443 if (client->tep_path) {
444 g_variant_builder_add(builder, "s", "-e");
445 g_variant_builder_add(builder, "s", client->tep_path);
446 g_variant_builder_add(builder, "s", "-M");
447 /* TODO: revise tep_move */
448 g_variant_builder_add(builder, "s",
449 client->tep_move ? "tep_move" : "tep_copy");
451 if (client->debug_mode)
452 g_variant_builder_add(builder, "s", "-G");
454 args = g_variant_new("as", builder);
455 g_variant_builder_unref(builder);
457 ret = pkgmgr_client_connection_send_request(client, "install",
458 g_variant_new("(uss@as)", uid, pkg_type ? pkg_type : "",
461 if (ret != PKGMGR_R_OK) {
462 ERR("request failed: %d", ret);
466 g_variant_get(result, "(i&s)", &ret, &req_key);
467 if (req_key == NULL) {
468 g_variant_unref(result);
469 return PKGMGR_R_ECOMM;
471 if (ret != PKGMGR_R_OK) {
472 g_variant_unref(result);
476 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
477 if (cb_info == NULL) {
478 g_variant_unref(result);
479 return PKGMGR_R_ENOMEM;
481 g_variant_unref(result);
482 ret = pkgmgr_client_connection_set_callback(client, cb_info);
483 if (ret != PKGMGR_R_OK) {
484 __free_cb_info(cb_info);
487 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
489 return cb_info->req_id;
492 API int pkgmgr_client_install(pkgmgr_client *pc, const char *pkg_type,
493 const char *descriptor_path, const char *pkg_path,
494 const char *optional_data, pkgmgr_mode mode,
495 pkgmgr_handler event_cb, void *data)
497 return pkgmgr_client_usr_install(pc, pkg_type, descriptor_path,
498 pkg_path, optional_data, mode, event_cb, data,
502 API int pkgmgr_client_reinstall(pkgmgr_client *pc, const char *pkg_type,
503 const char *pkgid, const char *optional_data, pkgmgr_mode mode,
504 pkgmgr_handler event_cb, void *data)
506 return pkgmgr_client_usr_reinstall(pc, pkg_type, pkgid, optional_data,
507 mode, event_cb, data, _getuid());
510 API int pkgmgr_client_usr_reinstall(pkgmgr_client *pc, const char *pkg_type,
511 const char *pkgid, const char *optional_data, pkgmgr_mode mode,
512 pkgmgr_handler event_cb, void *data, uid_t uid)
515 int ret = PKGMGR_R_ECOMM;
516 char *req_key = NULL;
517 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
518 struct cb_info *cb_info;
520 if (pc == NULL || pkgid == NULL) {
521 ERR("invalid parameter");
522 return PKGMGR_R_EINVAL;
525 if (client->pc_type != PC_REQUEST) {
526 ERR("client->pc_type is not PC_REQUEST");
527 return PKGMGR_R_EINVAL;
530 ret = pkgmgr_client_connection_send_request(client, "reinstall",
531 g_variant_new("(us)", uid, pkgid), &result);
532 if (ret != PKGMGR_R_OK) {
533 ERR("request failed: %d", ret);
537 g_variant_get(result, "(i&s)", &ret, &req_key);
538 if (req_key == NULL) {
539 g_variant_unref(result);
540 return PKGMGR_R_ECOMM;
542 if (ret != PKGMGR_R_OK) {
543 g_variant_unref(result);
547 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
548 if (cb_info == NULL) {
549 g_variant_unref(result);
550 return PKGMGR_R_ENOMEM;
552 g_variant_unref(result);
553 ret = pkgmgr_client_connection_set_callback(client, cb_info);
554 if (ret != PKGMGR_R_OK) {
555 __free_cb_info(cb_info);
558 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
560 return cb_info->req_id;
563 API int pkgmgr_client_usr_mount_install(pkgmgr_client *pc, const char *pkg_type,
564 const char *descriptor_path, const char *pkg_path,
565 const char *optional_data, pkgmgr_mode mode,
566 pkgmgr_handler event_cb, void *data, uid_t uid)
569 int ret = PKGMGR_R_ECOMM;
570 char *req_key = NULL;
571 GVariantBuilder *builder = NULL;
572 GVariant *args = NULL;
573 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
574 struct cb_info *cb_info;
576 if (pc == NULL || pkg_path == NULL) {
577 ERR("invalid parameter");
578 return PKGMGR_R_EINVAL;
581 if (client->pc_type != PC_REQUEST) {
582 ERR("client->pc_type is not PC_REQUEST");
583 return PKGMGR_R_EINVAL;
586 if (access(pkg_path, F_OK) != 0) {
587 ERR("failed to access: %s", pkg_path);
588 return PKGMGR_R_EINVAL;
591 if (client->tep_path != NULL && access(client->tep_path, F_OK) != 0) {
592 ERR("failed to access: %s", client->tep_path);
593 return PKGMGR_R_EINVAL;
596 /* build arguments */
597 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
598 if (client->tep_path) {
599 g_variant_builder_add(builder, "s", "-e");
600 g_variant_builder_add(builder, "s", client->tep_path);
601 g_variant_builder_add(builder, "s", "-M");
602 /* TODO: revise tep_move */
603 g_variant_builder_add(builder, "s",
604 client->tep_move ? "tep_move" : "tep_copy");
607 args = g_variant_new("as", builder);
608 g_variant_builder_unref(builder);
610 ret = pkgmgr_client_connection_send_request(client, "mount_install",
611 g_variant_new("(uss@as)", uid, pkg_type ? pkg_type : "",
614 if (ret != PKGMGR_R_OK) {
615 ERR("request failed: %d", ret);
619 g_variant_get(result, "(i&s)", &ret, &req_key);
620 if (req_key == NULL) {
621 g_variant_unref(result);
622 return PKGMGR_R_ECOMM;
624 if (ret != PKGMGR_R_OK) {
625 g_variant_unref(result);
629 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
630 if (cb_info == NULL) {
631 g_variant_unref(result);
632 return PKGMGR_R_ENOMEM;
634 g_variant_unref(result);
635 ret = pkgmgr_client_connection_set_callback(client, cb_info);
636 if (ret != PKGMGR_R_OK) {
637 __free_cb_info(cb_info);
640 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
642 return cb_info->req_id;
645 API int pkgmgr_client_mount_install(pkgmgr_client *pc, const char *pkg_type,
646 const char *descriptor_path, const char *pkg_path,
647 const char *optional_data, pkgmgr_mode mode,
648 pkgmgr_handler event_cb, void *data)
650 return pkgmgr_client_usr_mount_install(pc, pkg_type, descriptor_path,
651 pkg_path, optional_data, mode, event_cb, data,
655 API int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type,
656 const char *pkgid, pkgmgr_mode mode, pkgmgr_handler event_cb,
659 return pkgmgr_client_usr_uninstall(pc, pkg_type, pkgid, mode, event_cb,
663 API int pkgmgr_client_usr_uninstall(pkgmgr_client *pc, const char *pkg_type,
664 const char *pkgid, pkgmgr_mode mode, pkgmgr_handler event_cb,
665 void *data, uid_t uid)
668 int ret = PKGMGR_R_ECOMM;
669 char *req_key = NULL;
670 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
671 struct cb_info *cb_info;
673 if (pc == NULL || pkgid == NULL) {
674 ERR("invalid parameter");
675 return PKGMGR_R_EINVAL;
678 if (client->pc_type != PC_REQUEST) {
679 ERR("client->pc_type is not PC_REQUEST");
680 return PKGMGR_R_EINVAL;
683 ret = pkgmgr_client_connection_send_request(client, "uninstall",
684 g_variant_new("(us)", uid, pkgid), &result);
685 if (ret != PKGMGR_R_OK) {
686 ERR("request failed: %d", ret);
690 g_variant_get(result, "(i&s)", &ret, &req_key);
691 if (req_key == NULL) {
692 g_variant_unref(result);
693 return PKGMGR_R_ECOMM;
695 if (ret != PKGMGR_R_OK) {
696 g_variant_unref(result);
700 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
701 if (cb_info == NULL) {
702 g_variant_unref(result);
703 return PKGMGR_R_ENOMEM;
705 g_variant_unref(result);
706 ret = pkgmgr_client_connection_set_callback(client, cb_info);
707 if (ret != PKGMGR_R_OK) {
708 __free_cb_info(cb_info);
711 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
713 return cb_info->req_id;
716 API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
717 const char *pkgid, pkgmgr_move_type move_type,
718 pkgmgr_handler event_cb, void *data)
720 return pkgmgr_client_usr_move(pc, pkg_type, pkgid, move_type,
721 event_cb, data, _getuid());
723 API int pkgmgr_client_usr_move(pkgmgr_client *pc, const char *pkg_type,
724 const char *pkgid, pkgmgr_move_type move_type,
725 pkgmgr_handler event_cb, void *data, uid_t uid)
728 int ret = PKGMGR_R_ECOMM;
729 char *req_key = NULL;
730 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
731 struct cb_info *cb_info;
733 if (pc == NULL || pkgid == NULL) {
734 ERR("invalid parameter");
735 return PKGMGR_R_EINVAL;
738 if ((move_type < PM_MOVE_TO_INTERNAL) ||
739 (move_type > PM_MOVE_TO_EXTENDED))
740 return PKGMGR_R_EINVAL;
742 if (client->pc_type != PC_REQUEST) {
743 ERR("client->pc_type is not PC_REQUEST");
744 return PKGMGR_R_EINVAL;
747 ret = pkgmgr_client_connection_send_request(client, "move",
748 g_variant_new("(usi)", uid, pkgid, move_type), &result);
749 if (ret != PKGMGR_R_OK) {
750 ERR("request failed: %d", ret);
754 g_variant_get(result, "(i&s)", &ret, &req_key);
755 if (req_key == NULL) {
756 g_variant_unref(result);
757 return PKGMGR_R_ECOMM;
759 if (ret != PKGMGR_R_OK) {
760 g_variant_unref(result);
764 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
765 if (cb_info == NULL) {
766 g_variant_unref(result);
767 return PKGMGR_R_ERROR;
769 g_variant_unref(result);
770 ret = pkgmgr_client_connection_set_callback(client, cb_info);
771 if (ret != PKGMGR_R_OK) {
772 __free_cb_info(cb_info);
775 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
777 return cb_info->req_id;
780 API int pkgmgr_client_usr_register_pkg_update_info(pkgmgr_client *pc,
781 pkg_update_info_t *update_info, uid_t uid)
784 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
787 if (pc == NULL || update_info == NULL || update_info->pkgid == NULL) {
788 ERR("invalid parameter");
789 return PKGMGR_R_EINVAL;
792 if (client->pc_type != PC_REQUEST) {
793 ERR("client->pc_type is not PC_REQUEST");
794 return PKGMGR_R_EINVAL;
797 ret = pkgmgr_client_connection_send_request(client, "register_pkg_update_info",
798 g_variant_new("(ussi)", uid, update_info->pkgid, update_info->version,
799 update_info->type), &result);
800 if (ret != PKGMGR_R_OK) {
801 ERR("request failed: %d", ret);
805 g_variant_get(result, "(i)", &ret);
806 if (ret != PKGMGR_R_OK) {
807 g_variant_unref(result);
810 g_variant_unref(result);
815 API int pkgmgr_client_register_pkg_update_info(pkgmgr_client *pc,
816 pkg_update_info_t *update_info)
818 return pkgmgr_client_usr_register_pkg_update_info(pc, update_info,
822 API int pkgmgr_client_usr_unregister_pkg_update_info(pkgmgr_client *pc,
823 const char *pkgid, uid_t uid)
826 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
829 if (pc == NULL || pkgid == NULL) {
830 ERR("invalid parameter");
831 return PKGMGR_R_EINVAL;
834 if (client->pc_type != PC_REQUEST) {
835 ERR("client->pc_type is not PC_REQUEST");
836 return PKGMGR_R_EINVAL;
839 ret = pkgmgr_client_connection_send_request(client,
840 "unregister_pkg_update_info",
841 g_variant_new("(us)", uid, pkgid), &result);
842 if (ret != PKGMGR_R_OK) {
843 ERR("request failed: %d", ret);
847 g_variant_get(result, "(i)", &ret);
848 if (ret != PKGMGR_R_OK) {
849 g_variant_unref(result);
852 g_variant_unref(result);
857 API int pkgmgr_client_unregister_pkg_update_info(pkgmgr_client *pc,
860 return pkgmgr_client_usr_unregister_pkg_update_info(pc, pkgid, _getuid());
863 API int pkgmgr_client_usr_unregister_all_pkg_update_info(pkgmgr_client *pc,
867 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
871 ERR("invalid parameter");
872 return PKGMGR_R_EINVAL;
875 if (client->pc_type != PC_REQUEST) {
876 ERR("client->pc_type is not PC_REQUEST");
877 return PKGMGR_R_EINVAL;
880 ret = pkgmgr_client_connection_send_request(client,
881 "unregister_all_pkg_update_info",
882 g_variant_new("(u)", uid), &result);
883 if (ret != PKGMGR_R_OK) {
884 ERR("request failed: %d", ret);
888 g_variant_get(result, "(i)", &ret);
889 if (ret != PKGMGR_R_OK) {
890 g_variant_unref(result);
893 g_variant_unref(result);
898 API int pkgmgr_client_unregister_all_pkg_update_info(pkgmgr_client *pc)
900 return pkgmgr_client_usr_unregister_all_pkg_update_info(pc, _getuid());
903 API int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type,
904 const char *pkgid, uid_t uid)
907 int ret = PKGMGR_R_ECOMM;
908 GVariantBuilder *builder;
909 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
911 if (pc == NULL || pkgid == NULL) {
912 ERR("invalid parameter");
913 return PKGMGR_R_EINVAL;
916 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
917 g_variant_builder_add(builder, "s", pkgid);
919 ret = pkgmgr_client_connection_send_request(client, "enable_pkgs",
920 g_variant_new("(uas)", uid, builder), &result);
921 g_variant_builder_unref(builder);
922 if (ret != PKGMGR_R_OK) {
923 ERR("request failed: %d", ret);
927 g_variant_get(result, "(is)", &ret, NULL);
928 g_variant_unref(result);
933 API int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type,
936 return pkgmgr_client_usr_activate(pc, pkg_type, pkgid, _getuid());
939 API int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc,
940 const char *pkg_type, const char **pkgids, int n_pkgs,
941 pkgmgr_handler event_cb, void *data, uid_t uid)
944 GVariantBuilder *builder;
945 int ret = PKGMGR_R_ECOMM;
946 char *req_key = NULL;
947 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
948 struct cb_info *cb_info;
951 if (pc == NULL || pkgids == NULL || n_pkgs < 1) {
952 ERR("invalid parameter");
953 return PKGMGR_R_EINVAL;
956 if (client->pc_type != PC_REQUEST) {
957 ERR("client type is not PC_REQUEST");
958 return PKGMGR_R_EINVAL;
961 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
962 for (i = 0; i < n_pkgs; i++)
963 g_variant_builder_add(builder, "s", pkgids[i]);
965 ret = pkgmgr_client_connection_send_request(client, "enable_pkgs",
966 g_variant_new("(uas)", uid, builder), &result);
967 g_variant_builder_unref(builder);
968 if (ret != PKGMGR_R_OK) {
969 ERR("request failed: %d", ret);
973 g_variant_get(result, "(i&s)", &ret, &req_key);
974 if (req_key == NULL) {
975 g_variant_unref(result);
976 return PKGMGR_R_ECOMM;
978 if (ret != PKGMGR_R_OK) {
979 g_variant_unref(result);
983 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
984 if (cb_info == NULL) {
985 g_variant_unref(result);
986 return PKGMGR_R_ERROR;
988 g_variant_unref(result);
989 ret = pkgmgr_client_connection_set_callback(client, cb_info);
990 if (ret != PKGMGR_R_OK) {
991 __free_cb_info(cb_info);
994 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
996 return cb_info->req_id;
999 API int pkgmgr_client_activate_packages(pkgmgr_client *pc,
1000 const char *pkg_type, const char **pkgids, int n_pkgs,
1001 pkgmgr_handler event_cb, void *data)
1003 return pkgmgr_client_usr_activate_packages(pc, pkg_type,
1004 pkgids, n_pkgs, event_cb, data, _getuid());
1007 API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type,
1008 const char *pkgid, uid_t uid)
1011 GVariantBuilder *builder;
1012 int ret = PKGMGR_R_ECOMM;
1013 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1015 if (pc == NULL || pkgid == NULL) {
1016 ERR("invalid parameter");
1017 return PKGMGR_R_EINVAL;
1020 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1021 g_variant_builder_add(builder, "s", pkgid);
1023 ret = pkgmgr_client_connection_send_request(client, "disable_pkgs",
1024 g_variant_new("(uas)", uid, builder), &result);
1025 g_variant_builder_unref(builder);
1026 if (ret != PKGMGR_R_OK) {
1027 ERR("request failed: %d", ret);
1031 g_variant_get(result, "(is)", &ret, NULL);
1032 g_variant_unref(result);
1037 API int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type,
1040 return pkgmgr_client_usr_deactivate(pc, pkg_type, pkgid, _getuid());
1043 API int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc,
1044 const char *pkg_type, const char **pkgids, int n_pkgs,
1045 pkgmgr_handler event_cb, void *data, uid_t uid)
1048 GVariantBuilder *builder;
1049 int ret = PKGMGR_R_ECOMM;
1050 char *req_key = NULL;
1051 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1052 struct cb_info *cb_info;
1055 if (pc == NULL || pkgids == NULL || n_pkgs < 1) {
1056 ERR("invalid parameter");
1057 return PKGMGR_R_EINVAL;
1060 if (client->pc_type != PC_REQUEST) {
1061 ERR("client type is not PC_REQUEST");
1062 return PKGMGR_R_EINVAL;
1065 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1066 for (i = 0; i < n_pkgs; i++)
1067 g_variant_builder_add(builder, "s", pkgids[i]);
1069 ret = pkgmgr_client_connection_send_request(client, "disable_pkgs",
1070 g_variant_new("(uas)", uid, builder), &result);
1071 g_variant_builder_unref(builder);
1072 if (ret != PKGMGR_R_OK) {
1073 ERR("request failed: %d", ret);
1077 g_variant_get(result, "(i&s)", &ret, &req_key);
1078 if (req_key == NULL) {
1079 g_variant_unref(result);
1080 return PKGMGR_R_ECOMM;
1082 if (ret != PKGMGR_R_OK) {
1083 g_variant_unref(result);
1087 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
1088 if (cb_info == NULL) {
1089 g_variant_unref(result);
1090 return PKGMGR_R_ERROR;
1092 g_variant_unref(result);
1093 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1094 if (ret != PKGMGR_R_OK) {
1095 __free_cb_info(cb_info);
1098 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1100 return cb_info->req_id;
1103 API int pkgmgr_client_deactivate_packages(pkgmgr_client *pc,
1104 const char *pkg_type, const char **pkgids, int n_pkgs,
1105 pkgmgr_handler event_cb, void *data)
1107 return pkgmgr_client_usr_deactivate_packages(pc, pkg_type,
1108 pkgids, n_pkgs, event_cb, data, _getuid());
1111 API int pkgmgr_client_usr_activate_app(pkgmgr_client *pc, const char *appid,
1112 pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1115 int ret = PKGMGR_R_ECOMM;
1116 char *req_key = NULL;
1117 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1118 struct cb_info *cb_info;
1120 if (pc == NULL || appid == NULL) {
1121 ERR("invalid parameter");
1122 return PKGMGR_R_EINVAL;
1125 ret = pkgmgr_client_connection_send_request(client, "enable_app",
1126 g_variant_new("(us)", uid, appid), &result);
1127 if (ret != PKGMGR_R_OK) {
1128 ERR("request failed: %d", ret);
1132 g_variant_get(result, "(i&s)", &ret, &req_key);
1133 if (req_key == NULL) {
1134 g_variant_unref(result);
1135 return PKGMGR_R_ECOMM;
1137 if (ret != PKGMGR_R_OK) {
1138 g_variant_unref(result);
1142 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1144 if (cb_info == NULL) {
1145 g_variant_unref(result);
1146 return PKGMGR_R_ENOMEM;
1148 g_variant_unref(result);
1149 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1150 if (ret != PKGMGR_R_OK) {
1151 __free_cb_info(cb_info);
1154 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1156 return cb_info->req_id;
1159 API int pkgmgr_client_activate_app(pkgmgr_client *pc, const char *appid,
1160 pkgmgr_app_handler app_event_cb, void *data)
1162 return pkgmgr_client_usr_activate_app(pc, appid, app_event_cb,
1166 API int pkgmgr_client_usr_activate_apps(pkgmgr_client *pc, const char **appids,
1167 int n_apps, pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1170 GVariantBuilder *builder;
1171 int ret = PKGMGR_R_ECOMM;
1172 char *req_key = NULL;
1173 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1174 struct cb_info *cb_info;
1177 if (pc == NULL || appids == NULL || n_apps < 1) {
1178 ERR("invalid parameter");
1179 return PKGMGR_R_EINVAL;
1182 if (client->pc_type != PC_REQUEST) {
1183 ERR("client type is not PC_REQUEST");
1184 return PKGMGR_R_EINVAL;
1187 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1188 for (i = 0; i < n_apps; i++)
1189 g_variant_builder_add(builder, "s", appids[i]);
1191 ret = pkgmgr_client_connection_send_request(client, "enable_apps",
1192 g_variant_new("(uas)", uid, builder), &result);
1193 g_variant_builder_unref(builder);
1194 if (ret != PKGMGR_R_OK) {
1195 ERR("request failed: %d", ret);
1199 g_variant_get(result, "(i&s)", &ret, &req_key);
1200 if (req_key == NULL) {
1201 g_variant_unref(result);
1202 return PKGMGR_R_ECOMM;
1204 if (ret != PKGMGR_R_OK) {
1205 g_variant_unref(result);
1209 cb_info = __create_app_event_cb_info(client, app_event_cb, data, req_key);
1210 if (cb_info == NULL) {
1211 g_variant_unref(result);
1212 return PKGMGR_R_ERROR;
1214 g_variant_unref(result);
1215 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1216 if (ret != PKGMGR_R_OK) {
1217 __free_cb_info(cb_info);
1220 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1222 return cb_info->req_id;
1225 API int pkgmgr_client_activate_apps(pkgmgr_client *pc, const char **appids,
1226 int n_apps, pkgmgr_app_handler app_event_cb, void *data)
1228 return pkgmgr_client_usr_activate_apps(pc, appids, n_apps,
1229 app_event_cb, data, _getuid());
1232 API int pkgmgr_client_activate_global_app_for_uid(pkgmgr_client *pc,
1233 const char *appid, pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1236 int ret = PKGMGR_R_ECOMM;
1237 char *req_key = NULL;
1238 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1239 struct cb_info *cb_info;
1241 if (pc == NULL || appid == NULL) {
1242 ERR("invalid parameter");
1243 return PKGMGR_R_EINVAL;
1246 ret = pkgmgr_client_connection_send_request(client,
1247 "enable_global_app_for_uid",
1248 g_variant_new("(us)", uid, appid), &result);
1249 if (ret != PKGMGR_R_OK) {
1250 ERR("request failed: %d", ret);
1254 g_variant_get(result, "(i&s)", &ret, &req_key);
1255 if (req_key == NULL) {
1256 g_variant_unref(result);
1257 return PKGMGR_R_ECOMM;
1259 if (ret != PKGMGR_R_OK) {
1260 g_variant_unref(result);
1264 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1266 if (cb_info == NULL) {
1267 g_variant_unref(result);
1268 return PKGMGR_R_ENOMEM;
1270 g_variant_unref(result);
1271 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1272 if (ret != PKGMGR_R_OK) {
1273 __free_cb_info(cb_info);
1276 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1278 return cb_info->req_id;
1281 API int pkgmgr_client_usr_deactivate_app(pkgmgr_client *pc, const char *appid,
1282 pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1285 int ret = PKGMGR_R_ECOMM;
1286 char *req_key = NULL;
1287 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1288 struct cb_info *cb_info;
1290 if (pc == NULL || appid == NULL) {
1291 ERR("invalid parameter");
1292 return PKGMGR_R_EINVAL;
1295 ret = pkgmgr_client_connection_send_request(client, "disable_app",
1296 g_variant_new("(us)", uid, appid), &result);
1297 if (ret != PKGMGR_R_OK) {
1298 ERR("request failed: %d", ret);
1302 g_variant_get(result, "(i&s)", &ret, &req_key);
1303 if (req_key == NULL) {
1304 g_variant_unref(result);
1305 return PKGMGR_R_ECOMM;
1307 if (ret != PKGMGR_R_OK) {
1308 g_variant_unref(result);
1312 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1314 if (cb_info == NULL) {
1315 g_variant_unref(result);
1316 return PKGMGR_R_ENOMEM;
1318 g_variant_unref(result);
1319 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1320 if (ret != PKGMGR_R_OK) {
1321 __free_cb_info(cb_info);
1324 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1326 return cb_info->req_id;
1329 API int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid,
1330 pkgmgr_app_handler app_event_cb, void *data)
1332 return pkgmgr_client_usr_deactivate_app(pc, appid, app_event_cb, data,
1336 API int pkgmgr_client_usr_deactivate_apps(pkgmgr_client *pc,
1337 const char **appids, int n_apps,
1338 pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1341 GVariantBuilder *builder;
1342 int ret = PKGMGR_R_ECOMM;
1343 char *req_key = NULL;
1344 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1345 struct cb_info *cb_info;
1348 if (pc == NULL || appids == NULL || n_apps < 1) {
1349 ERR("invalid parameter");
1350 return PKGMGR_R_EINVAL;
1353 if (client->pc_type != PC_REQUEST) {
1354 ERR("client type is not PC_REQUEST");
1355 return PKGMGR_R_EINVAL;
1358 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1359 for (i = 0; i < n_apps; i++)
1360 g_variant_builder_add(builder, "s", appids[i]);
1362 ret = pkgmgr_client_connection_send_request(client, "disable_apps",
1363 g_variant_new("(uas)", uid, builder), &result);
1364 g_variant_builder_unref(builder);
1365 if (ret != PKGMGR_R_OK) {
1366 ERR("request failed: %d", ret);
1370 g_variant_get(result, "(i&s)", &ret, &req_key);
1371 if (req_key == NULL) {
1372 g_variant_unref(result);
1373 return PKGMGR_R_ECOMM;
1375 if (ret != PKGMGR_R_OK) {
1376 g_variant_unref(result);
1380 cb_info = __create_app_event_cb_info(client, app_event_cb, data, req_key);
1381 if (cb_info == NULL) {
1382 g_variant_unref(result);
1383 return PKGMGR_R_ERROR;
1385 g_variant_unref(result);
1386 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1387 if (ret != PKGMGR_R_OK) {
1388 __free_cb_info(cb_info);
1391 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1393 return cb_info->req_id;
1396 API int pkgmgr_client_deactivate_apps(pkgmgr_client *pc, const char **appids,
1397 int n_apps, pkgmgr_app_handler app_event_cb, void *data)
1399 return pkgmgr_client_usr_deactivate_apps(pc, appids, n_apps,
1400 app_event_cb, data, _getuid());
1403 API int pkgmgr_client_deactivate_global_app_for_uid(pkgmgr_client *pc,
1404 const char *appid, pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1407 int ret = PKGMGR_R_ECOMM;
1408 char *req_key = NULL;
1409 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1410 struct cb_info *cb_info;
1412 if (pc == NULL || appid == NULL) {
1413 ERR("invalid parameter");
1414 return PKGMGR_R_EINVAL;
1417 ret = pkgmgr_client_connection_send_request(client,
1418 "disable_global_app_for_uid",
1419 g_variant_new("(us)", uid, appid), &result);
1420 if (ret != PKGMGR_R_OK) {
1421 ERR("request failed: %d", ret);
1425 g_variant_get(result, "(i&s)", &ret, &req_key);
1426 if (req_key == NULL) {
1427 g_variant_unref(result);
1428 return PKGMGR_R_ECOMM;
1430 if (ret != PKGMGR_R_OK) {
1431 g_variant_unref(result);
1435 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1437 if (cb_info == NULL) {
1438 g_variant_unref(result);
1439 return PKGMGR_R_ENOMEM;
1441 g_variant_unref(result);
1442 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1443 if (ret != PKGMGR_R_OK) {
1444 __free_cb_info(cb_info);
1447 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1449 return cb_info->req_id;
1452 API int pkgmgr_client_usr_clear_user_data(pkgmgr_client *pc,
1453 const char *pkg_type, const char *appid, pkgmgr_mode mode,
1458 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1460 if (pc == NULL || appid == NULL || uid == GLOBAL_USER) {
1461 ERR("invalid parameter");
1462 return PKGMGR_R_EINVAL;
1465 if (client->pc_type != PC_REQUEST) {
1466 ERR("client->pc_type is not PC_REQUEST");
1467 return PKGMGR_R_EINVAL;
1470 ret = pkgmgr_client_connection_send_request(client, "cleardata",
1471 g_variant_new("(us)", uid, appid), &result);
1472 if (ret != PKGMGR_R_OK) {
1473 ERR("request failed: %d", ret);
1477 g_variant_get(result, "(i)", &ret);
1478 g_variant_unref(result);
1483 API int pkgmgr_client_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
1484 const char *appid, pkgmgr_mode mode)
1486 return pkgmgr_client_usr_clear_user_data(pc, pkg_type, appid, mode,
1490 API int pkgmgr_client_set_status_type(pkgmgr_client *pc, int status_type)
1492 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1495 ERR("invalid parameter");
1496 return PKGMGR_R_EINVAL;
1499 client->status_type = status_type;
1504 API int pkgmgr_client_listen_status(pkgmgr_client *pc, pkgmgr_handler event_cb,
1508 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1509 struct cb_info *cb_info;
1511 if (pc == NULL || event_cb == NULL) {
1512 ERR("invalid parameter");
1513 return PKGMGR_R_EINVAL;
1516 if (client->pc_type != PC_LISTENING) {
1517 ERR("client->pc_type is not PC_LISTENING");
1518 return PKGMGR_R_EINVAL;
1521 cb_info = __create_event_cb_info(client, event_cb, data, NULL);
1522 if (cb_info == NULL)
1523 return PKGMGR_R_ENOMEM;
1524 cb_info->status_type = client->status_type;
1525 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1526 if (ret != PKGMGR_R_OK) {
1527 __free_cb_info(cb_info);
1530 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1532 return cb_info->req_id;
1535 API int pkgmgr_client_listen_app_status(pkgmgr_client *pc,
1536 pkgmgr_app_handler app_event_cb, void *data)
1539 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1540 struct cb_info *cb_info;
1542 if (pc == NULL || app_event_cb == NULL) {
1543 ERR("invalid parameter");
1544 return PKGMGR_R_EINVAL;
1547 if (client->pc_type != PC_LISTENING) {
1548 ERR("client->pc_type is not PC_LISTENING");
1549 return PKGMGR_R_EINVAL;
1552 cb_info = __create_app_event_cb_info(client, app_event_cb, data, NULL);
1553 if (cb_info == NULL)
1554 return PKGMGR_R_ENOMEM;
1555 cb_info->status_type = client->status_type;
1556 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1557 if (ret != PKGMGR_R_OK) {
1558 __free_cb_info(cb_info);
1561 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1563 return cb_info->req_id;
1566 API int pkgmgr_client_remove_listen_status(pkgmgr_client *pc)
1568 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1571 struct cb_info *cb_info;
1574 ERR("invalid parameter");
1575 return PKGMGR_R_EINVAL;
1578 /* unset all callback */
1579 tmp = client->cb_info_list;
1580 while (tmp != NULL) {
1582 cb_info = (struct cb_info *)tmp->data;
1583 pkgmgr_client_connection_unset_callback(pc, cb_info);
1584 client->cb_info_list = g_list_delete_link(client->cb_info_list,
1586 __free_cb_info(cb_info);
1593 API int pkgmgr_client_broadcast_status(pkgmgr_client *pc, const char *pkg_type,
1594 const char *pkgid, const char *key, const char *val)
1596 /* client cannot broadcast signal */
1600 /* TODO: deprecate(or remove) */
1601 API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type,
1602 int service_mode, pkgmgr_client *pc, const char *pkg_type,
1603 const char *pkgid, const char *custom_info,
1604 pkgmgr_handler event_cb, void *data)
1606 return pkgmgr_client_usr_request_service(service_type, service_mode,
1607 pc, pkg_type, pkgid, _getuid(), custom_info, event_cb,
1611 API int pkgmgr_client_usr_request_service(
1612 pkgmgr_request_service_type service_type, int service_mode,
1613 pkgmgr_client *pc, const char *pkg_type, const char *pkgid,
1614 uid_t uid, const char *custom_info, pkgmgr_handler event_cb,
1619 /* Check for NULL value of service type */
1620 retvm_if(service_type > PM_REQUEST_MAX, PKGMGR_R_EINVAL, "service type is not defined\n");
1621 retvm_if(service_type < 0, PKGMGR_R_EINVAL, "service type is error\n");
1623 switch (service_type) {
1624 case PM_REQUEST_MOVE:
1625 tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
1626 tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
1627 tryvm_if((service_mode < PM_MOVE_TO_INTERNAL) || (service_mode > PM_MOVE_TO_EXTENDED), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
1629 ret = __move_pkg_process(pc, pkgid, pkg_type, uid, (pkgmgr_move_type)service_mode, event_cb, data);
1632 case PM_REQUEST_GET_SIZE:
1633 tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
1634 tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
1635 tryvm_if((service_mode < PM_GET_TOTAL_SIZE) || (service_mode >= PM_GET_MAX), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
1637 ret = __get_size_process(pc, pkgid, uid, (pkgmgr_getsize_type)service_mode, event_cb, data);
1640 case PM_REQUEST_KILL_APP:
1641 case PM_REQUEST_CHECK_APP:
1642 tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
1643 tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
1645 ret = __check_app_process(service_type, pc, pkgid, uid, data);
1647 ERR("__check_app_process fail \n");
1654 ERR("Wrong Request\n");
1665 API int pkgmgr_client_usr_request_size_info(uid_t uid)
1668 struct pkgmgr_client *client;
1670 client = pkgmgr_client_new(PC_REQUEST);
1671 if (client == NULL) {
1672 ERR("out of memory");
1673 return PKGMGR_R_ENOMEM;
1676 ret = __request_size_info(client, uid);
1678 ERR("__request_size_info fail");
1680 pkgmgr_client_free(client);
1684 API int pkgmgr_client_request_size_info(void)
1686 /* get all package size (data, total) */
1687 return pkgmgr_client_usr_request_size_info(_getuid());
1690 API int pkgmgr_client_usr_clear_cache_dir(const char *pkgid, uid_t uid)
1694 struct pkgmgr_client_t *client;
1696 if (pkgid == NULL || uid == GLOBAL_USER) {
1697 ERR("invalid parameter");
1698 return PKGMGR_R_EINVAL;
1701 client = pkgmgr_client_new(PC_REQUEST);
1702 if (client == NULL) {
1703 ERR("out of memory");
1704 return PKGMGR_R_ENOMEM;
1707 ret = pkgmgr_client_connection_send_request(client, "clearcache",
1708 g_variant_new("(us)", uid, pkgid), &result);
1709 if (ret != PKGMGR_R_OK) {
1710 ERR("request failed: %d", ret);
1711 pkgmgr_client_free(client);
1715 g_variant_get(result, "(i)", &ret);
1716 g_variant_unref(result);
1717 pkgmgr_client_free(client);
1722 API int pkgmgr_client_clear_cache_dir(const char *pkgid)
1724 return pkgmgr_client_usr_clear_cache_dir(pkgid, _getuid());
1727 API int pkgmgr_client_clear_usr_all_cache_dir(uid_t uid)
1729 return pkgmgr_client_usr_clear_cache_dir(PKG_CLEAR_ALL_CACHE, uid);
1732 API int pkgmgr_client_clear_all_cache_dir(void)
1734 return pkgmgr_client_usr_clear_cache_dir(
1735 PKG_CLEAR_ALL_CACHE, _getuid());
1738 API int pkgmgr_client_get_size(pkgmgr_client *pc, const char *pkgid,
1739 pkgmgr_getsize_type get_type, pkgmgr_handler event_cb,
1742 return pkgmgr_client_usr_get_size(pc, pkgid, get_type, event_cb, data,
1746 /* TODO: deprecate(or remove) */
1747 API int pkgmgr_client_usr_get_size(pkgmgr_client *pc, const char *pkgid,
1748 pkgmgr_getsize_type get_type, pkgmgr_handler event_cb,
1749 void *data, uid_t uid)
1752 int ret = PKGMGR_R_ECOMM;
1753 char *req_key = NULL;
1754 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1755 struct cb_info *cb_info;
1757 if (pc == NULL || pkgid == NULL || event_cb == NULL) {
1758 ERR("invalid parameter");
1759 return PKGMGR_R_EINVAL;
1762 if (client->pc_type != PC_REQUEST) {
1763 ERR("client->pc_type is not PC_REQUEST");
1764 return PKGMGR_R_EINVAL;
1768 if (strcmp(pkgid, PKG_SIZE_INFO_TOTAL) == 0)
1769 get_type = PM_GET_TOTAL_PKG_SIZE_INFO;
1771 get_type = PM_GET_PKG_SIZE_INFO;
1773 ret = pkgmgr_client_connection_send_request(client, "getsize",
1774 g_variant_new("(usi)", uid, pkgid, get_type), &result);
1775 if (ret != PKGMGR_R_OK) {
1776 ERR("request failed: %d", ret);
1780 g_variant_get(result, "(i&s)", &ret, &req_key);
1781 if (req_key == NULL) {
1782 g_variant_unref(result);
1783 return PKGMGR_R_ECOMM;
1785 if (ret != PKGMGR_R_OK) {
1786 g_variant_unref(result);
1790 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
1791 if (cb_info == NULL) {
1792 g_variant_unref(result);
1793 return PKGMGR_R_ENOMEM;
1795 g_variant_unref(result);
1796 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1797 if (ret != PKGMGR_R_OK) {
1798 __free_cb_info(cb_info);
1801 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1806 API int pkgmgr_client_usr_get_package_size_info(pkgmgr_client *pc,
1807 const char *pkgid, pkgmgr_pkg_size_info_receive_cb event_cb,
1808 void *user_data, uid_t uid)
1811 int ret = PKGMGR_R_ECOMM;
1812 char *req_key = NULL;
1814 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1815 struct cb_info *cb_info;
1817 if (pc == NULL || pkgid == NULL || event_cb == NULL) {
1818 ERR("invalid parameter");
1819 return PKGMGR_R_EINVAL;
1822 if (client->pc_type != PC_REQUEST) {
1823 ERR("client->pc_type is not PC_REQUEST");
1824 return PKGMGR_R_EINVAL;
1827 if (strcmp(pkgid, PKG_SIZE_INFO_TOTAL) == 0)
1828 get_type = PM_GET_TOTAL_PKG_SIZE_INFO;
1830 get_type = PM_GET_PKG_SIZE_INFO;
1832 ret = pkgmgr_client_connection_send_request(client, "getsize",
1833 g_variant_new("(usi)", uid, pkgid, get_type), &result);
1834 if (ret != PKGMGR_R_OK) {
1835 ERR("request failed: %d", ret);
1839 g_variant_get(result, "(i&s)", &ret, &req_key);
1840 if (req_key == NULL) {
1841 g_variant_unref(result);
1842 return PKGMGR_R_ECOMM;
1844 if (ret != PKGMGR_R_OK) {
1845 g_variant_unref(result);
1849 cb_info = __create_size_info_cb_info(client, event_cb, user_data,
1851 if (cb_info == NULL) {
1852 g_variant_unref(result);
1853 return PKGMGR_R_ENOMEM;
1855 g_variant_unref(result);
1856 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1857 if (ret != PKGMGR_R_OK) {
1858 __free_cb_info(cb_info);
1861 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1866 API int pkgmgr_client_get_package_size_info(pkgmgr_client *pc,
1867 const char *pkgid, pkgmgr_pkg_size_info_receive_cb event_cb,
1870 return pkgmgr_client_usr_get_package_size_info(pc, pkgid, event_cb,
1871 user_data, _getuid());
1874 API int pkgmgr_client_usr_get_total_package_size_info(pkgmgr_client *pc,
1875 pkgmgr_total_pkg_size_info_receive_cb event_cb,
1876 void *user_data, uid_t uid)
1877 { /* total package size info */
1878 return pkgmgr_client_usr_get_package_size_info(pc, PKG_SIZE_INFO_TOTAL,
1879 (pkgmgr_pkg_size_info_receive_cb)event_cb,
1883 API int pkgmgr_client_get_total_package_size_info(pkgmgr_client *pc,
1884 pkgmgr_total_pkg_size_info_receive_cb event_cb, void *user_data)
1886 return pkgmgr_client_usr_get_package_size_info(pc, PKG_SIZE_INFO_TOTAL,
1887 (pkgmgr_pkg_size_info_receive_cb)event_cb,
1888 user_data, _getuid());
1891 API int pkgmgr_client_generate_license_request(pkgmgr_client *pc,
1892 const char *resp_data, char **req_data, char **license_url)
1898 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1900 if (pc == NULL || resp_data == NULL || req_data == NULL ||
1901 license_url == NULL) {
1902 ERR("invalid parameter");
1903 return PKGMGR_R_EINVAL;
1906 if (client->pc_type != PC_REQUEST) {
1907 ERR("client->pc_type is not PC_REQUEST");
1908 return PKGMGR_R_EINVAL;
1911 ret = pkgmgr_client_connection_send_request(client,
1912 "generate_license_request",
1913 g_variant_new("(s)", resp_data), &result);
1914 if (ret != PKGMGR_R_OK) {
1915 ERR("request failed: %d", ret);
1919 g_variant_get(result, "(i&s&s)", &ret, &data, &url);
1920 if (ret != PKGMGR_R_OK) {
1921 ERR("generate_license_request failed: %d", ret);
1922 g_variant_unref(result);
1926 *req_data = strdup(data);
1927 *license_url = strdup(url);
1929 g_variant_unref(result);
1934 API int pkgmgr_client_register_license(pkgmgr_client *pc, const char *resp_data)
1938 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1940 if (pc == NULL || resp_data == NULL) {
1941 ERR("invalid parameter");
1942 return PKGMGR_R_EINVAL;
1945 if (client->pc_type != PC_REQUEST) {
1946 ERR("client->pc_type is not PC_REQUEST");
1947 return PKGMGR_R_EINVAL;
1950 ret = pkgmgr_client_connection_send_request(client, "register_license",
1951 g_variant_new("(s)", resp_data), &result);
1952 if (ret != PKGMGR_R_OK) {
1953 ERR("request failed: %d", ret);
1957 g_variant_get(result, "(i)", &ret);
1958 g_variant_unref(result);
1959 if (ret != PKGMGR_R_OK)
1960 ERR("register license failed: %d", ret);
1965 API int pkgmgr_client_decrypt_package(pkgmgr_client *pc,
1966 const char *drm_file_path, const char *decrypted_file_path)
1970 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1972 if (pc == NULL || drm_file_path == NULL ||
1973 decrypted_file_path == NULL) {
1974 ERR("invalid parameter");
1975 return PKGMGR_R_EINVAL;
1978 if (client->pc_type != PC_REQUEST) {
1979 ERR("client->pc_type is not PC_REQUEST");
1980 return PKGMGR_R_EINVAL;
1983 ret = pkgmgr_client_connection_send_request(client, "decrypt_package",
1984 g_variant_new("(ss)", drm_file_path,
1985 decrypted_file_path), &result);
1986 if (ret != PKGMGR_R_OK) {
1987 ERR("request failed: %d", ret);
1991 g_variant_get(result, "(i)", &ret);
1992 g_variant_unref(result);
1993 if (ret != PKGMGR_R_OK)
1994 ERR("decrypt_package failed: %d", ret);
1999 API int pkgmgr_client_enable_splash_screen(pkgmgr_client *pc, const char *appid)
2001 return pkgmgr_client_usr_enable_splash_screen(pc, appid, _getuid());
2004 API int pkgmgr_client_usr_enable_splash_screen(pkgmgr_client *pc,
2005 const char *appid, uid_t uid)
2009 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2011 if (pc == NULL || appid == NULL) {
2012 ERR("Invalid parameter");
2013 return PKGMGR_R_EINVAL;
2016 ret = pkgmgr_client_connection_send_request(client,
2017 "enable_app_splash_screen",
2018 g_variant_new("(us)", uid, appid), &result);
2019 if (ret != PKGMGR_R_OK) {
2020 ERR("request failed: %d", ret);
2024 g_variant_get(result, "(i)", &ret);
2025 g_variant_unref(result);
2026 if (ret != PKGMGR_R_OK)
2027 ERR("enable splash screen failed: %d", ret);
2032 API int pkgmgr_client_disable_splash_screen(pkgmgr_client *pc,
2035 return pkgmgr_client_usr_disable_splash_screen(pc, appid,
2039 API int pkgmgr_client_usr_disable_splash_screen(pkgmgr_client *pc,
2040 const char *appid, uid_t uid)
2044 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2046 if (pc == NULL || appid == NULL) {
2047 ERR("Invalid parameter");
2048 return PKGMGR_R_EINVAL;
2051 ret = pkgmgr_client_connection_send_request(client,
2052 "disable_app_splash_screen",
2053 g_variant_new("(us)", uid, appid), &result);
2054 if (ret != PKGMGR_R_OK) {
2055 ERR("request failed: %d", ret);
2059 g_variant_get(result, "(i)", &ret);
2060 g_variant_unref(result);
2061 if (ret != PKGMGR_R_OK)
2062 ERR("disable splash screen failed: %d", ret);
2067 static int __set_pkg_restriction_mode(pkgmgr_client *pc, const char *pkgid,
2068 int mode, uid_t uid)
2071 int ret = PKGMGR_R_ECOMM;
2072 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2074 if (pc == NULL || pkgid == NULL || strlen(pkgid) == 0 || mode <= 0) {
2075 ERR("invalid parameter");
2076 return PKGMGR_R_EINVAL;
2079 ret = pkgmgr_client_connection_send_request(client,
2080 "set_restriction_mode",
2081 g_variant_new("(usi)", uid, pkgid, mode), &result);
2082 if (ret != PKGMGR_R_OK) {
2083 ERR("request failed: %d", ret);
2087 g_variant_get(result, "(i)", &ret);
2088 g_variant_unref(result);
2093 API int pkgmgr_client_usr_set_pkg_restriction_mode(pkgmgr_client *pc,
2094 const char *pkgid, int mode, uid_t uid)
2096 return __set_pkg_restriction_mode(pc, pkgid, mode, uid);
2099 API int pkgmgr_client_set_pkg_restriction_mode(pkgmgr_client *pc,
2100 const char *pkgid, int mode)
2102 return pkgmgr_client_usr_set_pkg_restriction_mode(pc, pkgid, mode,
2106 static int __unset_pkg_restriction_mode(pkgmgr_client *pc, const char *pkgid,
2107 int mode, uid_t uid)
2110 int ret = PKGMGR_R_ECOMM;
2111 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2113 if (pc == NULL || pkgid == NULL || strlen(pkgid) == 0 || mode <= 0) {
2114 ERR("invalid parameter");
2115 return PKGMGR_R_EINVAL;
2118 ret = pkgmgr_client_connection_send_request(client,
2119 "unset_restriction_mode",
2120 g_variant_new("(usi)", uid, pkgid, mode), &result);
2121 if (ret != PKGMGR_R_OK) {
2122 ERR("request failed: %d", ret);
2126 g_variant_get(result, "(i)", &ret);
2127 g_variant_unref(result);
2133 API int pkgmgr_client_usr_unset_pkg_restriction_mode(pkgmgr_client *pc,
2134 const char *pkgid, int mode, uid_t uid)
2136 return __unset_pkg_restriction_mode(pc, pkgid, mode, uid);
2139 API int pkgmgr_client_unset_pkg_restriction_mode(pkgmgr_client *pc,
2140 const char *pkgid, int mode)
2142 return pkgmgr_client_usr_unset_pkg_restriction_mode(pc, pkgid, mode,
2146 static int __get_pkg_restriction_mode(pkgmgr_client *pc, const char *pkgid,
2147 int *mode, uid_t uid)
2150 int ret = PKGMGR_R_ECOMM;
2152 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2154 if (pc == NULL || pkgid == NULL || strlen(pkgid) == 0) {
2155 ERR("invalid parameter");
2156 return PKGMGR_R_EINVAL;
2159 ret = pkgmgr_client_connection_send_request(client,
2160 "get_restriction_mode",
2161 g_variant_new("(us)", uid, pkgid), &result);
2162 if (ret != PKGMGR_R_OK) {
2163 ERR("request failed: %d", ret);
2167 g_variant_get(result, "(ii)", &m, &ret);
2168 g_variant_unref(result);
2169 if (ret != PKGMGR_R_OK)
2177 API int pkgmgr_client_usr_get_pkg_restriction_mode(pkgmgr_client *pc,
2178 const char *pkgid, int *mode, uid_t uid)
2180 return __get_pkg_restriction_mode(pc, pkgid, mode, uid);
2183 API int pkgmgr_client_get_pkg_restriction_mode(pkgmgr_client *pc,
2184 const char *pkgid, int *mode)
2186 return pkgmgr_client_usr_get_pkg_restriction_mode(pc, pkgid, mode,
2190 API int pkgmgr_client_usr_set_restriction_mode(pkgmgr_client *pc, int mode,
2194 int ret = PKGMGR_R_ECOMM;
2195 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2198 ERR("invalid parameter");
2199 return PKGMGR_R_EINVAL;
2202 ret = pkgmgr_client_connection_send_request(client,
2203 "set_restriction_mode",
2204 g_variant_new("(usi)", uid, "", mode), &result);
2205 if (ret != PKGMGR_R_OK) {
2206 ERR("request failed: %d", ret);
2210 g_variant_get(result, "(i)", &ret);
2211 g_variant_unref(result);
2216 API int pkgmgr_client_set_restriction_mode(pkgmgr_client *pc, int mode)
2218 return pkgmgr_client_usr_set_restriction_mode(pc, mode, _getuid());
2221 API int pkgmgr_client_usr_unset_restriction_mode(pkgmgr_client *pc, int mode,
2225 int ret = PKGMGR_R_ECOMM;
2226 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2229 ERR("invalid parameter");
2230 return PKGMGR_R_EINVAL;
2233 ret = pkgmgr_client_connection_send_request(client,
2234 "unset_restriction_mode",
2235 g_variant_new("(usi)", uid, "", mode), &result);
2236 if (ret != PKGMGR_R_OK) {
2237 ERR("request failed: %d", ret);
2241 g_variant_get(result, "(i)", &ret);
2242 g_variant_unref(result);
2247 API int pkgmgr_client_unset_restriction_mode(pkgmgr_client *pc, int mode)
2249 return pkgmgr_client_usr_unset_restriction_mode(pc, mode, _getuid());
2252 API int pkgmgr_client_usr_get_restriction_mode(pkgmgr_client *pc,
2253 int *mode, uid_t uid)
2256 int ret = PKGMGR_R_ECOMM;
2258 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2261 ERR("invalid parameter");
2262 return PKGMGR_R_EINVAL;
2265 ret = pkgmgr_client_connection_send_request(client,
2266 "get_restriction_mode",
2267 g_variant_new("(us)", uid, ""), &result);
2268 if (ret != PKGMGR_R_OK) {
2269 ERR("request failed: %d", ret);
2273 g_variant_get(result, "(ii)", &m, &ret);
2274 g_variant_unref(result);
2275 if (ret != PKGMGR_R_OK)
2283 API int pkgmgr_client_get_restriction_mode(pkgmgr_client *pc, int *mode)
2285 return pkgmgr_client_usr_get_restriction_mode(pc, mode, _getuid());
2288 API pkgmgr_info *pkgmgr_client_check_pkginfo_from_file(const char *pkg_path)
2291 pkg_plugin_set *plugin_set;
2292 package_manager_pkg_detail_info_t *info;
2295 if (pkg_path == NULL) {
2296 ERR("invalid parameter");
2300 pkg_type = __get_type_from_path(pkg_path);
2301 if (pkg_type == NULL) {
2302 ERR("cannot get pkg type");
2306 plugin_set = _package_manager_load_library(pkg_type);
2307 if (plugin_set == NULL) {
2308 ERR("failed to load library for %s", pkg_type);
2313 info = calloc(1, sizeof(package_manager_pkg_detail_info_t));
2315 ERR("out of memory");
2320 ret = plugin_set->get_pkg_detail_info_from_package(pkg_path, info);
2322 ERR("get_pkg_detail_info_from_package failed");
2330 return (pkgmgr_info *)info;
2333 API int pkgmgr_client_free_pkginfo(pkgmgr_info *info)
2335 package_manager_pkg_detail_info_t *pkg_info =
2336 (package_manager_pkg_detail_info_t *)info;
2339 ERR("invalid parameter");
2340 return PKGMGR_R_EINVAL;
2343 g_list_free_full(pkg_info->privilege_list, free);
2344 free(pkg_info->icon_buf);
2350 API int pkgmgr_client_usr_set_app_label(pkgmgr_client *pc, char *appid,
2351 char *label, uid_t uid)
2355 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2357 if (pc == NULL || appid == NULL || label == NULL) {
2358 ERR("Invalid parameter");
2359 return PKGMGR_R_EINVAL;
2362 ret = pkgmgr_client_connection_send_request(client,
2364 g_variant_new("(uss)", uid, appid, label), &result);
2365 if (ret != PKGMGR_R_OK) {
2366 ERR("Request failed: %d", ret);
2370 g_variant_get(result, "(i)", &ret);
2371 g_variant_unref(result);
2376 API int pkgmgr_client_set_app_label(pkgmgr_client *pc, char *appid, char *label)
2378 return pkgmgr_client_usr_set_app_label(pc, appid, label, _getuid());
2381 API int pkgmgr_client_usr_set_app_icon(pkgmgr_client *pc, char *appid,
2382 char *icon_path, uid_t uid)
2386 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2388 if (pc == NULL || appid == NULL || icon_path == NULL) {
2389 ERR("Invalid parameter");
2390 return PKGMGR_R_EINVAL;
2393 if (access(icon_path, F_OK) != 0) {
2394 ERR("failed to access: %s", icon_path);
2395 return PKGMGR_R_EINVAL;
2398 ret = pkgmgr_client_connection_send_request(client,
2400 g_variant_new("(uss)", uid, appid, icon_path), &result);
2401 if (ret != PKGMGR_R_OK) {
2402 ERR("Request failed: %d", ret);
2406 g_variant_get(result, "(i)", &ret);
2407 g_variant_unref(result);
2412 API int pkgmgr_client_set_app_icon(pkgmgr_client *pc, char *appid, char *icon_path)
2414 return pkgmgr_client_usr_set_app_icon(pc, appid, icon_path, _getuid());
2417 API int pkgmgr_client_set_debug_mode(pkgmgr_client *pc, bool debug_mode)
2419 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2422 ERR("invalid parameter");
2423 return PKGMGR_R_EINVAL;
2426 client->debug_mode = debug_mode;
2431 API int pkgmgr_client_usr_migrate_external_image(pkgmgr_client *pc,
2432 const char *pkgid, uid_t uid)
2435 int ret = PKGMGR_R_ECOMM;
2436 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2439 ERR("invalid parameter");
2440 return PKGMGR_R_EINVAL;
2443 ret = pkgmgr_client_connection_send_request(client,
2444 "migrate_external_image",
2445 g_variant_new("(us)", uid, pkgid), &result);
2446 if (ret != PKGMGR_R_OK) {
2447 ERR("request failed: %d", ret);
2451 g_variant_get(result, "(i)", &ret);
2452 g_variant_unref(result);