3 * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #ifndef __STORAGED_DBUS_H__
20 #define __STORAGED_DBUS_H__
23 #include <glib-unix.h>
24 #include <gio/gunixfdlist.h>
28 #include "dbus_macro.h"
34 #define DBUS_BUS_NAME "org.freedesktop.DBus"
35 #define DBUS_OBJECT_PATH "/org/freedesktop/DBus"
36 #define DBUS_INTERFACE_NAME DBUS_BUS_NAME
38 * @brief Structure for byte array
42 const unsigned char *data;
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[]);
50 GVariant *dbus_method_sync_with_reply_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *var);
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);
55 gint* dbus_handle_get_unix_fd_list(GDBusMethodInvocation *invocation, int *size);
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,
65 int *in_fdlist, int in_size,
66 int **out_fdlist, int *out_size);
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[]);
72 int dbus_method_sync_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *param);
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);
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[]);
88 int dbus_method_async_var(const char *dest, const char *path, const char *iface, const char *method, GVariant *param);
90 typedef void (*dbus_pending_cb)(GVariant *var, void *user_data, GError *err);
92 int dbus_method_async_with_reply(const char *dest,
96 const char *signature,
103 int dbus_method_async_with_reply_var(const char *dest,
112 int check_systemd_active(void);
115 * @brief Dbus handler which is used to register and call methods
119 typedef void *dbus_handle_h;
122 * @brief Dbus method handler which is used to unregister dbus methods
125 typedef void *dbus_object_handle_h;
128 * @brief Structure which contains the dbus method name and callback function.
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);
141 * @brief Structure which contains the dbus interface information and its methods.i
146 const dbus_method_s *methods;
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)
152 #define dbus_handle_new_g_variant_tuple() g_variant_new_tuple(NULL, 0)
155 * @brief Callback function which is called when the user data needs to be released.
158 typedef void (*destroy_notified)(void *data);
161 dbus_pending_cb func;
165 int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name);
167 dbus_handle_h dbus_handle_get_connection(GBusType bus_type, gboolean priv);
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);
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);
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);
178 GVariant *dbus_handle_make_simple_array(const char *sig, int *param);
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);
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);