e7cf47aa7e46b7a42930218a9b7208a4547d74ed
[platform/core/system/libsyscommon.git] / src / libgdbus / dbus-system.h
1 /*
2  * deviced
3  *
4  * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19
20 #ifndef __DBUS_H__
21 #define __DBUS_H__
22
23 #include <glib.h>
24 #include <gio/gio.h>
25 #include <glib-unix.h>
26 #include <gio/gunixfdlist.h>
27 #include <stdarg.h>
28 #include <assert.h>
29
30 /*
31  * Template
32  *
33 #define XXX_BUS_NAME                        "org.tizen.system.XXX"
34 #define XXX_OBJECT_PATH                     "/Org/Tizen/System/XXX"
35 #define XXX_INTERFACE_NAME                  XXX_BUS_NAME
36 #define XXX_PATH_YYY                        XXX_OBJECT_PATH"/YYY"
37 #define XXX_INTERFACE_YYY                   XXX_INTERFACE_NAME".YYY"
38 #define XXX_SIGNAL_ZZZ                      "ZZZ"
39 #define XXX_METHOD_ZZZ                      "ZZZ"
40  */
41
42 /*******************************************************************************
43  *
44  * DBus daemon
45  *
46  ******************************************************************************/
47 #define DBUS_BUS_NAME                       "org.freedesktop.DBus"
48 #define DBUS_OBJECT_PATH                    "/org/freedesktop/DBus"
49 #define DBUS_INTERFACE_NAME                 DBUS_BUS_NAME
50
51 /*******************************************************************************
52  *
53  * System daemon (systemd)
54  *
55  ******************************************************************************/
56 #define SYSTEMD_DBUS_PATH                            "/org/freedesktop/systemd1"
57 #define SYSTEMD_DBUS_DEST                            "org.freedesktop.systemd1"
58 #define SYSTEMD_DBUS_IFACE_MANAGER                   SYSTEMD_DBUS_DEST ".Manager"
59 #define SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED  "StartupFinished"
60
61 /*******************************************************************************
62  *
63  * Device daemon (deviced)
64  *
65  ******************************************************************************/
66 #define DEVICED_BUS_NAME                    "org.tizen.system.deviced"
67 #define DEVICED_OBJECT_PATH                 "/Org/Tizen/System/DeviceD"
68 #define DEVICED_INTERFACE_NAME              DEVICED_BUS_NAME
69 /* Core service: get/set device status operations about device */
70 #define DEVICED_PATH_CORE                   DEVICED_OBJECT_PATH"/Core"
71 #define DEVICED_INTERFACE_CORE              DEVICED_INTERFACE_NAME".core"
72 /* Display service: start/stop display(pm), get/set brightness operations about display */
73 #define DEVICED_PATH_DISPLAY                DEVICED_OBJECT_PATH"/Display"
74 #define DEVICED_INTERFACE_DISPLAY           DEVICED_INTERFACE_NAME".display"
75 /* Pass service: start/stop pass operations about pass */
76 #define DEVICED_PATH_PASS                   DEVICED_OBJECT_PATH"/Pass"
77 #define DEVICED_INTERFACE_PASS              DEVICED_INTERFACE_NAME".pass"
78 /* Power service: set resetkey disable operations about power */
79 #define DEVICED_PATH_POWER                  DEVICED_OBJECT_PATH"/Power"
80 #define DEVICED_INTERFACE_POWER             DEVICED_INTERFACE_NAME".power"
81 /* Low Power service: start/stop low power mode */
82 #define DEVICED_PATH_LOWPOWER              DEVICED_OBJECT_PATH"/LowPower"
83 #define DEVICED_INTERFACE_LOWPOWER         DEVICED_INTERFACE_NAME".lowpower"
84 /* Reboot service: request reboot operation */
85 #define DEVICED_PATH_REBOOT                 DEVICED_OBJECT_PATH"/Reboot"
86 #define DEVICED_INTERFACE_REBOOT            DEVICED_INTERFACE_NAME".reboot"
87 /* Storage service: get storage size operatioins about storage */
88 #define DEVICED_PATH_STORAGE                DEVICED_OBJECT_PATH"/Storage"
89 #define DEVICED_INTERFACE_STORAGE           DEVICED_INTERFACE_NAME".storage"
90 /* ODE service: request ode popup result operatioins about storage */
91 #define DEVICED_PATH_SDE                    DEVICED_OBJECT_PATH"/Sde"
92 #define DEVICED_INTERFACE_SDE               DEVICED_INTERFACE_NAME".sde"
93 #define DEVICED_PATH_ODE                    DEVICED_OBJECT_PATH"/Ode"
94 #define DEVICED_INTERFACE_ODE               DEVICED_INTERFACE_NAME".ode"
95 /* Poweroff service: get power off status operations about Poweroff */
96 #define DEVICED_PATH_POWEROFF               DEVICED_OBJECT_PATH"/PowerOff"
97 #define DEVICED_INTERFACE_POWEROFF          DEVICED_INTERFACE_NAME".PowerOff"
98 /* Led service: play/stop led operations about led */
99 #define DEVICED_PATH_LED                    DEVICED_OBJECT_PATH"/Led"
100 #define DEVICED_INTERFACE_LED               DEVICED_INTERFACE_NAME".Led"
101 /* Process service: operations about process */
102 #define DEVICED_PATH_PROCESS                DEVICED_OBJECT_PATH"/Process"
103 #define DEVICED_INTERFACE_PROCESS           DEVICED_INTERFACE_NAME".Process"
104 /* Key service: operations about key */
105 #define DEVICED_PATH_KEY                    DEVICED_OBJECT_PATH"/Key"
106 #define DEVICED_INTERFACE_KEY               DEVICED_INTERFACE_NAME".Key"
107 /* USB client service: change usb connection mode */
108 #define DEVICED_PATH_USB                    DEVICED_OBJECT_PATH"/Usb"
109 #define DEVICED_INTERFACE_USB               DEVICED_INTERFACE_NAME".Usb"
110 /* USB start/stop service: operations about usb start/stop */
111 #define DEVICED_PATH_USB_CONTROL            DEVICED_OBJECT_PATH"/UsbControl"
112 #define DEVICED_INTERFACE_USB_CONTROL       DEVICED_INTERFACE_NAME".UsbControl"
113 /* USB host service: operations about usb start/stop */
114 #define DEVICED_PATH_USBHOST                DEVICED_OBJECT_PATH"/Usbhost"
115 #define DEVICED_INTERFACE_USBHOST           DEVICED_INTERFACE_NAME".Usbhost"
116 /* Sysnoti service */
117 #define DEVICED_PATH_SYSNOTI                DEVICED_OBJECT_PATH"/SysNoti"
118 #define DEVICED_INTERFACE_SYSNOTI           DEVICED_INTERFACE_NAME".SysNoti"
119 /* ExtCon service */
120 #define DEVICED_PATH_EXTCON                 DEVICED_OBJECT_PATH"/ExtCon"
121 #define DEVICED_INTERFACE_EXTCON            DEVICED_INTERFACE_NAME".ExtCon"
122 /* Battery service */
123 #define DEVICED_PATH_BATTERY                DEVICED_OBJECT_PATH"/Battery"
124 #define DEVICED_INTERFACE_BATTERY           DEVICED_INTERFACE_NAME".Battery"
125 /* Time service */
126 #define DEVICED_PATH_TIME                   DEVICED_OBJECT_PATH"/Time"
127 #define DEVICED_INTERFACE_TIME              DEVICED_INTERFACE_NAME".Time"
128 /* IR service */
129 #define DEVICED_PATH_IR                     DEVICED_OBJECT_PATH"/Ir"
130 #define DEVICED_INTERFACE_IR                DEVICED_INTERFACE_NAME".ir"
131 /* USB_HOST_TEST service */
132 #define DEVICED_PATH_USB_HOST_TEST          DEVICED_OBJECT_PATH"/UsbHostTest"
133 #define DEVICED_INTERFACE_USB_HOST_TEST     DEVICED_INTERFACE_NAME".UsbHostTest"
134
135 /* HDMICEC service: status check about gpio */
136 #define DEVICED_PATH_HDMICEC                    DEVICED_OBJECT_PATH"/HdmiCec"
137 #define DEVICED_INTERFACE_HDMICEC               DEVICED_INTERFACE_NAME".HdmiCec"
138
139 /* Tzip service: Archive file system */
140 #define DEVICED_PATH_TZIP                    DEVICED_OBJECT_PATH"/Tzip"
141 #define DEVICED_INTERFACE_TZIP               DEVICED_INTERFACE_NAME".Tzip"
142
143 /* Touch service */
144 #define DEVICED_PATH_TOUCH                   DEVICED_OBJECT_PATH"/Touch"
145 #define DEVICED_INTERFACE_TOUCH              DEVICED_INTERFACE_NAME".Touch"
146
147 /* Thermal service: operatioins about temperature */
148 #define DEVICED_PATH_TEMPERATURE            DEVICED_OBJECT_PATH"/Temperature"
149 #define DEVICED_INTERFACE_TEMPERATURE       DEVICED_INTERFACE_NAME".temperature"
150
151 /*******************************************************************************
152  *
153  * Storage daemon (storaged)
154  *
155  ******************************************************************************/
156 #define STORAGED_BUS_NAME                    "org.tizen.system.storage"
157 #define STORAGED_OBJECT_PATH                 "/Org/Tizen/System/Storage"
158 #define STORAGED_INTERFACE_NAME              STORAGED_BUS_NAME
159
160 /* Block service */
161 #define STORAGED_PATH_BLOCK                  STORAGED_OBJECT_PATH"/Block"
162 #define STORAGED_PATH_BLOCK_MANAGER          STORAGED_PATH_BLOCK"/Manager"
163 #define STORAGED_INTERFACE_BLOCK_MANAGER     STORAGED_INTERFACE_NAME".BlockManager"
164
165 /* Storage service: get storage size operatioins about storage */
166 #define STORAGED_PATH_STORAGE                STORAGED_OBJECT_PATH"/Storage"
167 #define STORAGED_INTERFACE_STORAGE           STORAGED_INTERFACE_NAME".storage"
168
169 /* Lowmem service: get critical low status operations about Lowmem */
170 #define STORAGED_PATH_LOWMEM                 STORAGED_OBJECT_PATH"/Lowmem"
171 #define STORAGED_INTERFACE_LOWMEM            STORAGED_INTERFACE_NAME".lowmem"
172
173
174 /*******************************************************************************
175  *
176  * Vibrator daemon
177  *
178  ******************************************************************************/
179 #define VIBRATOR_BUS_NAME                   "org.tizen.system.vibrator"
180 #define VIBRATOR_OBJECT_PATH                "/Org/Tizen/System/Vibrator"
181 #define VIBRATOR_INTERFACE_NAME              VIBRATOR_BUS_NAME
182 /* Core service: get/set device status operations about device */
183 #define VIBRATOR_PATH_CORE                   VIBRATOR_OBJECT_PATH"/Core"
184 #define VIBRATOR_INTERFACE_CORE              VIBRATOR_INTERFACE_NAME".core"
185
186 #define VIBRATOR_PATH_HAPTIC                 VIBRATOR_OBJECT_PATH"/Haptic"
187 #define VIBRATOR_INTERFACE_HAPTIC            VIBRATOR_INTERFACE_NAME".haptic"
188
189 /*
190  * Resource daemon
191  */
192 #define RESOURCED_BUS_NAME                  "org.tizen.resourced"
193 #define RESOURCED_OBJECT_PATH               "/Org/Tizen/ResourceD"
194 #define RESOURCED_INTERFACE_NAME            RESOURCED_BUS_NAME
195
196 #define RESOURCED_PATH_PROCESS              RESOURCED_OBJECT_PATH"/Process"
197 #define RESOURCED_INTERFACE_PROCESS         RESOURCED_INTERFACE_NAME".process"
198 #define RESOURCED_METHOD_ACTIVE             "Active"
199
200 #define RESOURCED_PATH_FREEZER              RESOURCED_OBJECT_PATH"/Freezer"
201 #define RESOURCED_INTERFACE_FREEZER         RESOURCED_INTERFACE_NAME".freezer"
202
203 #define RESOURCED_PATH_SLUGGISH              RESOURCED_OBJECT_PATH"/Sluggish"
204 #define RESOURCED_INTERFACE_SLUGGISH         RESOURCED_INTERFACE_NAME".sluggish"
205 #define RESOURCED_SIGNAL_SLUGGISH                       "SluggishDetected"
206
207 #define RESOURCED_PATH_LOGGING              RESOURCED_OBJECT_PATH"/Logging"
208 #define RESOURCED_INTERFACE_LOGGING         RESOURCED_INTERFACE_NAME".logging"
209 /*
210  * Popup launcher
211  */
212 #define POPUP_BUS_NAME                      "org.tizen.system.popup"
213 #define POPUP_OBJECT_PATH                   "/Org/Tizen/System/Popup"
214 #define POPUP_INTERFACE_NAME                POPUP_BUS_NAME
215 /* LED */
216 #define POPUP_PATH_LED                      POPUP_OBJECT_PATH"/Led"
217 #define POPUP_INTERFACE_LED                 POPUP_INTERFACE_NAME".Led"
218 /* System */
219 #define POPUP_PATH_SYSTEM                   POPUP_OBJECT_PATH"/System"
220 #define POPUP_INTERFACE_SYSTEM              POPUP_INTERFACE_NAME".System"
221 /* Notification */
222 #define POPUP_PATH_NOTI                     POPUP_OBJECT_PATH"/Noti"
223 #define POPUP_INTERFACE_NOTI                POPUP_INTERFACE_NAME".Noti"
224 /* Power key longpress */
225 #define POPUP_PATH_POWERKEY                 POPUP_OBJECT_PATH"/Powerkey"
226 #define POPUP_INTERFACE_POWERKEY            POPUP_INTERFACE_NAME".Powerkey"
227 /* Low battery */
228 #define POPUP_PATH_LOWBAT                   POPUP_OBJECT_PATH"/Lowbat"
229 #define POPUP_INTERFACE_LOWBAT              POPUP_INTERFACE_NAME".Lowbat"
230 /* Low memory */
231 #define POPUP_PATH_LOWMEM                   POPUP_OBJECT_PATH"/Lowmem"
232 #define POPUP_INTERFACE_LOWMEM              POPUP_INTERFACE_NAME".Lowmem"
233 /* MMC */
234 #define POPUP_PATH_MMC                      POPUP_OBJECT_PATH"/Mmc"
235 #define POPUP_INTERFACE_MMC                 POPUP_INTERFACE_NAME".Mmc"
236 /* USB */
237 #define POPUP_PATH_USB                      POPUP_OBJECT_PATH"/Usb"
238 #define POPUP_INTERFACE_USB                 POPUP_INTERFACE_NAME".Usb"
239 /* USB otg */
240 #define POPUP_PATH_USBOTG                   POPUP_OBJECT_PATH"/Usbotg"
241 #define POPUP_INTERFACE_USBOTG              POPUP_INTERFACE_NAME".Usbotg"
242 /* USB host */
243 #define POPUP_PATH_USBHOST                  POPUP_OBJECT_PATH"/Usbhost"
244 #define POPUP_INTERFACE_USBHOST             POPUP_INTERFACE_NAME".Usbhost"
245 /* System */
246 #define POPUP_PATH_SYSTEM                   POPUP_OBJECT_PATH"/System"
247 #define POPUP_INTERFACE_SYSTEM              POPUP_INTERFACE_NAME".System"
248 /* Overheat */
249 #define POPUP_PATH_OVERHEAT                 POPUP_OBJECT_PATH"/Overheat"
250 #define POPUP_INTERFACE_OVERHEAT            POPUP_INTERFACE_NAME".Overheat"
251 /* Crash */
252 #define POPUP_PATH_CRASH                    POPUP_OBJECT_PATH"/Crash"
253 #define POPUP_INTERFACE_CRASH               POPUP_INTERFACE_NAME".Crash"
254 /* Servant */
255 #define POPUP_PATH_SERVANT                  POPUP_OBJECT_PATH"/Servant"
256 #define POPUP_IFACE_SERVANT                 POPUP_INTERFACE_NAME".Servant"
257
258 #define POPUP_PATH_APP                      POPUP_OBJECT_PATH"/Apps"
259 #define POPUP_IFACE_APP                     POPUP_BUS_NAME".Apps"
260
261 #define POPUP_METHOD_LAUNCH                 "PopupLaunch"
262 #define POPUP_METHOD_TERMINATE              "AppTerminateByPid"
263 #define POPUP_KEY_CONTENT                   "_SYSPOPUP_CONTENT_"
264
265 /*
266  * Crash daemon
267  */
268 #define CRASHD_BUS_NAME                     "org.tizen.system.crashd"
269 #define CRASHD_OBJECT_PATH                  "/Org/Tizen/System/CrashD"
270 #define CRASHD_INTERFACE_NAME               CRASHD_BUS_NAME
271
272 #define CRASHD_PATH_CRASH                   CRASHD_OBJECT_PATH"/Crash"
273 #define CRASHD_INTERFACE_CRASH              CRASHD_INTERFACE_NAME".Crash"
274
275 /*
276  * Device Manager Policy Popup
277  */
278 #define DEVICEMANAGER_BUS_NAME                     "org.tizen.DevicePolicyManager"
279 #define DEVICEMANAGER_OBJECT_PATH                  "/org/tizen/DevicePolicyManager"
280 #define DEVICEMANAGER_INTERFACE_NAME               DEVICEMANAGER_BUS_NAME
281
282 #define DEVICEMANAGER_PATH_POPUP                   DEVICEMANAGER_OBJECT_PATH"/Syspopup"
283 #define DEVICEMANAGER_INTERFACE_POPUP              DEVICEMANAGER_INTERFACE_NAME".Syspopup"
284
285
286 /***************************************************************/
287 /* Experimental for Specific device - contact to deviced owner */
288 /***************************************************************/
289
290 /* Hall service: get hall status operations about hall */
291 #define DEVICED_PATH_HALL                   DEVICED_OBJECT_PATH"/Hall"
292 #define DEVICED_INTERFACE_HALL              DEVICED_INTERFACE_NAME".hall"
293 /* Cpu service: operations about cpu */
294 #define DEVICED_PATH_CPU                    DEVICED_OBJECT_PATH"/Cpu"
295 #define DEVICED_INTERFACE_CPU               DEVICED_INTERFACE_NAME".Cpu"
296 /* PmQos service: operations about pmqos */
297 #define DEVICED_PATH_PMQOS                  DEVICED_OBJECT_PATH"/PmQos"
298 #define DEVICED_INTERFACE_PMQOS             DEVICED_INTERFACE_NAME".PmQos"
299 /* Apps service */
300 #define DEVICED_PATH_APPS               DEVICED_OBJECT_PATH"/Apps"
301 #define DEVICED_INTERFACE_APPS           DEVICED_INTERFACE_NAME".Apps"
302 /* GPIO service: status check about gpio */
303 #define DEVICED_PATH_GPIO                    DEVICED_OBJECT_PATH"/Gpio"
304 #define DEVICED_INTERFACE_GPIO               DEVICED_INTERFACE_NAME".Gpio"
305 /* Board service */
306 #define DEVICED_PATH_BOARD                DEVICED_OBJECT_PATH"/Board"
307 #define DEVICED_INTERFACE_BOARD           DEVICED_INTERFACE_NAME".Board"
308 /* Csa service */
309 #define DEVICED_PATH_CSA                DEVICED_OBJECT_PATH"/Csa"
310 #define DEVICED_INTERFACE_CSA           DEVICED_INTERFACE_NAME".Csa"
311 /* dump service */
312 #define DUMP_SERVICE_BUS_NAME               "org.tizen.system.dumpservice"
313 #define DUMP_SERVICE_OBJECT_PATH            "/Org/Tizen/System/DumpService"
314 #define DUMP_SERVICE_INTERFACE_NAME         DUMP_SERVICE_BUS_NAME
315 /* Coord daemon */
316 #define COORD_BUS_NAME                     "org.tizen.system.coord"
317 #define COORD_OBJECT_PATH                  "/Org/Tizen/System/Coord"
318 #define COORD_INTERFACE_NAME               COORD_BUS_NAME
319 #define COORD_PATH_AUTOBRIGHTNESS          COORD_OBJECT_PATH"/Autobrightness"
320 #define COORD_INTERFACE_AUTOBRIGHTNESS     COORD_INTERFACE_NAME".autobrightness"
321
322 /* LED */
323 #define POPUP_PATH_LED                      POPUP_OBJECT_PATH"/Led"
324 #define POPUP_INTERFACE_LED                 POPUP_INTERFACE_NAME".Led"
325 /* ODE */
326 #define POPUP_PATH_ODE                      POPUP_OBJECT_PATH"/Ode"
327 #define POPUP_INTERFACE_ODE                 POPUP_INTERFACE_NAME".Ode"
328 /* Battery */
329 #define POPUP_PATH_BATTERY                  POPUP_OBJECT_PATH"/Battery"
330 #define POPUP_INTERFACE_BATTERY             POPUP_INTERFACE_NAME".Battery"
331 #define POPUP_METHOD_SCREENOFF_TTS          "ScreenOffTts"
332 /* Overheat Timer*/
333 #define POPUP_OVERHEAT_PATH             POPUP_OBJECT_PATH"/Overheat"
334 #define POPUP_OVERHEAT_INTERFACE        POPUP_INTERFACE_NAME".Overheat"
335
336 /***********************************************/
337 /* End of the Experimental for Specific device */
338 /***********************************************/
339
340
341
342 typedef struct {
343         const unsigned char *data;
344         int size;
345 } dbus_byte;
346
347 GVariant *dbus_handle_method_sync_with_reply_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *var);
348
349 GVariant *dbus_handle_method_sync_with_reply_var_timeout(const char *dest, const char *path, const char *iface, const char *method, GVariant *var, int timeout);
350
351 /* fd */
352 gint* dbus_handle_get_unix_fd_list(GDBusMethodInvocation *invocation, int *size);
353
354 GVariant *dbus_handle_method_with_unix_fd_list_sync_with_reply(const char *dest, const char *path,
355                 const char *iface, const char *method,
356                 const char *signature, const char *param[],
357                 int *in_fdlist, int in_size,
358                 int **out_fdlist, int *out_size);
359 GVariant *dbus_handle_method_with_unix_fd_list_sync_with_reply_var(const char *dest, const char *path,
360                 const char *iface, const char *method,
361                 GVariant *param,
362                 int *in_fdlist, int in_size,
363                 int **out_fdlist, int *out_size);
364
365 int dbus_handle_method_sync(const char *dest, const char *path,
366                 const char *interface, const char *method,
367                 const char *sig, const char *param[]);
368
369 int dbus_handle_method_sync_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *param);
370
371 int dbus_handle_method_sync_timeout(const char *dest, const char *path,
372                 const char *interface, const char *method,
373                 const char *sig, const char *param[], int timeout);
374
375 int dbus_handle_method_sync_pairs(const char *dest, const char *path,
376                 const char *interface, const char *method,
377                 int num, va_list args);
378
379 int dbus_handle_method_async_pairs(const char *dest, const char *path,
380                 const char *interface, const char *method,
381                 int num, va_list args);
382
383 int dbus_handle_method_async(const char *dest, const char *path,
384                 const char *interface, const char *method,
385                 const char *sig, const char *param[]);
386
387 int dbus_handle_method_async_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *param);
388
389 typedef void (*dbus_pending_cb)(GVariant *var, void *user_data, GError *err);
390
391 int dbus_handle_method_async_with_reply(const char *dest,
392                 const char *path,
393                 const char *iface,
394                 const char *method,
395                 const char *signature,
396                 const char *param[],
397                 dbus_pending_cb cb,
398                 int timeout_msec,
399                 void *data);
400
401
402 int dbus_handle_method_async_with_reply_var(const char *dest,
403                 const char *path,
404                 const char *iface,
405                 const char *method,
406                 GVariant *param,
407                 dbus_pending_cb cb,
408                 int timeout_msec,
409                 void *data);
410
411 int dbus_handle_method_async_pairs_with_reply(const char *dest,
412                 const char *path,
413                 const char *iface,
414                 const char *method,
415                 int num,
416                 va_list args,
417                 dbus_pending_cb cb,
418                 int timeout_msec,
419                 void *data);
420
421 int check_systemd_active(void);
422
423 /**
424  * @brief   Dbus handler which is used to register and call methods
425
426  * @since_tizen 4.0
427  */
428 typedef void *dbus_handle_h;
429
430 /**
431  * @brief   Dbus method handler which is used to unregister dbus methods
432  * @since_tizen 4.0
433  */
434 typedef void *dbus_object_handle_h;
435
436 /**
437  * @brief   Structure which contains the dbus method name and callback function.
438  * @since_tizen 4.0
439  */
440 typedef struct {
441         const char *member;
442         const char *signature_in;
443         const char *signature_out;
444         GVariant *(*func)(GDBusConnection *conn,
445                 const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
446                 GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data);
447 } dbus_method_s;
448
449 /**
450  * @brief   Structure which contains the dbus interface information and its methods.i
451  * @since_tizen 4.0
452  */
453 typedef struct {
454         dbus_object_handle_h oh;
455         const char *name;
456         const dbus_method_s *methods;
457         int nr_methods;
458 } dbus_interface_u;
459
460 #define dh_get_param_from_var(gvar, signature, ...) ((g_strcmp0(signature, g_variant_get_type_string(gvar)) == 0) ? g_variant_get(gvar, signature, __VA_ARGS__), TRUE : FALSE)
461
462 #define dbus_handle_new_g_variant_tuple() g_variant_new_tuple(NULL, 0)
463
464 /**
465  * @brief   Callback function which is called when the user data needs to be released.
466  * @since_tizen 4.0
467  */
468 typedef void (*destroy_notified)(void *data);
469
470 typedef struct {
471         dbus_pending_cb func;
472         void *data;
473 } pending_call_data;
474
475 int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name, GBusNameAcquiredCallback acquired_handler, GBusNameLostCallback lost_handler);
476
477 dbus_handle_h dbus_handle_get_connection(GBusType bus_type, gboolean priv);
478
479 int dbus_handle_register_dbus_object(dbus_handle_h handle, const char *obj_path, const dbus_interface_u *iface);
480 int dbus_handle_unregister_dbus_object(dbus_handle_h handle, const char *obj_path);
481
482 int dbus_handle_add_dbus_object(dbus_handle_h handle, const char *obj_path, const dbus_interface_u *iface_u);
483 int dbus_handle_register_dbus_object_all(dbus_handle_h handle);
484
485 guint subscribe_dbus_signal(dbus_handle_h handle, const char *path, const char *iface, const char *name, GDBusSignalCallback cb, void *data, destroy_notified free_func);
486 void unsubscribe_dbus_signal(dbus_handle_h handle, guint id);
487
488 enum ctx_quit_reason {CTX_QUIT_UNKNOWN, CTX_QUIT_NORMAL, CTX_QUIT_TIMEOUT};
489
490 typedef struct {
491         guint sig_id;
492         GMainContext *context;
493         GMainLoop *loop;
494         GSource *timeout_src;
495         GVariant *param;
496         enum ctx_quit_reason quit_reason;
497         void *user_data;
498 } sig_ctx;
499
500 sig_ctx *dbus_handle_new_signal_ctx(void);
501 void dbus_handle_free_signal_ctx(sig_ctx *ctx);
502 guint subscribe_dbus_signal_ctx(dbus_handle_h handle, sig_ctx *ctx, const char *sender, const char *path, const char *iface, const char *name, GDBusSignalCallback cb);
503 int dbus_handle_signal_ctx_wait(sig_ctx *ctx);
504 int dbus_handle_signal_ctx_add_timeout(sig_ctx *ctx, int timeout);
505
506 GVariant *dbus_handle_make_simple_array(const char *sig, int *param);
507
508 int dbus_handle_broadcast_dbus_signal(const char *path, const char *iface, const char *name, const char *signature, const char *param[]);
509 int dbus_handle_broadcast_dbus_signal_var(const char *path, const char *iface, const char *name, GVariant *param);
510
511 typedef struct
512 {
513         guint   pid;
514         guint   uid;
515         gchar  *unique_name;
516         gchar  *sec_label;
517 } GDBusCredentials;
518
519 int dbus_connection_get_sender_pid(GDBusConnection *conn, const char * sender);
520 int dbus_handle_get_sender_pid(dbus_handle_h handle, const char * sender);
521 int dbus_handle_get_sender_credentials(dbus_handle_h handle, const char *name, GDBusCredentials *creds);
522 int dbus_handle_watch_name(const char *name, GBusNameAppearedCallback name_appeared_handler, GBusNameVanishedCallback name_vanished_handler, void *user_data, GDestroyNotify user_data_free_func);
523 void dbus_handle_unwatch_name(guint id);
524 char** dbus_handle_get_owner_list(dbus_handle_h handle, const char *bus_name);
525 void dbus_handle_check_owner_name(dbus_handle_h handle, const char *owner_name);
526
527 #endif