tizen 2.4 release
[framework/appfw/aul-1.git] / delegator / delegator_client.c
1 #define _GNU_SOURCE
2 #include <string.h>
3 #include <bundle.h>
4 #include <bundle_internal.h>
5 #include <pkgmgr-info.h>
6 #include "aul.h"
7 #include "aul_svc.h"
8 #include "delegator_config.h"
9 #include "delegator_client_gdbus_generated.h"
10 #include "delegator_client.h"
11 #include "aul_svc_priv_key.h"
12
13 #ifdef LOG_TAG
14 #undef LOG_TAG
15 #endif
16 #define LOG_TAG "DELEGATOR_CLIENT"
17
18 int delegator_client_launch(const char *zone, bundle* kb)
19 {
20         GError *error = NULL;
21         int ret = 0;
22         GDBusConnection *conn;
23         OrgTizenAulDelegator *proxy;
24
25         if (zone == NULL)
26                 return AUL_SVC_RET_EINVAL;
27
28         conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
29         if (error) {
30                 SECURE_LOGE("gdbus connection error (%s)", error->message);
31                 g_error_free(error);
32         }
33         if (conn == NULL) {
34                 SECURE_LOGE(
35                                 "gdbus connection is not set, even gdbus error isn't raised");
36                 return AUL_SVC_RET_ERROR;
37         }
38
39         proxy = org_tizen_aul_delegator_proxy_new_sync(conn,
40                         G_DBUS_PROXY_FLAGS_NONE, DELEGATOR_INTERFACE,
41                         DELEGATOR_NODE,
42                         NULL, &error);
43         if (proxy == NULL) {
44                 SECURE_LOGE("Unable to create proxy[err=%s]\n", error->message);
45                 g_error_free(error);
46                 g_object_unref(conn);
47                 return AUL_SVC_RET_ERROR;
48         }
49
50         bundle_raw* br = NULL;
51         int len;
52
53         if (kb != NULL) {
54                 bundle_encode(kb, &br, &len);
55         }
56         org_tizen_aul_delegator_call_launch_sync(proxy, zone,
57                         (const gchar *) br, &ret,
58                         NULL, &error);
59
60         if (br != NULL)
61                 free(br);
62         g_dbus_connection_flush_sync(conn, NULL, NULL);
63         g_object_unref(conn);
64
65         return ret;
66 }
67
68 int delegator_client_can_jump(char **zone, bundle *kb)
69 {
70         if (kb != NULL) {
71                 char *val = NULL;
72
73                 bundle_get_str(kb, AUL_SVC_K_OPERATION, &val);
74                 if (val != NULL && strcmp(AUL_SVC_OPERATION_JUMP, val) == 0) {
75                         char *op = NULL;
76                         char *domain = NULL;
77
78                         bundle_del(kb, AUL_SVC_K_OPERATION);
79                         bundle_get_str(kb, AUL_SVC_K_JUMP_ORIGIN_OPERATION, &op);
80                         bundle_get_str(kb, AUL_SVC_K_JUMP_ZONE_NAME, &domain);
81
82                         if (domain != NULL) {
83                                 if (op != NULL) {
84                                         bundle_add_str(kb, AUL_SVC_K_OPERATION, op);
85                                 }
86
87                                 *zone = strdup(domain);
88                                 bundle_del(kb, AUL_SVC_K_JUMP_ZONE_NAME);
89                                 bundle_del(kb, AUL_SVC_K_JUMP_ORIGIN_OPERATION);
90                                 return AUL_SVC_RET_OK;
91                         }
92                 }
93         }
94
95         return AUL_SVC_RET_EREJECTED;
96 }
97
98
99