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;
157 g_list_free(cb_info->sid_list);
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 API pkgmgr_client *pkgmgr_client_new(pkgmgr_client_type pc_type)
281 struct pkgmgr_client_t *client;
283 if (pc_type == PC_BROADCAST) {
284 ERR("broadcast type is not supported");
288 if (pc_type != PC_REQUEST && pc_type != PC_LISTENING) {
289 ERR("invalid parameter");
293 client = calloc(1, sizeof(struct pkgmgr_client_t));
294 if (client == NULL) {
295 ERR("out of memory");
299 client->pc_type = pc_type;
300 client->status_type = PKGMGR_CLIENT_STATUS_ALL;
302 if (pkgmgr_client_connection_connect(client) != PKGMGR_R_OK) {
307 return (pkgmgr_client *)client;
310 API int pkgmgr_client_free(pkgmgr_client *pc)
312 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
315 ERR("invalid argument");
316 return PKGMGR_R_EINVAL;
319 pkgmgr_client_remove_listen_status(client);
320 pkgmgr_client_connection_disconnect(client);
321 if (client->tep_path)
322 free(client->tep_path);
328 struct manifest_and_type type_map[] = {
329 { "res/wgt/config.xml", "wgt" },
330 { "config.xml", "wgt" },
331 { "tizen-manifest.xml", "tpk" },
335 static char *__get_type_from_path(const char *pkg_path)
337 const char *type = NULL;
341 uf = unzOpen(pkg_path);
343 ERR("failed to open zip file %s", pkg_path);
347 for (i = 0; type_map[i].manifest != NULL; i++) {
348 if (unzLocateFile(uf, type_map[i].manifest, 0) == UNZ_OK) {
349 DBG("pkgtype of %s: [%s]", pkg_path, type_map[i].type);
350 type = type_map[i].type;
356 return type ? strdup(type) : NULL;
359 API int pkgmgr_client_set_tep_path(pkgmgr_client *pc, const char *tep_path,
362 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *) pc;
364 if (pc == NULL || tep_path == NULL) {
365 ERR("invalied parameter");
366 return PKGMGR_R_EINVAL;
369 if (client->tep_path)
370 free(client->tep_path);
372 client->tep_path = strdup(tep_path);
373 client->tep_move = tep_move;
378 API int pkgmgr_client_usr_install_packages(pkgmgr_client *pc,
379 const char **pkg_paths, int n_pkgs, pkgmgr_handler event_cb,
380 void *data, uid_t uid)
383 GVariantBuilder *pkgs_builder;
385 GVariantBuilder *args_builder;
388 char *req_key = NULL;
389 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
390 struct cb_info *cb_info;
393 if (pc == NULL || pkg_paths == NULL || n_pkgs < 1) {
394 ERR("invalid parameter");
395 return PKGMGR_R_EINVAL;
398 if (client->pc_type != PC_REQUEST) {
399 ERR("client type is not PC_REQUEST");
400 return PKGMGR_R_EINVAL;
403 for (i = 0; i < n_pkgs; i++) {
404 if (access(pkg_paths[i], F_OK) != 0) {
405 ERR("failed to access: %s", pkg_paths[i]);
406 return PKGMGR_R_EINVAL;
410 pkgs_builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
411 for (i = 0; i < n_pkgs; i++)
412 g_variant_builder_add(pkgs_builder, "s", pkg_paths[i]);
413 pkgs = g_variant_new("as", pkgs_builder);
414 g_variant_builder_unref(pkgs_builder);
416 args_builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
417 if (client->debug_mode)
418 g_variant_builder_add(args_builder, "s", "-G");
419 if (client->skip_optimization)
420 g_variant_builder_add(args_builder, "s", "-S");
421 args = g_variant_new("as", args_builder);
422 g_variant_builder_unref(args_builder);
424 ret = pkgmgr_client_connection_send_request(client, "install_pkgs",
425 g_variant_new("(u@as@as)", uid, pkgs, args), &result);
426 if (ret != PKGMGR_R_OK) {
427 ERR("request failed: %d", ret);
431 g_variant_get(result, "(i&s)", &ret, &req_key);
432 if (req_key == NULL) {
433 g_variant_unref(result);
434 return PKGMGR_R_ECOMM;
436 if (ret != PKGMGR_R_OK) {
437 g_variant_unref(result);
441 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
442 if (cb_info == NULL) {
443 g_variant_unref(result);
444 return PKGMGR_R_ERROR;
446 g_variant_unref(result);
447 ret = pkgmgr_client_connection_set_callback(client, cb_info);
448 if (ret != PKGMGR_R_OK) {
449 __free_cb_info(cb_info);
452 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
454 return cb_info->req_id;
457 API int pkgmgr_client_install_packages(pkgmgr_client *pc,
458 const char **pkg_paths, int n_pkgs, pkgmgr_handler event_cb,
461 return pkgmgr_client_usr_install_packages(pc, pkg_paths, n_pkgs,
462 event_cb, data, _getuid());
465 API int pkgmgr_client_usr_install(pkgmgr_client *pc, const char *pkg_type,
466 const char *descriptor_path, const char *pkg_path,
467 const char *optional_data, pkgmgr_mode mode,
468 pkgmgr_handler event_cb, void *data, uid_t uid)
471 int ret = PKGMGR_R_ECOMM;
472 char *req_key = NULL;
473 GVariantBuilder *builder = NULL;
474 GVariant *args = NULL;
475 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
476 struct cb_info *cb_info;
478 if (pc == NULL || pkg_path == NULL) {
479 ERR("invalid parameter");
480 return PKGMGR_R_EINVAL;
483 if (client->pc_type != PC_REQUEST) {
484 ERR("client type is not PC_REQUEST");
485 return PKGMGR_R_EINVAL;
488 if (access(pkg_path, F_OK) != 0) {
489 ERR("failed to access: %s", pkg_path);
490 return PKGMGR_R_EINVAL;
493 if (client->tep_path != NULL && access(client->tep_path, F_OK) != 0) {
494 ERR("failed to access: %s", client->tep_path);
495 return PKGMGR_R_EINVAL;
498 /* build arguments */
499 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
500 if (client->tep_path) {
501 g_variant_builder_add(builder, "s", "-e");
502 g_variant_builder_add(builder, "s", client->tep_path);
503 g_variant_builder_add(builder, "s", "-M");
504 /* TODO: revise tep_move */
505 g_variant_builder_add(builder, "s",
506 client->tep_move ? "tep_move" : "tep_copy");
508 if (client->debug_mode)
509 g_variant_builder_add(builder, "s", "-G");
510 if (client->skip_optimization)
511 g_variant_builder_add(builder, "s", "-S");
513 args = g_variant_new("as", builder);
514 g_variant_builder_unref(builder);
516 ret = pkgmgr_client_connection_send_request(client, "install",
517 g_variant_new("(uss@as)", uid, pkg_type ? pkg_type : "",
520 if (ret != PKGMGR_R_OK) {
521 ERR("request failed: %d", ret);
525 g_variant_get(result, "(i&s)", &ret, &req_key);
526 if (req_key == NULL) {
527 g_variant_unref(result);
528 return PKGMGR_R_ECOMM;
530 if (ret != PKGMGR_R_OK) {
531 g_variant_unref(result);
535 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
536 if (cb_info == NULL) {
537 g_variant_unref(result);
538 return PKGMGR_R_ENOMEM;
540 g_variant_unref(result);
541 ret = pkgmgr_client_connection_set_callback(client, cb_info);
542 if (ret != PKGMGR_R_OK) {
543 __free_cb_info(cb_info);
546 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
548 return cb_info->req_id;
551 API int pkgmgr_client_install(pkgmgr_client *pc, const char *pkg_type,
552 const char *descriptor_path, const char *pkg_path,
553 const char *optional_data, pkgmgr_mode mode,
554 pkgmgr_handler event_cb, void *data)
556 return pkgmgr_client_usr_install(pc, pkg_type, descriptor_path,
557 pkg_path, optional_data, mode, event_cb, data,
561 API int pkgmgr_client_reinstall(pkgmgr_client *pc, const char *pkg_type,
562 const char *pkgid, const char *optional_data, pkgmgr_mode mode,
563 pkgmgr_handler event_cb, void *data)
565 return pkgmgr_client_usr_reinstall(pc, pkg_type, pkgid, optional_data,
566 mode, event_cb, data, _getuid());
569 API int pkgmgr_client_usr_reinstall(pkgmgr_client *pc, const char *pkg_type,
570 const char *pkgid, const char *optional_data, pkgmgr_mode mode,
571 pkgmgr_handler event_cb, void *data, uid_t uid)
574 int ret = PKGMGR_R_ECOMM;
575 char *req_key = NULL;
576 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
577 struct cb_info *cb_info;
579 if (pc == NULL || pkgid == NULL) {
580 ERR("invalid parameter");
581 return PKGMGR_R_EINVAL;
584 if (client->pc_type != PC_REQUEST) {
585 ERR("client->pc_type is not PC_REQUEST");
586 return PKGMGR_R_EINVAL;
589 ret = pkgmgr_client_connection_send_request(client, "reinstall",
590 g_variant_new("(us)", uid, pkgid), &result);
591 if (ret != PKGMGR_R_OK) {
592 ERR("request failed: %d", ret);
596 g_variant_get(result, "(i&s)", &ret, &req_key);
597 if (req_key == NULL) {
598 g_variant_unref(result);
599 return PKGMGR_R_ECOMM;
601 if (ret != PKGMGR_R_OK) {
602 g_variant_unref(result);
606 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
607 if (cb_info == NULL) {
608 g_variant_unref(result);
609 return PKGMGR_R_ENOMEM;
611 g_variant_unref(result);
612 ret = pkgmgr_client_connection_set_callback(client, cb_info);
613 if (ret != PKGMGR_R_OK) {
614 __free_cb_info(cb_info);
617 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
619 return cb_info->req_id;
622 API int pkgmgr_client_usr_mount_install_packages(pkgmgr_client *pc,
623 const char **pkg_paths, int n_pkgs, pkgmgr_handler event_cb,
624 void *data, uid_t uid)
627 GVariantBuilder *pkgs_builder;
629 int ret = PKGMGR_R_ECOMM;
630 char *req_key = NULL;
631 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
632 struct cb_info *cb_info;
635 if (pc == NULL || pkg_paths == NULL || n_pkgs < 1) {
636 ERR("invalid parameter");
637 return PKGMGR_R_EINVAL;
640 if (client->pc_type != PC_REQUEST) {
641 ERR("client->pc_type is not PC_REQUEST");
642 return PKGMGR_R_EINVAL;
645 for (i = 0; i < n_pkgs; i++) {
646 if (access(pkg_paths[i], F_OK) != 0) {
647 ERR("failed to access: %s", pkg_paths[i]);
648 return PKGMGR_R_EINVAL;
652 pkgs_builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
653 for (i = 0; i < n_pkgs; i++)
654 g_variant_builder_add(pkgs_builder, "s", pkg_paths[i]);
655 pkgs = g_variant_new("as", pkgs_builder);
656 g_variant_builder_unref(pkgs_builder);
658 ret = pkgmgr_client_connection_send_request(client,
659 "mount_install_pkgs",
660 g_variant_new("(u@as)", uid, pkgs), &result);
661 if (ret != PKGMGR_R_OK) {
662 ERR("request failed: %d", ret);
666 g_variant_get(result, "(i&s)", &ret, &req_key);
667 if (req_key == NULL) {
668 g_variant_unref(result);
669 return PKGMGR_R_ECOMM;
671 if (ret != PKGMGR_R_OK) {
672 g_variant_unref(result);
676 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
677 if (cb_info == NULL) {
678 g_variant_unref(result);
679 return PKGMGR_R_ENOMEM;
681 g_variant_unref(result);
682 ret = pkgmgr_client_connection_set_callback(client, cb_info);
683 if (ret != PKGMGR_R_OK) {
684 __free_cb_info(cb_info);
687 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
689 return cb_info->req_id;
692 API int pkgmgr_client_mount_install_packages(pkgmgr_client *pc,
693 const char **pkg_paths, int n_pkgs, pkgmgr_handler event_cb,
696 return pkgmgr_client_usr_mount_install_packages(pc, pkg_paths, n_pkgs,
697 event_cb, data, _getuid());
700 API int pkgmgr_client_usr_mount_install(pkgmgr_client *pc, const char *pkg_type,
701 const char *descriptor_path, const char *pkg_path,
702 const char *optional_data, pkgmgr_mode mode,
703 pkgmgr_handler event_cb, void *data, uid_t uid)
706 int ret = PKGMGR_R_ECOMM;
707 char *req_key = NULL;
708 GVariantBuilder *builder = NULL;
709 GVariant *args = NULL;
710 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
711 struct cb_info *cb_info;
713 if (pc == NULL || pkg_path == NULL) {
714 ERR("invalid parameter");
715 return PKGMGR_R_EINVAL;
718 if (client->pc_type != PC_REQUEST) {
719 ERR("client->pc_type is not PC_REQUEST");
720 return PKGMGR_R_EINVAL;
723 if (access(pkg_path, F_OK) != 0) {
724 ERR("failed to access: %s", pkg_path);
725 return PKGMGR_R_EINVAL;
728 if (client->tep_path != NULL && access(client->tep_path, F_OK) != 0) {
729 ERR("failed to access: %s", client->tep_path);
730 return PKGMGR_R_EINVAL;
733 /* build arguments */
734 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
735 if (client->tep_path) {
736 g_variant_builder_add(builder, "s", "-e");
737 g_variant_builder_add(builder, "s", client->tep_path);
738 g_variant_builder_add(builder, "s", "-M");
739 /* TODO: revise tep_move */
740 g_variant_builder_add(builder, "s",
741 client->tep_move ? "tep_move" : "tep_copy");
744 args = g_variant_new("as", builder);
745 g_variant_builder_unref(builder);
747 ret = pkgmgr_client_connection_send_request(client, "mount_install",
748 g_variant_new("(uss@as)", uid, pkg_type ? pkg_type : "",
751 if (ret != PKGMGR_R_OK) {
752 ERR("request failed: %d", ret);
756 g_variant_get(result, "(i&s)", &ret, &req_key);
757 if (req_key == NULL) {
758 g_variant_unref(result);
759 return PKGMGR_R_ECOMM;
761 if (ret != PKGMGR_R_OK) {
762 g_variant_unref(result);
766 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
767 if (cb_info == NULL) {
768 g_variant_unref(result);
769 return PKGMGR_R_ENOMEM;
771 g_variant_unref(result);
772 ret = pkgmgr_client_connection_set_callback(client, cb_info);
773 if (ret != PKGMGR_R_OK) {
774 __free_cb_info(cb_info);
777 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
779 return cb_info->req_id;
782 API int pkgmgr_client_mount_install(pkgmgr_client *pc, const char *pkg_type,
783 const char *descriptor_path, const char *pkg_path,
784 const char *optional_data, pkgmgr_mode mode,
785 pkgmgr_handler event_cb, void *data)
787 return pkgmgr_client_usr_mount_install(pc, pkg_type, descriptor_path,
788 pkg_path, optional_data, mode, event_cb, data,
792 API int pkgmgr_client_usr_uninstall_packages(pkgmgr_client *pc,
793 const char **pkgids, int n_pkgs, pkgmgr_handler event_cb,
794 void *data, uid_t uid)
797 GVariantBuilder *pkgs_builder;
799 int ret = PKGMGR_R_ECOMM;
800 char *req_key = NULL;
801 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
802 struct cb_info *cb_info;
805 if (pc == NULL || pkgids == NULL || n_pkgs < 1) {
806 ERR("invalid parameter");
807 return PKGMGR_R_EINVAL;
810 if (client->pc_type != PC_REQUEST) {
811 ERR("client->pc_type is not PC_REQUEST");
812 return PKGMGR_R_EINVAL;
815 pkgs_builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
816 for (i = 0; i < n_pkgs; i++)
817 g_variant_builder_add(pkgs_builder, "s", pkgids[i]);
818 pkgs = g_variant_new("as", pkgs_builder);
819 g_variant_builder_unref(pkgs_builder);
821 ret = pkgmgr_client_connection_send_request(client, "uninstall_pkgs",
822 g_variant_new("(u@as)", uid, pkgs), &result);
823 if (ret != PKGMGR_R_OK) {
824 ERR("request failed: %d", ret);
828 g_variant_get(result, "(i&s)", &ret, &req_key);
829 if (req_key == NULL) {
830 g_variant_unref(result);
831 return PKGMGR_R_ECOMM;
833 if (ret != PKGMGR_R_OK) {
834 g_variant_unref(result);
838 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
839 if (cb_info == NULL) {
840 g_variant_unref(result);
841 return PKGMGR_R_ENOMEM;
843 g_variant_unref(result);
844 ret = pkgmgr_client_connection_set_callback(client, cb_info);
845 if (ret != PKGMGR_R_OK) {
846 __free_cb_info(cb_info);
849 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
851 return cb_info->req_id;
854 API int pkgmgr_client_uninstall_packages(pkgmgr_client *pc,
855 const char **pkgids, int n_pkgs, pkgmgr_handler event_cb,
858 return pkgmgr_client_usr_uninstall_packages(pc, pkgids, n_pkgs,
859 event_cb, data, _getuid());
862 API int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type,
863 const char *pkgid, pkgmgr_mode mode, pkgmgr_handler event_cb,
866 return pkgmgr_client_usr_uninstall(pc, pkg_type, pkgid, mode, event_cb,
870 API int pkgmgr_client_usr_uninstall(pkgmgr_client *pc, const char *pkg_type,
871 const char *pkgid, pkgmgr_mode mode, pkgmgr_handler event_cb,
872 void *data, uid_t uid)
875 int ret = PKGMGR_R_ECOMM;
876 char *req_key = NULL;
877 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
878 struct cb_info *cb_info;
880 if (pc == NULL || pkgid == NULL) {
881 ERR("invalid parameter");
882 return PKGMGR_R_EINVAL;
885 if (client->pc_type != PC_REQUEST) {
886 ERR("client->pc_type is not PC_REQUEST");
887 return PKGMGR_R_EINVAL;
890 ret = pkgmgr_client_connection_send_request(client, "uninstall",
891 g_variant_new("(us)", uid, pkgid), &result);
892 if (ret != PKGMGR_R_OK) {
893 ERR("request failed: %d", ret);
897 g_variant_get(result, "(i&s)", &ret, &req_key);
898 if (req_key == NULL) {
899 g_variant_unref(result);
900 return PKGMGR_R_ECOMM;
902 if (ret != PKGMGR_R_OK) {
903 g_variant_unref(result);
907 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
908 if (cb_info == NULL) {
909 g_variant_unref(result);
910 return PKGMGR_R_ENOMEM;
912 g_variant_unref(result);
913 ret = pkgmgr_client_connection_set_callback(client, cb_info);
914 if (ret != PKGMGR_R_OK) {
915 __free_cb_info(cb_info);
918 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
920 return cb_info->req_id;
923 API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
924 const char *pkgid, pkgmgr_move_type move_type,
925 pkgmgr_handler event_cb, void *data)
927 return pkgmgr_client_usr_move(pc, pkg_type, pkgid, move_type,
928 event_cb, data, _getuid());
930 API int pkgmgr_client_usr_move(pkgmgr_client *pc, const char *pkg_type,
931 const char *pkgid, pkgmgr_move_type move_type,
932 pkgmgr_handler event_cb, void *data, uid_t uid)
935 int ret = PKGMGR_R_ECOMM;
936 char *req_key = NULL;
937 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
938 struct cb_info *cb_info;
940 if (pc == NULL || pkgid == NULL) {
941 ERR("invalid parameter");
942 return PKGMGR_R_EINVAL;
945 if ((move_type < PM_MOVE_TO_INTERNAL) ||
946 (move_type > PM_MOVE_TO_EXTENDED))
947 return PKGMGR_R_EINVAL;
949 if (client->pc_type != PC_REQUEST) {
950 ERR("client->pc_type is not PC_REQUEST");
951 return PKGMGR_R_EINVAL;
954 ret = pkgmgr_client_connection_send_request(client, "move",
955 g_variant_new("(usi)", uid, pkgid, move_type), &result);
956 if (ret != PKGMGR_R_OK) {
957 ERR("request failed: %d", ret);
961 g_variant_get(result, "(i&s)", &ret, &req_key);
962 if (req_key == NULL) {
963 g_variant_unref(result);
964 return PKGMGR_R_ECOMM;
966 if (ret != PKGMGR_R_OK) {
967 g_variant_unref(result);
971 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
972 if (cb_info == NULL) {
973 g_variant_unref(result);
974 return PKGMGR_R_ERROR;
976 g_variant_unref(result);
977 ret = pkgmgr_client_connection_set_callback(client, cb_info);
978 if (ret != PKGMGR_R_OK) {
979 __free_cb_info(cb_info);
982 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
984 return cb_info->req_id;
987 API int pkgmgr_client_usr_register_pkg_update_info(pkgmgr_client *pc,
988 pkg_update_info_t *update_info, uid_t uid)
991 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
994 if (pc == NULL || update_info == NULL || update_info->pkgid == NULL) {
995 ERR("invalid parameter");
996 return PKGMGR_R_EINVAL;
999 if (client->pc_type != PC_REQUEST) {
1000 ERR("client->pc_type is not PC_REQUEST");
1001 return PKGMGR_R_EINVAL;
1004 ret = pkgmgr_client_connection_send_request(client, "register_pkg_update_info",
1005 g_variant_new("(ussi)", uid, update_info->pkgid, update_info->version,
1006 update_info->type), &result);
1007 if (ret != PKGMGR_R_OK) {
1008 ERR("request failed: %d", ret);
1012 g_variant_get(result, "(i)", &ret);
1013 if (ret != PKGMGR_R_OK) {
1014 g_variant_unref(result);
1017 g_variant_unref(result);
1022 API int pkgmgr_client_register_pkg_update_info(pkgmgr_client *pc,
1023 pkg_update_info_t *update_info)
1025 return pkgmgr_client_usr_register_pkg_update_info(pc, update_info,
1029 API int pkgmgr_client_usr_unregister_pkg_update_info(pkgmgr_client *pc,
1030 const char *pkgid, uid_t uid)
1033 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1036 if (pc == NULL || pkgid == NULL) {
1037 ERR("invalid parameter");
1038 return PKGMGR_R_EINVAL;
1041 if (client->pc_type != PC_REQUEST) {
1042 ERR("client->pc_type is not PC_REQUEST");
1043 return PKGMGR_R_EINVAL;
1046 ret = pkgmgr_client_connection_send_request(client,
1047 "unregister_pkg_update_info",
1048 g_variant_new("(us)", uid, pkgid), &result);
1049 if (ret != PKGMGR_R_OK) {
1050 ERR("request failed: %d", ret);
1054 g_variant_get(result, "(i)", &ret);
1055 if (ret != PKGMGR_R_OK) {
1056 g_variant_unref(result);
1059 g_variant_unref(result);
1064 API int pkgmgr_client_unregister_pkg_update_info(pkgmgr_client *pc,
1067 return pkgmgr_client_usr_unregister_pkg_update_info(pc, pkgid, _getuid());
1070 API int pkgmgr_client_usr_unregister_all_pkg_update_info(pkgmgr_client *pc,
1074 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1078 ERR("invalid parameter");
1079 return PKGMGR_R_EINVAL;
1082 if (client->pc_type != PC_REQUEST) {
1083 ERR("client->pc_type is not PC_REQUEST");
1084 return PKGMGR_R_EINVAL;
1087 ret = pkgmgr_client_connection_send_request(client,
1088 "unregister_all_pkg_update_info",
1089 g_variant_new("(u)", uid), &result);
1090 if (ret != PKGMGR_R_OK) {
1091 ERR("request failed: %d", ret);
1095 g_variant_get(result, "(i)", &ret);
1096 if (ret != PKGMGR_R_OK) {
1097 g_variant_unref(result);
1100 g_variant_unref(result);
1105 API int pkgmgr_client_unregister_all_pkg_update_info(pkgmgr_client *pc)
1107 return pkgmgr_client_usr_unregister_all_pkg_update_info(pc, _getuid());
1110 API int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type,
1111 const char *pkgid, uid_t uid)
1114 int ret = PKGMGR_R_ECOMM;
1115 GVariantBuilder *builder;
1116 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1118 if (pc == NULL || pkgid == NULL) {
1119 ERR("invalid parameter");
1120 return PKGMGR_R_EINVAL;
1123 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1124 g_variant_builder_add(builder, "s", pkgid);
1126 ret = pkgmgr_client_connection_send_request(client, "enable_pkgs",
1127 g_variant_new("(uas)", uid, builder), &result);
1128 g_variant_builder_unref(builder);
1129 if (ret != PKGMGR_R_OK) {
1130 ERR("request failed: %d", ret);
1134 g_variant_get(result, "(is)", &ret, NULL);
1135 g_variant_unref(result);
1140 API int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type,
1143 return pkgmgr_client_usr_activate(pc, pkg_type, pkgid, _getuid());
1146 API int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc,
1147 const char *pkg_type, const char **pkgids, int n_pkgs,
1148 pkgmgr_handler event_cb, void *data, uid_t uid)
1151 GVariantBuilder *builder;
1152 int ret = PKGMGR_R_ECOMM;
1153 char *req_key = NULL;
1154 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1155 struct cb_info *cb_info;
1158 if (pc == NULL || pkgids == NULL || n_pkgs < 1) {
1159 ERR("invalid parameter");
1160 return PKGMGR_R_EINVAL;
1163 if (client->pc_type != PC_REQUEST) {
1164 ERR("client type is not PC_REQUEST");
1165 return PKGMGR_R_EINVAL;
1168 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1169 for (i = 0; i < n_pkgs; i++)
1170 g_variant_builder_add(builder, "s", pkgids[i]);
1172 ret = pkgmgr_client_connection_send_request(client, "enable_pkgs",
1173 g_variant_new("(uas)", uid, builder), &result);
1174 g_variant_builder_unref(builder);
1175 if (ret != PKGMGR_R_OK) {
1176 ERR("request failed: %d", ret);
1180 g_variant_get(result, "(i&s)", &ret, &req_key);
1181 if (req_key == NULL) {
1182 g_variant_unref(result);
1183 return PKGMGR_R_ECOMM;
1185 if (ret != PKGMGR_R_OK) {
1186 g_variant_unref(result);
1190 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
1191 if (cb_info == NULL) {
1192 g_variant_unref(result);
1193 return PKGMGR_R_ERROR;
1195 g_variant_unref(result);
1196 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1197 if (ret != PKGMGR_R_OK) {
1198 __free_cb_info(cb_info);
1201 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1203 return cb_info->req_id;
1206 API int pkgmgr_client_activate_packages(pkgmgr_client *pc,
1207 const char *pkg_type, const char **pkgids, int n_pkgs,
1208 pkgmgr_handler event_cb, void *data)
1210 return pkgmgr_client_usr_activate_packages(pc, pkg_type,
1211 pkgids, n_pkgs, event_cb, data, _getuid());
1214 API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type,
1215 const char *pkgid, uid_t uid)
1218 GVariantBuilder *builder;
1219 int ret = PKGMGR_R_ECOMM;
1220 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1222 if (pc == NULL || pkgid == NULL) {
1223 ERR("invalid parameter");
1224 return PKGMGR_R_EINVAL;
1227 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1228 g_variant_builder_add(builder, "s", pkgid);
1230 ret = pkgmgr_client_connection_send_request(client, "disable_pkgs",
1231 g_variant_new("(uas)", uid, builder), &result);
1232 g_variant_builder_unref(builder);
1233 if (ret != PKGMGR_R_OK) {
1234 ERR("request failed: %d", ret);
1238 g_variant_get(result, "(is)", &ret, NULL);
1239 g_variant_unref(result);
1244 API int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type,
1247 return pkgmgr_client_usr_deactivate(pc, pkg_type, pkgid, _getuid());
1250 API int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc,
1251 const char *pkg_type, const char **pkgids, int n_pkgs,
1252 pkgmgr_handler event_cb, void *data, uid_t uid)
1255 GVariantBuilder *builder;
1256 int ret = PKGMGR_R_ECOMM;
1257 char *req_key = NULL;
1258 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1259 struct cb_info *cb_info;
1262 if (pc == NULL || pkgids == NULL || n_pkgs < 1) {
1263 ERR("invalid parameter");
1264 return PKGMGR_R_EINVAL;
1267 if (client->pc_type != PC_REQUEST) {
1268 ERR("client type is not PC_REQUEST");
1269 return PKGMGR_R_EINVAL;
1272 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1273 for (i = 0; i < n_pkgs; i++)
1274 g_variant_builder_add(builder, "s", pkgids[i]);
1276 ret = pkgmgr_client_connection_send_request(client, "disable_pkgs",
1277 g_variant_new("(uas)", uid, builder), &result);
1278 g_variant_builder_unref(builder);
1279 if (ret != PKGMGR_R_OK) {
1280 ERR("request failed: %d", ret);
1284 g_variant_get(result, "(i&s)", &ret, &req_key);
1285 if (req_key == NULL) {
1286 g_variant_unref(result);
1287 return PKGMGR_R_ECOMM;
1289 if (ret != PKGMGR_R_OK) {
1290 g_variant_unref(result);
1294 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
1295 if (cb_info == NULL) {
1296 g_variant_unref(result);
1297 return PKGMGR_R_ERROR;
1299 g_variant_unref(result);
1300 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1301 if (ret != PKGMGR_R_OK) {
1302 __free_cb_info(cb_info);
1305 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1307 return cb_info->req_id;
1310 API int pkgmgr_client_deactivate_packages(pkgmgr_client *pc,
1311 const char *pkg_type, const char **pkgids, int n_pkgs,
1312 pkgmgr_handler event_cb, void *data)
1314 return pkgmgr_client_usr_deactivate_packages(pc, pkg_type,
1315 pkgids, n_pkgs, event_cb, data, _getuid());
1318 API int pkgmgr_client_usr_activate_app(pkgmgr_client *pc, const char *appid,
1319 pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1322 int ret = PKGMGR_R_ECOMM;
1323 char *req_key = NULL;
1324 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1325 struct cb_info *cb_info;
1327 if (pc == NULL || appid == NULL) {
1328 ERR("invalid parameter");
1329 return PKGMGR_R_EINVAL;
1332 ret = pkgmgr_client_connection_send_request(client, "enable_app",
1333 g_variant_new("(us)", uid, appid), &result);
1334 if (ret != PKGMGR_R_OK) {
1335 ERR("request failed: %d", ret);
1339 g_variant_get(result, "(i&s)", &ret, &req_key);
1340 if (req_key == NULL) {
1341 g_variant_unref(result);
1342 return PKGMGR_R_ECOMM;
1344 if (ret != PKGMGR_R_OK) {
1345 g_variant_unref(result);
1349 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1351 if (cb_info == NULL) {
1352 g_variant_unref(result);
1353 return PKGMGR_R_ENOMEM;
1355 g_variant_unref(result);
1356 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1357 if (ret != PKGMGR_R_OK) {
1358 __free_cb_info(cb_info);
1361 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1363 return cb_info->req_id;
1366 API int pkgmgr_client_activate_app(pkgmgr_client *pc, const char *appid,
1367 pkgmgr_app_handler app_event_cb, void *data)
1369 return pkgmgr_client_usr_activate_app(pc, appid, app_event_cb,
1373 API int pkgmgr_client_usr_activate_apps(pkgmgr_client *pc, const char **appids,
1374 int n_apps, pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1377 GVariantBuilder *builder;
1378 int ret = PKGMGR_R_ECOMM;
1379 char *req_key = NULL;
1380 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1381 struct cb_info *cb_info;
1384 if (pc == NULL || appids == NULL || n_apps < 1) {
1385 ERR("invalid parameter");
1386 return PKGMGR_R_EINVAL;
1389 if (client->pc_type != PC_REQUEST) {
1390 ERR("client type is not PC_REQUEST");
1391 return PKGMGR_R_EINVAL;
1394 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1395 for (i = 0; i < n_apps; i++)
1396 g_variant_builder_add(builder, "s", appids[i]);
1398 ret = pkgmgr_client_connection_send_request(client, "enable_apps",
1399 g_variant_new("(uas)", uid, builder), &result);
1400 g_variant_builder_unref(builder);
1401 if (ret != PKGMGR_R_OK) {
1402 ERR("request failed: %d", ret);
1406 g_variant_get(result, "(i&s)", &ret, &req_key);
1407 if (req_key == NULL) {
1408 g_variant_unref(result);
1409 return PKGMGR_R_ECOMM;
1411 if (ret != PKGMGR_R_OK) {
1412 g_variant_unref(result);
1416 cb_info = __create_app_event_cb_info(client, app_event_cb, data, req_key);
1417 if (cb_info == NULL) {
1418 g_variant_unref(result);
1419 return PKGMGR_R_ERROR;
1421 g_variant_unref(result);
1422 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1423 if (ret != PKGMGR_R_OK) {
1424 __free_cb_info(cb_info);
1427 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1429 return cb_info->req_id;
1432 API int pkgmgr_client_activate_apps(pkgmgr_client *pc, const char **appids,
1433 int n_apps, pkgmgr_app_handler app_event_cb, void *data)
1435 return pkgmgr_client_usr_activate_apps(pc, appids, n_apps,
1436 app_event_cb, data, _getuid());
1439 API int pkgmgr_client_activate_global_app_for_uid(pkgmgr_client *pc,
1440 const char *appid, pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1443 int ret = PKGMGR_R_ECOMM;
1444 char *req_key = NULL;
1445 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1446 struct cb_info *cb_info;
1448 if (pc == NULL || appid == NULL) {
1449 ERR("invalid parameter");
1450 return PKGMGR_R_EINVAL;
1453 ret = pkgmgr_client_connection_send_request(client,
1454 "enable_global_app_for_uid",
1455 g_variant_new("(us)", uid, appid), &result);
1456 if (ret != PKGMGR_R_OK) {
1457 ERR("request failed: %d", ret);
1461 g_variant_get(result, "(i&s)", &ret, &req_key);
1462 if (req_key == NULL) {
1463 g_variant_unref(result);
1464 return PKGMGR_R_ECOMM;
1466 if (ret != PKGMGR_R_OK) {
1467 g_variant_unref(result);
1471 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1473 if (cb_info == NULL) {
1474 g_variant_unref(result);
1475 return PKGMGR_R_ENOMEM;
1477 g_variant_unref(result);
1478 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1479 if (ret != PKGMGR_R_OK) {
1480 __free_cb_info(cb_info);
1483 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1485 return cb_info->req_id;
1488 API int pkgmgr_client_usr_deactivate_app(pkgmgr_client *pc, const char *appid,
1489 pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1492 int ret = PKGMGR_R_ECOMM;
1493 char *req_key = NULL;
1494 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1495 struct cb_info *cb_info;
1497 if (pc == NULL || appid == NULL) {
1498 ERR("invalid parameter");
1499 return PKGMGR_R_EINVAL;
1502 ret = pkgmgr_client_connection_send_request(client, "disable_app",
1503 g_variant_new("(us)", uid, appid), &result);
1504 if (ret != PKGMGR_R_OK) {
1505 ERR("request failed: %d", ret);
1509 g_variant_get(result, "(i&s)", &ret, &req_key);
1510 if (req_key == NULL) {
1511 g_variant_unref(result);
1512 return PKGMGR_R_ECOMM;
1514 if (ret != PKGMGR_R_OK) {
1515 g_variant_unref(result);
1519 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1521 if (cb_info == NULL) {
1522 g_variant_unref(result);
1523 return PKGMGR_R_ENOMEM;
1525 g_variant_unref(result);
1526 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1527 if (ret != PKGMGR_R_OK) {
1528 __free_cb_info(cb_info);
1531 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1533 return cb_info->req_id;
1536 API int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid,
1537 pkgmgr_app_handler app_event_cb, void *data)
1539 return pkgmgr_client_usr_deactivate_app(pc, appid, app_event_cb, data,
1543 API int pkgmgr_client_usr_deactivate_apps(pkgmgr_client *pc,
1544 const char **appids, int n_apps,
1545 pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1548 GVariantBuilder *builder;
1549 int ret = PKGMGR_R_ECOMM;
1550 char *req_key = NULL;
1551 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1552 struct cb_info *cb_info;
1555 if (pc == NULL || appids == NULL || n_apps < 1) {
1556 ERR("invalid parameter");
1557 return PKGMGR_R_EINVAL;
1560 if (client->pc_type != PC_REQUEST) {
1561 ERR("client type is not PC_REQUEST");
1562 return PKGMGR_R_EINVAL;
1565 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1566 for (i = 0; i < n_apps; i++)
1567 g_variant_builder_add(builder, "s", appids[i]);
1569 ret = pkgmgr_client_connection_send_request(client, "disable_apps",
1570 g_variant_new("(uas)", uid, builder), &result);
1571 g_variant_builder_unref(builder);
1572 if (ret != PKGMGR_R_OK) {
1573 ERR("request failed: %d", ret);
1577 g_variant_get(result, "(i&s)", &ret, &req_key);
1578 if (req_key == NULL) {
1579 g_variant_unref(result);
1580 return PKGMGR_R_ECOMM;
1582 if (ret != PKGMGR_R_OK) {
1583 g_variant_unref(result);
1587 cb_info = __create_app_event_cb_info(client, app_event_cb, data, req_key);
1588 if (cb_info == NULL) {
1589 g_variant_unref(result);
1590 return PKGMGR_R_ERROR;
1592 g_variant_unref(result);
1593 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1594 if (ret != PKGMGR_R_OK) {
1595 __free_cb_info(cb_info);
1598 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1600 return cb_info->req_id;
1603 API int pkgmgr_client_deactivate_apps(pkgmgr_client *pc, const char **appids,
1604 int n_apps, pkgmgr_app_handler app_event_cb, void *data)
1606 return pkgmgr_client_usr_deactivate_apps(pc, appids, n_apps,
1607 app_event_cb, data, _getuid());
1610 API int pkgmgr_client_deactivate_global_app_for_uid(pkgmgr_client *pc,
1611 const char *appid, pkgmgr_app_handler app_event_cb, void *data, uid_t uid)
1614 int ret = PKGMGR_R_ECOMM;
1615 char *req_key = NULL;
1616 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1617 struct cb_info *cb_info;
1619 if (pc == NULL || appid == NULL) {
1620 ERR("invalid parameter");
1621 return PKGMGR_R_EINVAL;
1624 ret = pkgmgr_client_connection_send_request(client,
1625 "disable_global_app_for_uid",
1626 g_variant_new("(us)", uid, appid), &result);
1627 if (ret != PKGMGR_R_OK) {
1628 ERR("request failed: %d", ret);
1632 g_variant_get(result, "(i&s)", &ret, &req_key);
1633 if (req_key == NULL) {
1634 g_variant_unref(result);
1635 return PKGMGR_R_ECOMM;
1637 if (ret != PKGMGR_R_OK) {
1638 g_variant_unref(result);
1642 cb_info = __create_app_event_cb_info(client, app_event_cb, data,
1644 if (cb_info == NULL) {
1645 g_variant_unref(result);
1646 return PKGMGR_R_ENOMEM;
1648 g_variant_unref(result);
1649 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1650 if (ret != PKGMGR_R_OK) {
1651 __free_cb_info(cb_info);
1654 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1656 return cb_info->req_id;
1659 API int pkgmgr_client_usr_clear_user_data(pkgmgr_client *pc,
1660 const char *pkg_type, const char *appid, pkgmgr_mode mode,
1665 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1667 if (pc == NULL || appid == NULL || uid == GLOBAL_USER) {
1668 ERR("invalid parameter");
1669 return PKGMGR_R_EINVAL;
1672 if (client->pc_type != PC_REQUEST) {
1673 ERR("client->pc_type is not PC_REQUEST");
1674 return PKGMGR_R_EINVAL;
1677 ret = pkgmgr_client_connection_send_request(client, "cleardata",
1678 g_variant_new("(us)", uid, appid), &result);
1679 if (ret != PKGMGR_R_OK) {
1680 ERR("request failed: %d", ret);
1684 g_variant_get(result, "(i)", &ret);
1685 g_variant_unref(result);
1690 API int pkgmgr_client_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
1691 const char *appid, pkgmgr_mode mode)
1693 return pkgmgr_client_usr_clear_user_data(pc, pkg_type, appid, mode,
1697 API int pkgmgr_client_set_status_type(pkgmgr_client *pc, int status_type)
1699 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1702 ERR("invalid parameter");
1703 return PKGMGR_R_EINVAL;
1706 client->status_type = status_type;
1711 API int pkgmgr_client_listen_status(pkgmgr_client *pc, pkgmgr_handler event_cb,
1715 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1716 struct cb_info *cb_info;
1718 if (pc == NULL || event_cb == NULL) {
1719 ERR("invalid parameter");
1720 return PKGMGR_R_EINVAL;
1723 if (client->pc_type != PC_LISTENING) {
1724 ERR("client->pc_type is not PC_LISTENING");
1725 return PKGMGR_R_EINVAL;
1728 cb_info = __create_event_cb_info(client, event_cb, data, NULL);
1729 if (cb_info == NULL)
1730 return PKGMGR_R_ENOMEM;
1731 cb_info->status_type = client->status_type;
1732 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1733 if (ret != PKGMGR_R_OK) {
1734 __free_cb_info(cb_info);
1737 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1739 return cb_info->req_id;
1742 API int pkgmgr_client_listen_app_status(pkgmgr_client *pc,
1743 pkgmgr_app_handler app_event_cb, void *data)
1746 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1747 struct cb_info *cb_info;
1749 if (pc == NULL || app_event_cb == NULL) {
1750 ERR("invalid parameter");
1751 return PKGMGR_R_EINVAL;
1754 if (client->pc_type != PC_LISTENING) {
1755 ERR("client->pc_type is not PC_LISTENING");
1756 return PKGMGR_R_EINVAL;
1759 cb_info = __create_app_event_cb_info(client, app_event_cb, data, NULL);
1760 if (cb_info == NULL)
1761 return PKGMGR_R_ENOMEM;
1762 cb_info->status_type = client->status_type;
1763 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1764 if (ret != PKGMGR_R_OK) {
1765 __free_cb_info(cb_info);
1768 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1770 return cb_info->req_id;
1773 API int pkgmgr_client_remove_listen_status(pkgmgr_client *pc)
1775 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1778 struct cb_info *cb_info;
1781 ERR("invalid parameter");
1782 return PKGMGR_R_EINVAL;
1785 /* unset all callback */
1786 tmp = client->cb_info_list;
1787 while (tmp != NULL) {
1789 cb_info = (struct cb_info *)tmp->data;
1790 pkgmgr_client_connection_unset_callback(pc, cb_info);
1791 client->cb_info_list = g_list_delete_link(client->cb_info_list,
1793 __free_cb_info(cb_info);
1800 API int pkgmgr_client_broadcast_status(pkgmgr_client *pc, const char *pkg_type,
1801 const char *pkgid, const char *key, const char *val)
1803 /* client cannot broadcast signal */
1807 /* TODO: deprecate(or remove) */
1808 API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type,
1809 int service_mode, pkgmgr_client *pc, const char *pkg_type,
1810 const char *pkgid, const char *custom_info,
1811 pkgmgr_handler event_cb, void *data)
1813 return pkgmgr_client_usr_request_service(service_type, service_mode,
1814 pc, pkg_type, pkgid, _getuid(), custom_info, event_cb,
1818 API int pkgmgr_client_usr_request_service(
1819 pkgmgr_request_service_type service_type, int service_mode,
1820 pkgmgr_client *pc, const char *pkg_type, const char *pkgid,
1821 uid_t uid, const char *custom_info, pkgmgr_handler event_cb,
1826 /* Check for NULL value of service type */
1827 retvm_if(service_type > PM_REQUEST_MAX, PKGMGR_R_EINVAL, "service type is not defined\n");
1828 retvm_if(service_type < 0, PKGMGR_R_EINVAL, "service type is error\n");
1830 switch (service_type) {
1831 case PM_REQUEST_MOVE:
1832 tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
1833 tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
1834 tryvm_if((service_mode < PM_MOVE_TO_INTERNAL) || (service_mode > PM_MOVE_TO_EXTENDED), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
1836 ret = __move_pkg_process(pc, pkgid, pkg_type, uid, (pkgmgr_move_type)service_mode, event_cb, data);
1839 case PM_REQUEST_GET_SIZE:
1840 tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
1841 tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
1842 tryvm_if((service_mode < PM_GET_TOTAL_SIZE) || (service_mode >= PM_GET_MAX), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
1844 ret = __get_size_process(pc, pkgid, uid, (pkgmgr_getsize_type)service_mode, event_cb, data);
1847 case PM_REQUEST_KILL_APP:
1848 case PM_REQUEST_CHECK_APP:
1849 tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
1850 tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
1852 ret = __check_app_process(service_type, pc, pkgid, uid, data);
1854 ERR("__check_app_process fail \n");
1861 ERR("Wrong Request\n");
1871 API int pkgmgr_client_usr_clear_cache_dir(const char *pkgid, uid_t uid)
1875 struct pkgmgr_client_t *client;
1877 if (pkgid == NULL || uid == GLOBAL_USER) {
1878 ERR("invalid parameter");
1879 return PKGMGR_R_EINVAL;
1882 client = pkgmgr_client_new(PC_REQUEST);
1883 if (client == NULL) {
1884 ERR("out of memory");
1885 return PKGMGR_R_ENOMEM;
1888 ret = pkgmgr_client_connection_send_request(client, "clearcache",
1889 g_variant_new("(us)", uid, pkgid), &result);
1890 if (ret != PKGMGR_R_OK) {
1891 ERR("request failed: %d", ret);
1892 pkgmgr_client_free(client);
1896 g_variant_get(result, "(i)", &ret);
1897 g_variant_unref(result);
1898 pkgmgr_client_free(client);
1903 API int pkgmgr_client_clear_cache_dir(const char *pkgid)
1905 return pkgmgr_client_usr_clear_cache_dir(pkgid, _getuid());
1908 API int pkgmgr_client_clear_usr_all_cache_dir(uid_t uid)
1910 return pkgmgr_client_usr_clear_cache_dir(PKG_CLEAR_ALL_CACHE, uid);
1913 API int pkgmgr_client_clear_all_cache_dir(void)
1915 return pkgmgr_client_usr_clear_cache_dir(
1916 PKG_CLEAR_ALL_CACHE, _getuid());
1919 API int pkgmgr_client_get_size(pkgmgr_client *pc, const char *pkgid,
1920 pkgmgr_getsize_type get_type, pkgmgr_handler event_cb,
1923 return pkgmgr_client_usr_get_size(pc, pkgid, get_type, event_cb, data,
1927 /* TODO: deprecate(or remove) */
1928 API int pkgmgr_client_usr_get_size(pkgmgr_client *pc, const char *pkgid,
1929 pkgmgr_getsize_type get_type, pkgmgr_handler event_cb,
1930 void *data, uid_t uid)
1933 int ret = PKGMGR_R_ECOMM;
1934 char *req_key = NULL;
1935 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1936 struct cb_info *cb_info;
1938 if (pc == NULL || pkgid == NULL || event_cb == NULL) {
1939 ERR("invalid parameter");
1940 return PKGMGR_R_EINVAL;
1943 if (client->pc_type != PC_REQUEST) {
1944 ERR("client->pc_type is not PC_REQUEST");
1945 return PKGMGR_R_EINVAL;
1949 if (strcmp(pkgid, PKG_SIZE_INFO_TOTAL) == 0)
1950 get_type = PM_GET_TOTAL_PKG_SIZE_INFO;
1952 get_type = PM_GET_PKG_SIZE_INFO;
1954 ret = pkgmgr_client_connection_send_request(client, "getsize",
1955 g_variant_new("(usi)", uid, pkgid, get_type), &result);
1956 if (ret != PKGMGR_R_OK) {
1957 ERR("request failed: %d", ret);
1961 g_variant_get(result, "(i&s)", &ret, &req_key);
1962 if (req_key == NULL) {
1963 g_variant_unref(result);
1964 return PKGMGR_R_ECOMM;
1966 if (ret != PKGMGR_R_OK) {
1967 g_variant_unref(result);
1971 cb_info = __create_event_cb_info(client, event_cb, data, req_key);
1972 if (cb_info == NULL) {
1973 g_variant_unref(result);
1974 return PKGMGR_R_ENOMEM;
1976 g_variant_unref(result);
1977 ret = pkgmgr_client_connection_set_callback(client, cb_info);
1978 if (ret != PKGMGR_R_OK) {
1979 __free_cb_info(cb_info);
1982 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
1987 API int pkgmgr_client_usr_get_package_size_info(pkgmgr_client *pc,
1988 const char *pkgid, pkgmgr_pkg_size_info_receive_cb event_cb,
1989 void *user_data, uid_t uid)
1992 int ret = PKGMGR_R_ECOMM;
1993 char *req_key = NULL;
1995 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
1996 struct cb_info *cb_info;
1998 if (pc == NULL || pkgid == NULL || event_cb == NULL) {
1999 ERR("invalid parameter");
2000 return PKGMGR_R_EINVAL;
2003 if (client->pc_type != PC_REQUEST) {
2004 ERR("client->pc_type is not PC_REQUEST");
2005 return PKGMGR_R_EINVAL;
2008 if (strcmp(pkgid, PKG_SIZE_INFO_TOTAL) == 0)
2009 get_type = PM_GET_TOTAL_PKG_SIZE_INFO;
2011 get_type = PM_GET_PKG_SIZE_INFO;
2013 ret = pkgmgr_client_connection_send_request(client, "getsize",
2014 g_variant_new("(usi)", uid, pkgid, get_type), &result);
2015 if (ret != PKGMGR_R_OK) {
2016 ERR("request failed: %d", ret);
2020 g_variant_get(result, "(i&s)", &ret, &req_key);
2021 if (req_key == NULL) {
2022 g_variant_unref(result);
2023 return PKGMGR_R_ECOMM;
2025 if (ret != PKGMGR_R_OK) {
2026 g_variant_unref(result);
2030 cb_info = __create_size_info_cb_info(client, event_cb, user_data,
2032 if (cb_info == NULL) {
2033 g_variant_unref(result);
2034 return PKGMGR_R_ENOMEM;
2036 g_variant_unref(result);
2037 ret = pkgmgr_client_connection_set_callback(client, cb_info);
2038 if (ret != PKGMGR_R_OK) {
2039 __free_cb_info(cb_info);
2042 client->cb_info_list = g_list_append(client->cb_info_list, cb_info);
2047 API int pkgmgr_client_get_package_size_info(pkgmgr_client *pc,
2048 const char *pkgid, pkgmgr_pkg_size_info_receive_cb event_cb,
2051 return pkgmgr_client_usr_get_package_size_info(pc, pkgid, event_cb,
2052 user_data, _getuid());
2055 API int pkgmgr_client_usr_get_total_package_size_info(pkgmgr_client *pc,
2056 pkgmgr_total_pkg_size_info_receive_cb event_cb,
2057 void *user_data, uid_t uid)
2058 { /* total package size info */
2059 return pkgmgr_client_usr_get_package_size_info(pc, PKG_SIZE_INFO_TOTAL,
2060 (pkgmgr_pkg_size_info_receive_cb)event_cb,
2064 API int pkgmgr_client_get_total_package_size_info(pkgmgr_client *pc,
2065 pkgmgr_total_pkg_size_info_receive_cb event_cb, void *user_data)
2067 return pkgmgr_client_usr_get_package_size_info(pc, PKG_SIZE_INFO_TOTAL,
2068 (pkgmgr_pkg_size_info_receive_cb)event_cb,
2069 user_data, _getuid());
2072 API int pkgmgr_client_generate_license_request(pkgmgr_client *pc,
2073 const char *resp_data, char **req_data, char **license_url)
2079 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2081 if (pc == NULL || resp_data == NULL || req_data == NULL ||
2082 license_url == NULL) {
2083 ERR("invalid parameter");
2084 return PKGMGR_R_EINVAL;
2087 if (client->pc_type != PC_REQUEST) {
2088 ERR("client->pc_type is not PC_REQUEST");
2089 return PKGMGR_R_EINVAL;
2092 ret = pkgmgr_client_connection_send_request(client,
2093 "generate_license_request",
2094 g_variant_new("(s)", resp_data), &result);
2095 if (ret != PKGMGR_R_OK) {
2096 ERR("request failed: %d", ret);
2100 g_variant_get(result, "(i&s&s)", &ret, &data, &url);
2101 if (ret != PKGMGR_R_OK) {
2102 ERR("generate_license_request failed: %d", ret);
2103 g_variant_unref(result);
2107 *req_data = strdup(data);
2108 *license_url = strdup(url);
2110 g_variant_unref(result);
2115 API int pkgmgr_client_register_license(pkgmgr_client *pc, const char *resp_data)
2119 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2121 if (pc == NULL || resp_data == NULL) {
2122 ERR("invalid parameter");
2123 return PKGMGR_R_EINVAL;
2126 if (client->pc_type != PC_REQUEST) {
2127 ERR("client->pc_type is not PC_REQUEST");
2128 return PKGMGR_R_EINVAL;
2131 ret = pkgmgr_client_connection_send_request(client, "register_license",
2132 g_variant_new("(s)", resp_data), &result);
2133 if (ret != PKGMGR_R_OK) {
2134 ERR("request failed: %d", ret);
2138 g_variant_get(result, "(i)", &ret);
2139 g_variant_unref(result);
2140 if (ret != PKGMGR_R_OK)
2141 ERR("register license failed: %d", ret);
2146 API int pkgmgr_client_decrypt_package(pkgmgr_client *pc,
2147 const char *drm_file_path, const char *decrypted_file_path)
2151 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2153 if (pc == NULL || drm_file_path == NULL ||
2154 decrypted_file_path == NULL) {
2155 ERR("invalid parameter");
2156 return PKGMGR_R_EINVAL;
2159 if (client->pc_type != PC_REQUEST) {
2160 ERR("client->pc_type is not PC_REQUEST");
2161 return PKGMGR_R_EINVAL;
2164 ret = pkgmgr_client_connection_send_request(client, "decrypt_package",
2165 g_variant_new("(ss)", drm_file_path,
2166 decrypted_file_path), &result);
2167 if (ret != PKGMGR_R_OK) {
2168 ERR("request failed: %d", ret);
2172 g_variant_get(result, "(i)", &ret);
2173 g_variant_unref(result);
2174 if (ret != PKGMGR_R_OK)
2175 ERR("decrypt_package failed: %d", ret);
2180 API int pkgmgr_client_enable_splash_screen(pkgmgr_client *pc, const char *appid)
2182 return pkgmgr_client_usr_enable_splash_screen(pc, appid, _getuid());
2185 API int pkgmgr_client_usr_enable_splash_screen(pkgmgr_client *pc,
2186 const char *appid, uid_t uid)
2190 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2192 if (pc == NULL || appid == NULL) {
2193 ERR("Invalid parameter");
2194 return PKGMGR_R_EINVAL;
2197 ret = pkgmgr_client_connection_send_request(client,
2198 "enable_app_splash_screen",
2199 g_variant_new("(us)", uid, appid), &result);
2200 if (ret != PKGMGR_R_OK) {
2201 ERR("request failed: %d", ret);
2205 g_variant_get(result, "(i)", &ret);
2206 g_variant_unref(result);
2207 if (ret != PKGMGR_R_OK)
2208 ERR("enable splash screen failed: %d", ret);
2213 API int pkgmgr_client_disable_splash_screen(pkgmgr_client *pc,
2216 return pkgmgr_client_usr_disable_splash_screen(pc, appid,
2220 API int pkgmgr_client_usr_disable_splash_screen(pkgmgr_client *pc,
2221 const char *appid, uid_t uid)
2225 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2227 if (pc == NULL || appid == NULL) {
2228 ERR("Invalid parameter");
2229 return PKGMGR_R_EINVAL;
2232 ret = pkgmgr_client_connection_send_request(client,
2233 "disable_app_splash_screen",
2234 g_variant_new("(us)", uid, appid), &result);
2235 if (ret != PKGMGR_R_OK) {
2236 ERR("request failed: %d", ret);
2240 g_variant_get(result, "(i)", &ret);
2241 g_variant_unref(result);
2242 if (ret != PKGMGR_R_OK)
2243 ERR("disable splash screen failed: %d", ret);
2248 static int __set_pkg_restriction_mode(pkgmgr_client *pc, const char *pkgid,
2249 int mode, uid_t uid)
2252 int ret = PKGMGR_R_ECOMM;
2253 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2255 if (pc == NULL || pkgid == NULL || strlen(pkgid) == 0 || mode <= 0) {
2256 ERR("invalid parameter");
2257 return PKGMGR_R_EINVAL;
2260 ret = pkgmgr_client_connection_send_request(client,
2261 "set_restriction_mode",
2262 g_variant_new("(usi)", uid, pkgid, mode), &result);
2263 if (ret != PKGMGR_R_OK) {
2264 ERR("request failed: %d", ret);
2268 g_variant_get(result, "(i)", &ret);
2269 g_variant_unref(result);
2274 API int pkgmgr_client_usr_set_pkg_restriction_mode(pkgmgr_client *pc,
2275 const char *pkgid, int mode, uid_t uid)
2277 return __set_pkg_restriction_mode(pc, pkgid, mode, uid);
2280 API int pkgmgr_client_set_pkg_restriction_mode(pkgmgr_client *pc,
2281 const char *pkgid, int mode)
2283 return pkgmgr_client_usr_set_pkg_restriction_mode(pc, pkgid, mode,
2287 static int __unset_pkg_restriction_mode(pkgmgr_client *pc, const char *pkgid,
2288 int mode, uid_t uid)
2291 int ret = PKGMGR_R_ECOMM;
2292 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2294 if (pc == NULL || pkgid == NULL || strlen(pkgid) == 0 || mode <= 0) {
2295 ERR("invalid parameter");
2296 return PKGMGR_R_EINVAL;
2299 ret = pkgmgr_client_connection_send_request(client,
2300 "unset_restriction_mode",
2301 g_variant_new("(usi)", uid, pkgid, mode), &result);
2302 if (ret != PKGMGR_R_OK) {
2303 ERR("request failed: %d", ret);
2307 g_variant_get(result, "(i)", &ret);
2308 g_variant_unref(result);
2314 API int pkgmgr_client_usr_unset_pkg_restriction_mode(pkgmgr_client *pc,
2315 const char *pkgid, int mode, uid_t uid)
2317 return __unset_pkg_restriction_mode(pc, pkgid, mode, uid);
2320 API int pkgmgr_client_unset_pkg_restriction_mode(pkgmgr_client *pc,
2321 const char *pkgid, int mode)
2323 return pkgmgr_client_usr_unset_pkg_restriction_mode(pc, pkgid, mode,
2327 static int __get_pkg_restriction_mode(pkgmgr_client *pc, const char *pkgid,
2328 int *mode, uid_t uid)
2331 int ret = PKGMGR_R_ECOMM;
2333 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2335 if (pc == NULL || pkgid == NULL || strlen(pkgid) == 0) {
2336 ERR("invalid parameter");
2337 return PKGMGR_R_EINVAL;
2340 ret = pkgmgr_client_connection_send_request(client,
2341 "get_restriction_mode",
2342 g_variant_new("(us)", uid, pkgid), &result);
2343 if (ret != PKGMGR_R_OK) {
2344 ERR("request failed: %d", ret);
2348 g_variant_get(result, "(ii)", &m, &ret);
2349 g_variant_unref(result);
2350 if (ret != PKGMGR_R_OK)
2358 API int pkgmgr_client_usr_get_pkg_restriction_mode(pkgmgr_client *pc,
2359 const char *pkgid, int *mode, uid_t uid)
2361 return __get_pkg_restriction_mode(pc, pkgid, mode, uid);
2364 API int pkgmgr_client_get_pkg_restriction_mode(pkgmgr_client *pc,
2365 const char *pkgid, int *mode)
2367 return pkgmgr_client_usr_get_pkg_restriction_mode(pc, pkgid, mode,
2371 API int pkgmgr_client_usr_set_restriction_mode(pkgmgr_client *pc, int mode,
2375 int ret = PKGMGR_R_ECOMM;
2376 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2379 ERR("invalid parameter");
2380 return PKGMGR_R_EINVAL;
2383 ret = pkgmgr_client_connection_send_request(client,
2384 "set_restriction_mode",
2385 g_variant_new("(usi)", uid, "", mode), &result);
2386 if (ret != PKGMGR_R_OK) {
2387 ERR("request failed: %d", ret);
2391 g_variant_get(result, "(i)", &ret);
2392 g_variant_unref(result);
2397 API int pkgmgr_client_set_restriction_mode(pkgmgr_client *pc, int mode)
2399 return pkgmgr_client_usr_set_restriction_mode(pc, mode, _getuid());
2402 API int pkgmgr_client_usr_unset_restriction_mode(pkgmgr_client *pc, int mode,
2406 int ret = PKGMGR_R_ECOMM;
2407 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2410 ERR("invalid parameter");
2411 return PKGMGR_R_EINVAL;
2414 ret = pkgmgr_client_connection_send_request(client,
2415 "unset_restriction_mode",
2416 g_variant_new("(usi)", uid, "", mode), &result);
2417 if (ret != PKGMGR_R_OK) {
2418 ERR("request failed: %d", ret);
2422 g_variant_get(result, "(i)", &ret);
2423 g_variant_unref(result);
2428 API int pkgmgr_client_unset_restriction_mode(pkgmgr_client *pc, int mode)
2430 return pkgmgr_client_usr_unset_restriction_mode(pc, mode, _getuid());
2433 API int pkgmgr_client_usr_get_restriction_mode(pkgmgr_client *pc,
2434 int *mode, uid_t uid)
2437 int ret = PKGMGR_R_ECOMM;
2439 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2442 ERR("invalid parameter");
2443 return PKGMGR_R_EINVAL;
2446 ret = pkgmgr_client_connection_send_request(client,
2447 "get_restriction_mode",
2448 g_variant_new("(us)", uid, ""), &result);
2449 if (ret != PKGMGR_R_OK) {
2450 ERR("request failed: %d", ret);
2454 g_variant_get(result, "(ii)", &m, &ret);
2455 g_variant_unref(result);
2456 if (ret != PKGMGR_R_OK)
2464 API int pkgmgr_client_get_restriction_mode(pkgmgr_client *pc, int *mode)
2466 return pkgmgr_client_usr_get_restriction_mode(pc, mode, _getuid());
2469 API pkgmgr_info *pkgmgr_client_check_pkginfo_from_file(const char *pkg_path)
2472 pkg_plugin_set *plugin_set;
2473 package_manager_pkg_detail_info_t *info;
2476 if (pkg_path == NULL) {
2477 ERR("invalid parameter");
2481 pkg_type = __get_type_from_path(pkg_path);
2482 if (pkg_type == NULL) {
2483 ERR("cannot get pkg type");
2487 plugin_set = _package_manager_load_library(pkg_type);
2488 if (plugin_set == NULL) {
2489 ERR("failed to load library for %s", pkg_type);
2494 info = calloc(1, sizeof(package_manager_pkg_detail_info_t));
2496 ERR("out of memory");
2501 ret = plugin_set->get_pkg_detail_info_from_package(pkg_path, info);
2503 ERR("get_pkg_detail_info_from_package failed");
2511 return (pkgmgr_info *)info;
2514 API int pkgmgr_client_free_pkginfo(pkgmgr_info *info)
2516 package_manager_pkg_detail_info_t *pkg_info =
2517 (package_manager_pkg_detail_info_t *)info;
2520 ERR("invalid parameter");
2521 return PKGMGR_R_EINVAL;
2524 g_list_free_full(pkg_info->privilege_list, free);
2525 free(pkg_info->icon_buf);
2531 API int pkgmgr_client_usr_set_app_label(pkgmgr_client *pc, char *appid,
2532 char *label, uid_t uid)
2536 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2538 if (pc == NULL || appid == NULL || label == NULL) {
2539 ERR("Invalid parameter");
2540 return PKGMGR_R_EINVAL;
2543 ret = pkgmgr_client_connection_send_request(client,
2545 g_variant_new("(uss)", uid, appid, label), &result);
2546 if (ret != PKGMGR_R_OK) {
2547 ERR("Request failed: %d", ret);
2551 g_variant_get(result, "(i)", &ret);
2552 g_variant_unref(result);
2557 API int pkgmgr_client_set_app_label(pkgmgr_client *pc, char *appid, char *label)
2559 return pkgmgr_client_usr_set_app_label(pc, appid, label, _getuid());
2562 API int pkgmgr_client_usr_set_app_icon(pkgmgr_client *pc, char *appid,
2563 char *icon_path, uid_t uid)
2567 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2569 if (pc == NULL || appid == NULL || icon_path == NULL) {
2570 ERR("Invalid parameter");
2571 return PKGMGR_R_EINVAL;
2574 if (access(icon_path, F_OK) != 0) {
2575 ERR("failed to access: %s", icon_path);
2576 return PKGMGR_R_EINVAL;
2579 ret = pkgmgr_client_connection_send_request(client,
2581 g_variant_new("(uss)", uid, appid, icon_path), &result);
2582 if (ret != PKGMGR_R_OK) {
2583 ERR("Request failed: %d", ret);
2587 g_variant_get(result, "(i)", &ret);
2588 g_variant_unref(result);
2593 API int pkgmgr_client_set_app_icon(pkgmgr_client *pc, char *appid, char *icon_path)
2595 return pkgmgr_client_usr_set_app_icon(pc, appid, icon_path, _getuid());
2598 API int pkgmgr_client_set_debug_mode(pkgmgr_client *pc, bool debug_mode)
2600 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2603 ERR("invalid parameter");
2604 return PKGMGR_R_EINVAL;
2607 client->debug_mode = debug_mode;
2612 API int pkgmgr_client_set_skip_optimization(pkgmgr_client *pc, bool skip_optimization)
2614 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2617 ERR("invalid parameter");
2618 return PKGMGR_R_EINVAL;
2621 client->skip_optimization = skip_optimization;
2626 API int pkgmgr_client_usr_migrate_external_image(pkgmgr_client *pc,
2627 const char *pkgid, uid_t uid)
2630 int ret = PKGMGR_R_ECOMM;
2631 struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc;
2634 ERR("invalid parameter");
2635 return PKGMGR_R_EINVAL;
2638 ret = pkgmgr_client_connection_send_request(client,
2639 "migrate_external_image",
2640 g_variant_new("(us)", uid, pkgid), &result);
2641 if (ret != PKGMGR_R_OK) {
2642 ERR("request failed: %d", ret);
2646 g_variant_get(result, "(i)", &ret);
2647 g_variant_unref(result);