7 #include "comm_config.h"
9 #include "pkgmgr-server.h"
10 #include "package-manager.h"
11 #include "package-manager-debug.h"
13 static const char instropection_xml[] =
15 " <interface name='org.tizen.pkgmgr'>"
16 " <method name='install'>"
17 " <arg type='u' name='uid' direction='in'/>"
18 " <arg type='s' name='pkgtype' direction='in'/>"
19 " <arg type='s' name='pkgpath' direction='in'/>"
20 " <arg type='as' name='args' direction='in'/>"
21 " <arg type='i' name='ret' direction='out'/>"
22 " <arg type='s' name='reqkey' direction='out'/>"
24 " <method name='reinstall'>"
25 " <arg type='u' name='uid' direction='in'/>"
26 " <arg type='s' name='pkgtype' direction='in'/>"
27 " <arg type='s' name='pkgid' direction='in'/>"
28 " <arg type='i' name='ret' direction='out'/>"
29 " <arg type='s' name='reqkey' direction='out'/>"
31 " <method name='uninstall'>"
32 " <arg type='u' name='uid' direction='in'/>"
33 " <arg type='s' name='pkgtype' direction='in'/>"
34 " <arg type='s' name='pkgid' direction='in'/>"
35 " <arg type='i' name='ret' direction='out'/>"
36 " <arg type='s' name='reqkey' direction='out'/>"
38 " <method name='move'>"
39 " <arg type='u' name='uid' direction='in'/>"
40 " <arg type='s' name='pkgtype' direction='in'/>"
41 " <arg type='s' name='pkgid' direction='in'/>"
42 " <arg type='i' name='ret' direction='out'/>"
43 " <arg type='s' name='reqkey' direction='out'/>"
45 " <method name='enable_pkg'>"
46 " <arg type='u' name='uid' direction='in'/>"
47 " <arg type='s' name='pkgid' direction='in'/>"
48 " <arg type='i' name='ret' direction='out'/>"
50 " <method name='disable_pkg'>"
51 " <arg type='u' name='uid' direction='in'/>"
52 " <arg type='s' name='pkgid' direction='in'/>"
53 " <arg type='i' name='ret' direction='out'/>"
55 " <method name='enable_app'>"
56 " <arg type='u' name='uid' direction='in'/>"
57 " <arg type='s' name='appid' direction='in'/>"
58 " <arg type='i' name='ret' direction='out'/>"
60 " <method name='disable_app'>"
61 " <arg type='u' name='uid' direction='in'/>"
62 " <arg type='s' name='appid' direction='in'/>"
63 " <arg type='i' name='ret' direction='out'/>"
65 " <method name='enable_global_app'>"
66 " <arg type='u' name='uid' direction='in'/>"
67 " <arg type='s' name='appid' direction='in'/>"
68 " <arg type='i' name='ret' direction='out'/>"
70 " <method name='disable_global_app'>"
71 " <arg type='u' name='uid' direction='in'/>"
72 " <arg type='s' name='appid' direction='in'/>"
73 " <arg type='i' name='ret' direction='out'/>"
75 " <method name='getsize'>"
76 " <arg type='u' name='uid' direction='in'/>"
77 " <arg type='s' name='pkgid' direction='in'/>"
78 " <arg type='i' name='get_type' direction='in'/>"
79 " <arg type='i' name='ret' direction='out'/>"
80 " <arg type='s' name='reqkey' direction='out'/>"
82 " <method name='cleardata'>"
83 " <arg type='u' name='uid' direction='in'/>"
84 " <arg type='s' name='pkgtype' direction='in'/>"
85 " <arg type='s' name='pkgid' direction='in'/>"
86 " <arg type='i' name='ret' direction='out'/>"
88 " <method name='clearcache'>"
89 " <arg type='u' name='uid' direction='in'/>"
90 " <arg type='s' name='pkgid' direction='in'/>"
91 " <arg type='i' name='ret' direction='out'/>"
93 " <method name='kill'>"
94 " <arg type='u' name='uid' direction='in'/>"
95 " <arg type='s' name='pkgid' direction='in'/>"
96 " <arg type='i' name='ret' direction='out'/>"
98 " <method name='check'>"
99 " <arg type='u' name='uid' direction='in'/>"
100 " <arg type='s' name='pkgid' direction='in'/>"
101 " <arg type='i' name='ret' direction='out'/>"
103 " <method name='generate_license_request'>"
104 " <arg type='s' name='resp_data' direction='in'/>"
105 " <arg type='i' name='ret' direction='out'/>"
106 " <arg type='s' name='req_data' direction='out'/>"
107 " <arg type='s' name='license_url' direction='out'/>"
109 " <method name='register_license'>"
110 " <arg type='s' name='resp_data' direction='in'/>"
111 " <arg type='i' name='ret' direction='out'/>"
113 " <method name='decrypt_package'>"
114 " <arg type='s' name='drm_file_path' direction='in'/>"
115 " <arg type='s' name='decrypted_file_path' direction='in'/>"
116 " <arg type='i' name='ret' direction='out'/>"
120 static GDBusNodeInfo *instropection_data;
122 static guint owner_id;
123 static GHashTable *req_table;
125 static char *__generate_reqkey(const char *pkgid)
129 char timestr[MAX_PKG_ARGS_LEN];
133 gettimeofday(&tv, NULL);
134 curtime = tv.tv_sec * 1000000 + tv.tv_usec;
135 snprintf(timestr, sizeof(timestr), "%ld", curtime);
137 size = strlen(pkgid) + strlen(timestr) + 2;
138 str_req_key = (char *)calloc(size, sizeof(char));
139 if (str_req_key == NULL) {
140 DBG("calloc failed");
143 snprintf(str_req_key, size, "%s_%s", pkgid, timestr);
148 static int __handle_request_install(uid_t uid,
149 GDBusMethodInvocation *invocation, GVariant *parameters)
151 uid_t target_uid = (uid_t)-1;
152 char *pkgtype = NULL;
153 char *pkgpath = NULL;
156 gchar **tmp_args = NULL;
164 g_variant_get(parameters, "(u&s&s@as)", &target_uid, &pkgtype, &pkgpath, &value);
165 tmp_args = (gchar **)g_variant_get_strv(value, &args_count);
167 for (i = 0; i < args_count; i++)
168 len = len + strlen(tmp_args[i]) + 1;
170 args = (char *)calloc(len, sizeof(char));
172 ERR("calloc failed");
177 for (i = 0; i < args_count; i++) {
178 strncat(args, tmp_args[i], strlen(tmp_args[i]));
179 strncat(args, " ", strlen(" "));
182 if (target_uid == (uid_t)-1 || pkgtype == NULL) {
183 g_dbus_method_invocation_return_value(invocation,
184 g_variant_new("(is)", PKGMGR_R_ECOMM, ""));
189 if (pkgpath == NULL) {
190 g_dbus_method_invocation_return_value(invocation,
191 g_variant_new("(is)", PKGMGR_R_ECOMM, ""));
196 reqkey = __generate_reqkey(pkgpath);
197 if (reqkey == NULL) {
202 if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_INSTALL, pkgtype,
204 g_dbus_method_invocation_return_value(invocation,
205 g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
210 g_dbus_method_invocation_return_value(invocation,
211 g_variant_new("(is)", PKGMGR_R_OK, reqkey));
225 static int __handle_request_reinstall(uid_t uid,
226 GDBusMethodInvocation *invocation, GVariant *parameters)
228 uid_t target_uid = (uid_t)-1;
229 char *pkgtype = NULL;
233 g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
234 if (target_uid == (uid_t)-1 || pkgtype == NULL || pkgid == NULL) {
235 g_dbus_method_invocation_return_value(invocation,
236 g_variant_new("(is)", PKGMGR_R_ECOMM, ""));
240 reqkey = __generate_reqkey(pkgid);
243 if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_REINSTALL, pkgtype,
245 g_dbus_method_invocation_return_value(invocation,
246 g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
251 g_dbus_method_invocation_return_value(invocation,
252 g_variant_new("(is)", PKGMGR_R_OK, reqkey));
258 static int __handle_request_uninstall(uid_t uid,
259 GDBusMethodInvocation *invocation, GVariant *parameters)
261 uid_t target_uid = (uid_t)-1;
262 char *pkgtype = NULL;
266 g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
267 if (target_uid == (uid_t)-1 || pkgtype == NULL || pkgid == NULL) {
268 g_dbus_method_invocation_return_value(invocation,
269 g_variant_new("(is)", PKGMGR_R_ECOMM, ""));
273 reqkey = __generate_reqkey(pkgid);
276 if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_UNINSTALL, pkgtype,
278 g_dbus_method_invocation_return_value(invocation,
279 g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
284 g_dbus_method_invocation_return_value(invocation,
285 g_variant_new("(is)", PKGMGR_R_OK, reqkey));
291 static int __handle_request_move(uid_t uid,
292 GDBusMethodInvocation *invocation, GVariant *parameters)
294 uid_t target_uid = (uid_t)-1;
295 char *pkgtype = NULL;
299 g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
300 if (target_uid == (uid_t)-1 || pkgtype == NULL || pkgid == NULL) {
301 g_dbus_method_invocation_return_value(invocation,
302 g_variant_new("(is)", PKGMGR_R_ECOMM, ""));
306 reqkey = __generate_reqkey(pkgid);
309 if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_MOVE, pkgtype,
311 g_dbus_method_invocation_return_value(invocation,
312 g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
317 g_dbus_method_invocation_return_value(invocation,
318 g_variant_new("(is)", PKGMGR_R_OK, reqkey));
324 static int __handle_request_enable(uid_t uid,
325 GDBusMethodInvocation *invocation, GVariant *parameters)
327 uid_t target_uid = (uid_t)-1;
330 g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
331 if (target_uid == (uid_t)-1 || pkgid == NULL) {
332 g_dbus_method_invocation_return_value(invocation,
333 g_variant_new("(i)", PKGMGR_R_ECOMM));
337 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_ENABLE, "none",
339 g_dbus_method_invocation_return_value(invocation,
340 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
344 g_dbus_method_invocation_return_value(invocation,
345 g_variant_new("(i)", PKGMGR_R_OK));
350 static int __handle_request_disable(uid_t uid,
351 GDBusMethodInvocation *invocation, GVariant *parameters)
353 uid_t target_uid = (uid_t)-1;
356 g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
357 if (target_uid == (uid_t)-1 || pkgid == NULL) {
358 g_dbus_method_invocation_return_value(invocation,
359 g_variant_new("(i)", PKGMGR_R_ECOMM));
363 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_DISABLE, "none",
365 g_dbus_method_invocation_return_value(invocation,
366 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
370 g_dbus_method_invocation_return_value(invocation,
371 g_variant_new("(i)", PKGMGR_R_OK));
376 static int __handle_request_enable_global_app(uid_t uid,
377 GDBusMethodInvocation *invocation, GVariant *parameters)
379 uid_t target_uid = (uid_t)-1;
382 g_variant_get(parameters, "(u&s)", &target_uid, &appid);
383 if (target_uid == (uid_t)-1 || appid == NULL) {
384 g_dbus_method_invocation_return_value(invocation,
385 g_variant_new("(i)", PKGMGR_R_ECOMM));
389 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP, "none",
391 g_dbus_method_invocation_return_value(invocation,
392 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
396 g_dbus_method_invocation_return_value(invocation,
397 g_variant_new("(i)", PKGMGR_R_OK));
402 static int __handle_request_disable_global_app(uid_t uid,
403 GDBusMethodInvocation *invocation, GVariant *parameters)
405 uid_t target_uid = (uid_t)-1;
408 g_variant_get(parameters, "(u&s)", &target_uid, &appid);
409 if (target_uid == (uid_t)-1 || appid == NULL) {
410 g_dbus_method_invocation_return_value(invocation,
411 g_variant_new("(i)", PKGMGR_R_ECOMM));
415 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP, "none",
417 g_dbus_method_invocation_return_value(invocation,
418 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
422 g_dbus_method_invocation_return_value(invocation,
423 g_variant_new("(i)", PKGMGR_R_OK));
428 static int __handle_request_getsize(uid_t uid,
429 GDBusMethodInvocation *invocation, GVariant *parameters)
431 uid_t target_uid = (uid_t)-1;
437 g_variant_get(parameters, "(u&si)", &target_uid, &pkgid, &get_type);
438 if (target_uid == (uid_t)-1 || pkgid == NULL || get_type == -1) {
439 g_dbus_method_invocation_return_value(invocation,
440 g_variant_new("(is)", PKGMGR_R_ECOMM, ""));
444 reqkey = __generate_reqkey(pkgid);
448 snprintf(buf, sizeof(buf), "%d", get_type);
449 if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_GETSIZE, "getsize",
451 g_dbus_method_invocation_return_value(invocation,
452 g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
457 g_dbus_method_invocation_return_value(invocation,
458 g_variant_new("(is)", PKGMGR_R_OK, reqkey));
464 static int __handle_request_cleardata(uid_t uid,
465 GDBusMethodInvocation *invocation, GVariant *parameters)
467 uid_t target_uid = (uid_t)-1;
468 char *pkgtype = NULL;
471 g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
472 if (target_uid == (uid_t)-1 || pkgtype == NULL || pkgid == NULL) {
473 g_dbus_method_invocation_return_value(invocation,
474 g_variant_new("(i)", PKGMGR_R_ECOMM));
478 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_CLEARDATA, pkgtype,
480 g_dbus_method_invocation_return_value(invocation,
481 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
485 g_dbus_method_invocation_return_value(invocation,
486 g_variant_new("(i)", PKGMGR_R_OK));
491 static int __handle_request_clearcache(uid_t uid,
492 GDBusMethodInvocation *invocation, GVariant *parameters)
494 uid_t target_uid = (uid_t)-1;
497 g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
498 if (target_uid == (uid_t)-1 || pkgid == NULL) {
499 g_dbus_method_invocation_return_value(invocation,
500 g_variant_new("(i)", PKGMGR_R_ECOMM));
504 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_CLEARCACHE,
505 "clearcache", pkgid, "")) {
506 g_dbus_method_invocation_return_value(invocation,
507 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
511 g_dbus_method_invocation_return_value(invocation,
512 g_variant_new("(i)", PKGMGR_R_OK));
517 static int __handle_request_kill(uid_t uid,
518 GDBusMethodInvocation *invocation, GVariant *parameters)
520 uid_t target_uid = (uid_t)-1;
523 g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
524 if (target_uid == (uid_t)-1 || pkgid == NULL) {
525 g_dbus_method_invocation_return_value(invocation,
526 g_variant_new("(i)", PKGMGR_R_ECOMM));
530 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_KILL, "pkg",
532 g_dbus_method_invocation_return_value(invocation,
533 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
537 g_dbus_method_invocation_return_value(invocation,
538 g_variant_new("(i)", PKGMGR_R_OK));
543 static int __handle_request_check(uid_t uid,
544 GDBusMethodInvocation *invocation, GVariant *parameters)
546 uid_t target_uid = (uid_t)-1;
549 g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
550 if (target_uid == (uid_t)-1 || pkgid == NULL) {
551 g_dbus_method_invocation_return_value(invocation,
552 g_variant_new("(i)", PKGMGR_R_ECOMM));
556 if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_CHECK, "pkg",
558 g_dbus_method_invocation_return_value(invocation,
559 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
563 g_dbus_method_invocation_return_value(invocation,
564 g_variant_new("(i)", PKGMGR_R_OK));
569 static int __handle_request_generate_license_request(uid_t uid,
570 GDBusMethodInvocation *invocation, GVariant *parameters)
573 char *resp_data = NULL;
575 g_variant_get(parameters, "(&s)", &resp_data);
576 if (resp_data == NULL) {
577 g_dbus_method_invocation_return_value(invocation,
578 g_variant_new("(iss)", PKGMGR_R_ECOMM, "", ""));
582 reqkey = __generate_reqkey("drm");
583 if (reqkey == NULL) {
584 g_dbus_method_invocation_return_value(invocation,
585 g_variant_new("(iss)", PKGMGR_R_ENOMEM, "",
590 if (_pm_queue_push(uid, reqkey,
591 PKGMGR_REQUEST_TYPE_GENERATE_LICENSE_REQUEST,
592 "pkg", "", resp_data)) {
593 g_dbus_method_invocation_return_value(invocation,
594 g_variant_new("(iss)", PKGMGR_R_ESYSTEM, "",
600 if (!g_hash_table_insert(req_table, (gpointer)reqkey,
601 (gpointer)invocation))
602 ERR("reqkey already exists");
607 static int __handle_request_register_license(uid_t uid,
608 GDBusMethodInvocation *invocation, GVariant *parameters)
611 char *resp_data = NULL;
613 g_variant_get(parameters, "(&s)", &resp_data);
614 if (resp_data == NULL) {
615 g_dbus_method_invocation_return_value(invocation,
616 g_variant_new("(i)", PKGMGR_R_ECOMM));
620 reqkey = __generate_reqkey("drm");
621 if (reqkey == NULL) {
622 g_dbus_method_invocation_return_value(invocation,
623 g_variant_new("(i)", PKGMGR_R_ENOMEM));
627 if (_pm_queue_push(uid, reqkey, PKGMGR_REQUEST_TYPE_REGISTER_LICENSE,
628 "pkg", "", resp_data)) {
629 g_dbus_method_invocation_return_value(invocation,
630 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
635 if (!g_hash_table_insert(req_table, (gpointer)reqkey,
636 (gpointer)invocation))
637 ERR("reqkey already exists");
642 static int __handle_request_decrypt_package(uid_t uid,
643 GDBusMethodInvocation *invocation, GVariant *parameters)
646 char *drm_file_path = NULL;
647 char *decrypted_file_path = NULL;
649 g_variant_get(parameters, "(&s&s)", &drm_file_path,
650 &decrypted_file_path);
651 if (drm_file_path == NULL || decrypted_file_path == NULL) {
652 g_dbus_method_invocation_return_value(invocation,
653 g_variant_new("(i)", PKGMGR_R_ECOMM));
657 reqkey = __generate_reqkey("drm");
658 if (reqkey == NULL) {
659 g_dbus_method_invocation_return_value(invocation,
660 g_variant_new("(i)", PKGMGR_R_ENOMEM));
664 if (_pm_queue_push(uid, reqkey, PKGMGR_REQUEST_TYPE_DECRYPT_PACKAGE,
665 "pkg", drm_file_path, decrypted_file_path)) {
666 g_dbus_method_invocation_return_value(invocation,
667 g_variant_new("(i)", PKGMGR_R_ESYSTEM));
672 if (!g_hash_table_insert(req_table, (gpointer)reqkey,
673 (gpointer)invocation))
674 ERR("reqkey already exists");
679 static uid_t __get_caller_uid(GDBusConnection *connection, const char *name)
685 result = g_dbus_connection_call_sync(connection,
686 "org.freedesktop.DBus", "/org/freedesktop/DBus",
687 "org.freedesktop.DBus", "GetConnectionUnixUser",
688 g_variant_new("(s)", name), NULL,
689 G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
690 if (result == NULL) {
691 ERR("failed to get caller uid: %s", err->message);
696 g_variant_get(result, "(u)", &uid);
701 static void __handle_method_call(GDBusConnection *connection,
702 const gchar *sender, const gchar *object_path,
703 const gchar *interface_name, const gchar *method_name,
704 GVariant *parameters, GDBusMethodInvocation *invocation,
710 uid = __get_caller_uid(connection,
711 g_dbus_method_invocation_get_sender(invocation));
712 if (uid == (uid_t)-1)
715 if (g_strcmp0(method_name, "install") == 0)
716 ret = __handle_request_install(uid, invocation, parameters);
717 else if (g_strcmp0(method_name, "reinstall") == 0)
718 ret = __handle_request_reinstall(uid, invocation, parameters);
719 else if (g_strcmp0(method_name, "uninstall") == 0)
720 ret = __handle_request_uninstall(uid, invocation, parameters);
721 else if (g_strcmp0(method_name, "cleardata") == 0)
722 ret = __handle_request_cleardata(uid, invocation, parameters);
723 else if (g_strcmp0(method_name, "move") == 0)
724 ret = __handle_request_move(uid, invocation, parameters);
725 else if (g_strcmp0(method_name, "enable") == 0)
726 ret = __handle_request_enable(uid, invocation, parameters);
727 else if (g_strcmp0(method_name, "disable") == 0)
728 ret = __handle_request_disable(uid, invocation, parameters);
729 else if (g_strcmp0(method_name, "getsize") == 0)
730 ret = __handle_request_getsize(uid, invocation, parameters);
731 else if (g_strcmp0(method_name, "clearcache") == 0)
732 ret = __handle_request_clearcache(uid, invocation, parameters);
733 else if (g_strcmp0(method_name, "enable_global_app") == 0)
734 ret = __handle_request_enable_global_app(uid, invocation, parameters);
735 else if (g_strcmp0(method_name, "disable_global_app") == 0)
736 ret = __handle_request_disable_global_app(uid, invocation, parameters);
737 else if (g_strcmp0(method_name, "kill") == 0)
738 ret = __handle_request_kill(uid, invocation, parameters);
739 else if (g_strcmp0(method_name, "check") == 0)
740 ret = __handle_request_check(uid, invocation, parameters);
741 else if (g_strcmp0(method_name, "generate_license_request") == 0)
742 ret = __handle_request_generate_license_request(uid, invocation,
744 else if (g_strcmp0(method_name, "register_license") == 0)
745 ret = __handle_request_register_license(uid, invocation,
747 else if (g_strcmp0(method_name, "decrypt_package") == 0)
748 ret = __handle_request_decrypt_package(uid, invocation,
754 g_idle_add(queue_job, NULL);
757 int __return_value_to_caller(const char *req_key, GVariant *result)
759 GDBusMethodInvocation *invocation;
761 invocation = (GDBusMethodInvocation *)g_hash_table_lookup(req_table,
763 if (invocation == NULL) {
764 ERR("no such request id");
768 g_dbus_method_invocation_return_value(invocation, result);
769 g_hash_table_remove(req_table, (gpointer)req_key);
774 static const GDBusInterfaceVTable interface_vtable =
776 __handle_method_call,
781 static void __on_bus_acquired(GDBusConnection *connection, const gchar *name,
786 DBG("on bus acquired");
788 reg_id = g_dbus_connection_register_object(connection,
789 COMM_PKGMGR_DBUS_OBJECT_PATH,
790 instropection_data->interfaces[0],
791 &interface_vtable, NULL, NULL, &err);
794 ERR("failed to register object: %s", err->message);
799 static void __on_name_acquired(GDBusConnection *connection, const gchar *name,
802 DBG("on name acquired: %s", name);
805 static void __on_name_lost(GDBusConnection *connection, const gchar *name,
808 DBG("on name lost: %s", name);
811 int __init_request_handler(void)
813 instropection_data = g_dbus_node_info_new_for_xml(instropection_xml, NULL);
815 owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, COMM_PKGMGR_DBUS_SERVICE,
816 G_BUS_NAME_OWNER_FLAGS_NONE, __on_bus_acquired,
817 __on_name_acquired, __on_name_lost, NULL, NULL);
819 req_table = g_hash_table_new_full(g_str_hash, g_str_equal,
821 if (req_table == NULL)
827 void __fini_request_handler(void)
829 g_hash_table_destroy(req_table);
830 g_bus_unown_name(owner_id);
831 g_dbus_node_info_unref(instropection_data);