re-arrange code
[platform/core/system/libsyscommon.git] / src / libgdbus / dbus-system.h
1 /*
2  * libsyscommon
3  *
4  * Copyright (c) 2019 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 #ifndef __DBUS_SYSTEM_H__
20 #define __DBUS_SYSTEM_H__
21
22 #include <glib.h>
23 #include <gio/gio.h>
24 #include <glib-unix.h>
25 #include <gio/gunixfdlist.h>
26 #include <stdarg.h>
27 #include <assert.h>
28
29 #include "dbus-system-iface.h"
30
31 typedef struct {
32         const unsigned char *data;
33         int size;
34 } dbus_byte;
35
36
37 typedef void *dbus_handle_h;
38
39 typedef void *dbus_object_handle_h;
40
41 typedef struct {
42         const char *member;
43         const char *signature_in;
44         const char *signature_out;
45         GVariant *(*func)       (GDBusConnection *conn,
46                                 const gchar *sender,
47                                 const gchar *path,
48                                 const gchar *iface,
49                                 const gchar *name,
50                                 GVariant *param,
51                                 GDBusMethodInvocation *invocation,
52                                 gpointer user_data);
53 } dbus_method_s;
54
55 typedef struct {
56         dbus_object_handle_h oh;
57         const char *name;
58         const dbus_method_s *methods;
59         int nr_methods;
60 } dbus_interface_u;
61
62 typedef struct {
63         guint   pid;
64         guint   uid;
65         gchar  *unique_name;
66         gchar  *sec_label;
67 } GDBusCredentials;
68
69 #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)
70
71 #define dbus_handle_new_g_variant_tuple() g_variant_new_tuple(NULL, 0)
72
73 typedef void (*destroy_notified)(void *data);
74
75 typedef void (*dbus_pending_cb)(GVariant *var, void *user_data, GError *err);
76
77 typedef struct {
78         dbus_pending_cb func;
79         void *data;
80 } pending_call_data;
81
82 dbus_handle_h dbus_handle_get_connection        (GBusType bus_type,
83                                                 gboolean priv);
84
85 int dbus_handle_request_bus_name                (dbus_handle_h handle,
86                                                 const char *bus_name,
87                                                 GBusNameAcquiredCallback acquired_handler,
88                                                 GBusNameLostCallback lost_handler);
89
90 int dbus_handle_register_dbus_object            (dbus_handle_h handle,
91                                                 const char *obj_path,
92                                                 const dbus_interface_u *iface);
93
94 int dbus_handle_unregister_dbus_object          (dbus_handle_h handle,
95                                                 const char *obj_path);
96
97 int dbus_handle_add_dbus_object                 (dbus_handle_h handle,
98                                                 const char *obj_path,
99                                                 const dbus_interface_u *iface_u);
100
101 int dbus_handle_register_dbus_object_all        (dbus_handle_h handle);
102
103
104 int dbus_handle_method_sync                     (const char *dest,
105                                                 const char *path,
106                                                 const char *interface,
107                                                 const char *method,
108                                                 const char *sig,
109                                                 const char *param[]);
110
111 int dbus_handle_method_sync_var                 (const char *dest,
112                                                 const char *path,
113                                                 const char *iface,
114                                                 const char *method,
115                                                 GVariant *param);
116
117 int dbus_handle_method_sync_timeout             (const char *dest,
118                                                 const char *path,
119                                                 const char *interface,
120                                                 const char *method,
121                                                 const char *sig,
122                                                 const char *param[],
123                                                 int timeout);
124
125 int dbus_handle_method_sync_pairs               (const char *dest,
126                                                 const char *path,
127                                                 const char *interface,
128                                                 const char *method,
129                                                 int num,
130                                                 va_list args);
131
132 int dbus_handle_method_async_pairs              (const char *dest,
133                                                 const char *path,
134                                                 const char *interface,
135                                                 const char *method,
136                                                 int num,
137                                                 va_list args);
138
139 int dbus_handle_method_async                    (const char *dest,
140                                                 const char *path,
141                                                 const char *interface,
142                                                 const char *method,
143                                                 const char *sig,
144                                                 const char *param[]);
145
146 int dbus_handle_method_async_var                (const char *dest,
147                                                 const char *path,
148                                                 const char *iface,
149                                                 const char *method,
150                                                 GVariant *param);
151
152 int dbus_handle_method_async_with_reply         (const char *dest,
153                                                 const char *path,
154                                                 const char *iface,
155                                                 const char *method,
156                                                 const char *signature,
157                                                 const char *param[],
158                                                 dbus_pending_cb cb,
159                                                 int timeout_msec,
160                                                 void *data);
161
162 int dbus_handle_method_async_with_reply_var     (const char *dest,
163                                                 const char *path,
164                                                 const char *iface,
165                                                 const char *method,
166                                                 GVariant *param,
167                                                 dbus_pending_cb cb,
168                                                 int timeout_msec,
169                                                 void *data);
170
171 int dbus_handle_method_async_pairs_with_reply   (const char *dest,
172                                                 const char *path,
173                                                 const char *iface,
174                                                 const char *method,
175                                                 int num,
176                                                 va_list args,
177                                                 dbus_pending_cb cb,
178                                                 int timeout_msec,
179                                                 void *data);
180
181 GVariant *dbus_handle_method_sync_with_reply_var                (const char *dest,
182                                                                 const char *path,
183                                                                 const char *iface,
184                                                                 const char *method,
185                                                                 GVariant *var);
186
187 GVariant *dbus_handle_method_sync_with_reply_var_timeout        (const char *dest,
188                                                                 const char *path,
189                                                                 const char *iface,
190                                                                 const char *method,
191                                                                 GVariant *var,
192                                                                 int timeout);
193
194 gint* dbus_handle_get_unix_fd_list                              (GDBusMethodInvocation *invocation,
195                                                                 int *size);
196
197 GVariant *dbus_handle_method_with_unix_fd_list_sync_with_reply  (const char *dest,
198                                                                 const char *path,
199                                                                 const char *iface,
200                                                                 const char *method,
201                                                                 const char *signature,
202                                                                 const char *param[],
203                                                                 int *in_fdlist,
204                                                                 int in_size,
205                                                                 int **out_fdlist,
206                                                                 int *out_size);
207
208 GVariant *dbus_handle_method_with_unix_fd_list_sync_with_reply_var(const char *dest,
209                                                                 const char *path,
210                                                                 const char *iface,
211                                                                 const char *method,
212                                                                 GVariant *param,
213                                                                 int *in_fdlist,
214                                                                 int in_size,
215                                                                 int **out_fdlist,
216                                                                 int *out_size);
217
218
219 guint subscribe_dbus_signal                     (dbus_handle_h handle,
220                                                 const char *path,
221                                                 const char *iface,
222                                                 const char *name,
223                                                 GDBusSignalCallback cb,
224                                                 void *data,
225                                                 destroy_notified free_func);
226
227 void unsubscribe_dbus_signal                    (dbus_handle_h handle,
228                                                 guint id);
229
230 int dbus_handle_emit_dbus_signal                (const char *dest,
231                                                 const char *path,
232                                                 const char *iface,
233                                                 const char *name,
234                                                 GVariant *param);
235
236 enum ctx_quit_reason {CTX_QUIT_UNKNOWN, CTX_QUIT_NORMAL, CTX_QUIT_TIMEOUT};
237
238 typedef struct {
239         guint sig_id;
240         GMainContext *context;
241         GMainLoop *loop;
242         GSource *timeout_src;
243         GVariant *param;
244         enum ctx_quit_reason quit_reason;
245         void *user_data;
246 } sig_ctx;
247
248 sig_ctx *dbus_handle_new_signal_ctx             (void);
249
250 void dbus_handle_free_signal_ctx                (sig_ctx *ctx);
251
252 guint subscribe_dbus_signal_ctx                 (dbus_handle_h handle,
253                                                 sig_ctx *ctx,
254                                                 const char *sender,
255                                                 const char *path,
256                                                 const char *iface,
257                                                 const char *name,
258                                                 GDBusSignalCallback cb);
259
260 int dbus_handle_signal_ctx_wait                 (sig_ctx *ctx);
261
262 int dbus_handle_signal_ctx_add_timeout          (sig_ctx *ctx,
263                                                 int timeout);
264
265
266
267
268 int dbus_connection_get_sender_pid              (GDBusConnection *conn,
269                                                 const char * sender);
270
271 int dbus_handle_get_sender_pid                  (dbus_handle_h handle,
272                                                 const char * sender);
273
274 int dbus_handle_get_sender_credentials          (dbus_handle_h handle,
275                                                 const char *name,
276                                                 GDBusCredentials *creds);
277
278 int dbus_handle_watch_name                      (const char *name,
279                                                 GBusNameAppearedCallback name_appeared_handler,
280                                                 GBusNameVanishedCallback name_vanished_handler,
281                                                 void *user_data,
282                                                 GDestroyNotify user_data_free_func);
283
284 void dbus_handle_unwatch_name                   (guint id);
285
286 char** dbus_handle_get_owner_list               (dbus_handle_h handle,
287                                                 const char *bus_name);
288
289 void dbus_handle_check_owner_name               (dbus_handle_h handle,
290                                                 const char *owner_name);
291
292 int check_systemd_active                        (void);
293
294 GVariant *dbus_handle_make_simple_array         (const char *sig,
295                                                 int *param);
296
297
298 #endif