block: Add mmc inserted & removed popup
[platform/core/system/storaged.git] / src / shared / dbus.h
1 /*
2  * storaged
3  * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18
19 #ifndef __STORAGED_DBUS_H__
20 #define __STORAGED_DBUS_H__
21
22 #include <gio/gio.h>
23 #include <glib-unix.h>
24 #include <gio/gunixfdlist.h>
25 #include <stdarg.h>
26 #include <assert.h>
27
28 #include "dbus_macro.h"
29
30
31 /*
32  * DBus daemon
33  */
34 #define DBUS_BUS_NAME                       "org.freedesktop.DBus"
35 #define DBUS_OBJECT_PATH                    "/org/freedesktop/DBus"
36 #define DBUS_INTERFACE_NAME                 DBUS_BUS_NAME
37 /**
38  * @brief   Structure for byte array
39  * @since_tizen 4.0
40  */
41 typedef struct {
42         const unsigned char *data;
43         int size;
44 } dbus_byte;
45
46 GVariant *dbus_method_sync_with_reply(const char *dest, const char *path,
47                 const char *interface, const char *method,
48                 const char *sig, const char *param[]);
49
50 GVariant *dbus_method_sync_with_reply_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *var);
51
52 GVariant *dbus_method_sync_with_reply_var_timeout(const char *dest, const char *path, const char *iface, const char *method, GVariant *var, int timeout);
53
54 /* fd */
55 gint* dbus_handle_get_unix_fd_list(GDBusMethodInvocation *invocation, int *size);
56
57 GVariant *dbus_method_with_unix_fd_list_sync_with_reply(const char *dest, const char *path,
58                                                                                                                 const char *iface, const char *method,
59                                                                                                                 const char *signature, const char *param[],
60                                                                                                                 int *in_fdlist, int in_size,
61                                                                                                                 int **out_fdlist, int *out_size);
62 GVariant *dbus_method_with_unix_fd_list_sync_with_reply_var(const char *dest, const char *path,
63                                                                                                                         const char *iface, const char *method,
64                                                                                                                         GVariant *param,
65                                                                                                                         int *in_fdlist, int in_size,
66                                                                                                                         int **out_fdlist, int *out_size);
67
68 int dbus_method_sync(const char *dest, const char *path,
69                 const char *interface, const char *method,
70                 const char *sig, const char *param[]);
71
72 int dbus_method_sync_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *param);
73
74 int dbus_method_sync_timeout(const char *dest, const char *path,
75                 const char *interface, const char *method,
76                 const char *sig, const char *param[], int timeout);
77
78 int dbus_method_sync_pairs(const char *dest, const char *path,
79                 const char *interface, const char *method,
80                 int num, va_list args);
81 int dbus_method_async_pairs(const char *dest, const char *path,
82                 const char *interface, const char *method,
83                 int num, va_list args);
84 int dbus_method_async(const char *dest, const char *path,
85                 const char *interface, const char *method,
86                 const char *sig, const char *param[]);
87
88 int dbus_method_async_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *param);
89
90 typedef void (*dbus_pending_cb)(GVariant *var, void *user_data, GError *err);
91
92 int dbus_method_async_with_reply(const char *dest,
93                                                                         const char *path,
94                                                                         const char *iface,
95                                                                         const char *method,
96                                                                         const char *signature,
97                                                                         const char *param[],
98                                                                         dbus_pending_cb cb,
99                                                                         int timeout_msec,
100                                                                         void *data);
101
102
103 int dbus_method_async_with_reply_var(const char *dest,
104                                                                         const char *path,
105                                                                         const char *iface,
106                                                                         const char *method,
107                                                                         GVariant *param,
108                                                                         dbus_pending_cb cb,
109                                                                         int timeout_msec,
110                                                                         void *data);
111
112 int check_systemd_active(void);
113
114 /**
115  * @brief   Dbus handler which is used to register and call methods
116
117  * @since_tizen 4.0
118  */
119 typedef void *dbus_handle_h;
120
121 /**
122  * @brief   Dbus method handler which is used to unregister dbus methods
123  * @since_tizen 4.0
124  */
125 typedef void *dbus_object_handle_h;
126
127 /**
128  * @brief   Structure which contains the dbus method name and callback function.
129  * @since_tizen 4.0
130  */
131 typedef struct {
132         const char *member;
133         const char *signature_in;
134         const char *signature_out;
135         GVariant *(*func)(GDBusConnection *conn,
136                 const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
137                 GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data);
138 } dbus_method_s;
139
140 /**
141  * @brief   Structure which contains the dbus interface information and its methods.i
142  * @since_tizen 4.0
143  */
144 typedef struct {
145         const char *name;
146         const dbus_method_s *methods;
147         int nr_methods;
148 } dbus_interface_u;
149
150 #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)
151
152 #define dbus_handle_new_g_variant_tuple() g_variant_new_tuple(NULL, 0)
153
154 /**
155  * @brief   Callback function which is called when the user data needs to be released.
156  * @since_tizen 4.0
157  */
158 typedef void (*destroy_notified)(void *data);
159
160 typedef struct {
161         dbus_pending_cb func;
162         void *data;
163 } pending_call_data;
164
165 int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name);
166
167 dbus_handle_h dbus_handle_get_connection(GBusType bus_type, gboolean priv);
168
169 int dbus_handle_register_dbus_object(dbus_handle_h handle, const char *obj_path, const dbus_interface_u *iface);
170 int dbus_handle_unregister_dbus_object(dbus_handle_h handle, const char *obj_path);
171
172 int dbus_handle_add_dbus_object(dbus_handle_h handle, const char *obj_path, const dbus_interface_u *iface_u);
173 int dbus_handle_register_dbus_object_all(dbus_handle_h handle);
174
175 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);
176 void unsubscribe_dbus_signal(dbus_handle_h handle, guint id);
177
178 GVariant *dbus_handle_make_simple_array(const char *sig, int *param);
179
180 int dbus_handle_broadcast_dbus_signal(const char *path, const char *iface, const char *name, const char *signature, const char *param[]);
181 int dbus_handle_broadcast_dbus_signal_var(const char *path, const char *iface, const char *name, GVariant *param);
182
183 typedef struct
184 {
185         guint   pid;
186         guint   uid;
187         gchar  *unique_name;
188         gchar  *sec_label;
189 } GDBusCredentials;
190
191 int dbus_connection_get_sender_pid(GDBusConnection *conn, const char * sender);
192 int dbus_handle_get_sender_pid(dbus_handle_h handle, const char * sender);
193 int dbus_handle_get_sender_credentials(dbus_handle_h handle, const char *name, GDBusCredentials *creds);
194 int dbus_handle_watch_name(const char *name, GBusNameAppearedCallback name_appeared_handler, GBusNameVanishedCallback name_vanished_handler, void *user_data);
195 void dbus_handle_unwatch_name(guint id);
196 dbus_handle_h dbus_handle_init(GBusType type, const char* bus_name);
197 char** dbus_handle_get_owner_list(dbus_handle_h handle, const char *bus_name);
198 void dbush_handle_check_owner_name(dbus_handle_h handle, const char *owner_name);
199
200 #endif