gdbus.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. *
  4. * D-Bus helper library
  5. *
  6. * Copyright (C) 2004-2011 Marcel Holtmann <marcel@holtmann.org>
  7. *
  8. *
  9. */
  10. #ifndef __GDBUS_H
  11. #define __GDBUS_H
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #include <dbus/dbus.h>
  16. #include <glib.h>
  17. typedef struct GDBusArgInfo GDBusArgInfo;
  18. typedef struct GDBusMethodTable GDBusMethodTable;
  19. typedef struct GDBusSignalTable GDBusSignalTable;
  20. typedef struct GDBusPropertyTable GDBusPropertyTable;
  21. typedef struct GDBusSecurityTable GDBusSecurityTable;
  22. typedef void (* GDBusWatchFunction) (DBusConnection *connection,
  23. void *user_data);
  24. typedef void (* GDBusMessageFunction) (DBusConnection *connection,
  25. DBusMessage *message, void *user_data);
  26. typedef gboolean (* GDBusSignalFunction) (DBusConnection *connection,
  27. DBusMessage *message, void *user_data);
  28. DBusConnection *g_dbus_setup_bus(DBusBusType type, const char *name,
  29. DBusError *error);
  30. DBusConnection *g_dbus_setup_private(DBusBusType type, const char *name,
  31. DBusError *error);
  32. gboolean g_dbus_request_name(DBusConnection *connection, const char *name,
  33. DBusError *error);
  34. gboolean g_dbus_set_disconnect_function(DBusConnection *connection,
  35. GDBusWatchFunction function,
  36. void *user_data, DBusFreeFunction destroy);
  37. typedef void (* GDBusDestroyFunction) (void *user_data);
  38. typedef DBusMessage * (* GDBusMethodFunction) (DBusConnection *connection,
  39. DBusMessage *message, void *user_data);
  40. typedef gboolean (*GDBusPropertyGetter)(const GDBusPropertyTable *property,
  41. DBusMessageIter *iter, void *data);
  42. typedef guint32 GDBusPendingPropertySet;
  43. typedef void (*GDBusPropertySetter)(const GDBusPropertyTable *property,
  44. DBusMessageIter *value, GDBusPendingPropertySet id,
  45. void *data);
  46. typedef gboolean (*GDBusPropertyExists)(const GDBusPropertyTable *property,
  47. void *data);
  48. typedef guint32 GDBusPendingReply;
  49. typedef void (* GDBusSecurityFunction) (DBusConnection *connection,
  50. const char *action,
  51. gboolean interaction,
  52. GDBusPendingReply pending);
  53. enum GDBusFlags {
  54. G_DBUS_FLAG_ENABLE_EXPERIMENTAL = (1 << 0),
  55. };
  56. enum GDBusMethodFlags {
  57. G_DBUS_METHOD_FLAG_DEPRECATED = (1 << 0),
  58. G_DBUS_METHOD_FLAG_NOREPLY = (1 << 1),
  59. G_DBUS_METHOD_FLAG_ASYNC = (1 << 2),
  60. G_DBUS_METHOD_FLAG_EXPERIMENTAL = (1 << 3),
  61. };
  62. enum GDBusSignalFlags {
  63. G_DBUS_SIGNAL_FLAG_DEPRECATED = (1 << 0),
  64. G_DBUS_SIGNAL_FLAG_EXPERIMENTAL = (1 << 1),
  65. };
  66. enum GDBusPropertyFlags {
  67. G_DBUS_PROPERTY_FLAG_DEPRECATED = (1 << 0),
  68. G_DBUS_PROPERTY_FLAG_EXPERIMENTAL = (1 << 1),
  69. };
  70. enum GDBusSecurityFlags {
  71. G_DBUS_SECURITY_FLAG_DEPRECATED = (1 << 0),
  72. G_DBUS_SECURITY_FLAG_BUILTIN = (1 << 1),
  73. G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION = (1 << 2),
  74. };
  75. enum GDbusPropertyChangedFlags {
  76. G_DBUS_PROPERTY_CHANGED_FLAG_FLUSH = (1 << 0),
  77. };
  78. typedef enum GDBusMethodFlags GDBusMethodFlags;
  79. typedef enum GDBusSignalFlags GDBusSignalFlags;
  80. typedef enum GDBusPropertyFlags GDBusPropertyFlags;
  81. typedef enum GDBusSecurityFlags GDBusSecurityFlags;
  82. typedef enum GDbusPropertyChangedFlags GDbusPropertyChangedFlags;
  83. struct GDBusArgInfo {
  84. const char *name;
  85. const char *signature;
  86. };
  87. struct GDBusMethodTable {
  88. const char *name;
  89. GDBusMethodFunction function;
  90. GDBusMethodFlags flags;
  91. unsigned int privilege;
  92. const GDBusArgInfo *in_args;
  93. const GDBusArgInfo *out_args;
  94. };
  95. struct GDBusSignalTable {
  96. const char *name;
  97. GDBusSignalFlags flags;
  98. const GDBusArgInfo *args;
  99. };
  100. struct GDBusPropertyTable {
  101. const char *name;
  102. const char *type;
  103. GDBusPropertyGetter get;
  104. GDBusPropertySetter set;
  105. GDBusPropertyExists exists;
  106. GDBusPropertyFlags flags;
  107. };
  108. struct GDBusSecurityTable {
  109. unsigned int privilege;
  110. const char *action;
  111. GDBusSecurityFlags flags;
  112. GDBusSecurityFunction function;
  113. };
  114. #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
  115. #define GDBUS_METHOD(_name, _in_args, _out_args, _function) \
  116. .name = _name, \
  117. .in_args = _in_args, \
  118. .out_args = _out_args, \
  119. .function = _function
  120. #define GDBUS_ASYNC_METHOD(_name, _in_args, _out_args, _function) \
  121. .name = _name, \
  122. .in_args = _in_args, \
  123. .out_args = _out_args, \
  124. .function = _function, \
  125. .flags = G_DBUS_METHOD_FLAG_ASYNC
  126. #define GDBUS_DEPRECATED_METHOD(_name, _in_args, _out_args, _function) \
  127. .name = _name, \
  128. .in_args = _in_args, \
  129. .out_args = _out_args, \
  130. .function = _function, \
  131. .flags = G_DBUS_METHOD_FLAG_DEPRECATED
  132. #define GDBUS_DEPRECATED_ASYNC_METHOD(_name, _in_args, _out_args, _function) \
  133. .name = _name, \
  134. .in_args = _in_args, \
  135. .out_args = _out_args, \
  136. .function = _function, \
  137. .flags = G_DBUS_METHOD_FLAG_ASYNC | G_DBUS_METHOD_FLAG_DEPRECATED
  138. #define GDBUS_EXPERIMENTAL_METHOD(_name, _in_args, _out_args, _function) \
  139. .name = _name, \
  140. .in_args = _in_args, \
  141. .out_args = _out_args, \
  142. .function = _function, \
  143. .flags = G_DBUS_METHOD_FLAG_EXPERIMENTAL
  144. #define GDBUS_EXPERIMENTAL_ASYNC_METHOD(_name, _in_args, _out_args, _function) \
  145. .name = _name, \
  146. .in_args = _in_args, \
  147. .out_args = _out_args, \
  148. .function = _function, \
  149. .flags = G_DBUS_METHOD_FLAG_ASYNC | G_DBUS_METHOD_FLAG_EXPERIMENTAL
  150. #define GDBUS_NOREPLY_METHOD(_name, _in_args, _out_args, _function) \
  151. .name = _name, \
  152. .in_args = _in_args, \
  153. .out_args = _out_args, \
  154. .function = _function, \
  155. .flags = G_DBUS_METHOD_FLAG_NOREPLY
  156. #define GDBUS_SIGNAL(_name, _args) \
  157. .name = _name, \
  158. .args = _args
  159. #define GDBUS_DEPRECATED_SIGNAL(_name, _args) \
  160. .name = _name, \
  161. .args = _args, \
  162. .flags = G_DBUS_SIGNAL_FLAG_DEPRECATED
  163. #define GDBUS_EXPERIMENTAL_SIGNAL(_name, _args) \
  164. .name = _name, \
  165. .args = _args, \
  166. .flags = G_DBUS_SIGNAL_FLAG_EXPERIMENTAL
  167. void g_dbus_set_flags(int flags);
  168. int g_dbus_get_flags(void);
  169. gboolean g_dbus_register_interface(DBusConnection *connection,
  170. const char *path, const char *name,
  171. const GDBusMethodTable *methods,
  172. const GDBusSignalTable *signals,
  173. const GDBusPropertyTable *properties,
  174. void *user_data,
  175. GDBusDestroyFunction destroy);
  176. gboolean g_dbus_unregister_interface(DBusConnection *connection,
  177. const char *path, const char *name);
  178. gboolean g_dbus_register_security(const GDBusSecurityTable *security);
  179. gboolean g_dbus_unregister_security(const GDBusSecurityTable *security);
  180. void g_dbus_pending_success(DBusConnection *connection,
  181. GDBusPendingReply pending);
  182. void g_dbus_pending_error(DBusConnection *connection,
  183. GDBusPendingReply pending,
  184. const char *name, const char *format, ...)
  185. __attribute__((format(printf, 4, 5)));
  186. void g_dbus_pending_error_valist(DBusConnection *connection,
  187. GDBusPendingReply pending, const char *name,
  188. const char *format, va_list args);
  189. DBusMessage *g_dbus_create_error(DBusMessage *message, const char *name,
  190. const char *format, ...)
  191. __attribute__((format(printf, 3, 4)));
  192. DBusMessage *g_dbus_create_error_valist(DBusMessage *message, const char *name,
  193. const char *format, va_list args);
  194. DBusMessage *g_dbus_create_reply(DBusMessage *message, int type, ...);
  195. DBusMessage *g_dbus_create_reply_valist(DBusMessage *message,
  196. int type, va_list args);
  197. gboolean g_dbus_send_message(DBusConnection *connection, DBusMessage *message);
  198. gboolean g_dbus_send_message_with_reply(DBusConnection *connection,
  199. DBusMessage *message,
  200. DBusPendingCall **call, int timeout);
  201. gboolean g_dbus_send_error(DBusConnection *connection, DBusMessage *message,
  202. const char *name, const char *format, ...)
  203. __attribute__((format(printf, 4, 5)));
  204. gboolean g_dbus_send_error_valist(DBusConnection *connection,
  205. DBusMessage *message, const char *name,
  206. const char *format, va_list args);
  207. gboolean g_dbus_send_reply(DBusConnection *connection,
  208. DBusMessage *message, int type, ...);
  209. gboolean g_dbus_send_reply_valist(DBusConnection *connection,
  210. DBusMessage *message, int type, va_list args);
  211. gboolean g_dbus_emit_signal(DBusConnection *connection,
  212. const char *path, const char *interface,
  213. const char *name, int type, ...);
  214. gboolean g_dbus_emit_signal_valist(DBusConnection *connection,
  215. const char *path, const char *interface,
  216. const char *name, int type, va_list args);
  217. guint g_dbus_add_service_watch(DBusConnection *connection, const char *name,
  218. GDBusWatchFunction connect,
  219. GDBusWatchFunction disconnect,
  220. void *user_data, GDBusDestroyFunction destroy);
  221. guint g_dbus_add_disconnect_watch(DBusConnection *connection, const char *name,
  222. GDBusWatchFunction function,
  223. void *user_data, GDBusDestroyFunction destroy);
  224. guint g_dbus_add_signal_watch(DBusConnection *connection,
  225. const char *sender, const char *path,
  226. const char *interface, const char *member,
  227. GDBusSignalFunction function, void *user_data,
  228. GDBusDestroyFunction destroy);
  229. guint g_dbus_add_properties_watch(DBusConnection *connection,
  230. const char *sender, const char *path,
  231. const char *interface,
  232. GDBusSignalFunction function, void *user_data,
  233. GDBusDestroyFunction destroy);
  234. gboolean g_dbus_remove_watch(DBusConnection *connection, guint tag);
  235. void g_dbus_remove_all_watches(DBusConnection *connection);
  236. void g_dbus_pending_property_success(GDBusPendingPropertySet id);
  237. void g_dbus_pending_property_error_valist(GDBusPendingReply id,
  238. const char *name, const char *format, va_list args);
  239. void g_dbus_pending_property_error(GDBusPendingReply id, const char *name,
  240. const char *format, ...);
  241. /*
  242. * Note that when multiple properties for a given object path are changed
  243. * in the same mainloop iteration, they will be grouped with the last
  244. * property changed. If this behaviour is undesired, use
  245. * g_dbus_emit_property_changed_full() with the
  246. * G_DBUS_PROPERTY_CHANGED_FLAG_FLUSH flag, causing the signal to ignore
  247. * any grouping.
  248. */
  249. void g_dbus_emit_property_changed(DBusConnection *connection,
  250. const char *path, const char *interface,
  251. const char *name);
  252. void g_dbus_emit_property_changed_full(DBusConnection *connection,
  253. const char *path, const char *interface,
  254. const char *name,
  255. GDbusPropertyChangedFlags flags);
  256. gboolean g_dbus_get_properties(DBusConnection *connection, const char *path,
  257. const char *interface, DBusMessageIter *iter);
  258. gboolean g_dbus_attach_object_manager(DBusConnection *connection);
  259. gboolean g_dbus_detach_object_manager(DBusConnection *connection);
  260. typedef struct GDBusClient GDBusClient;
  261. typedef struct GDBusProxy GDBusProxy;
  262. GDBusProxy *g_dbus_proxy_new(GDBusClient *client, const char *path,
  263. const char *interface);
  264. GDBusProxy *g_dbus_proxy_ref(GDBusProxy *proxy);
  265. void g_dbus_proxy_unref(GDBusProxy *proxy);
  266. const char *g_dbus_proxy_get_path(const GDBusProxy *proxy);
  267. const char *g_dbus_proxy_get_interface(GDBusProxy *proxy);
  268. gboolean g_dbus_proxy_get_property(GDBusProxy *proxy, const char *name,
  269. DBusMessageIter *iter);
  270. GDBusProxy *g_dbus_proxy_lookup(GList *list, int *index, const char *path,
  271. const char *interface);
  272. char *g_dbus_proxy_path_lookup(GList *list, int *index, const char *path);
  273. gboolean g_dbus_proxy_refresh_property(GDBusProxy *proxy, const char *name);
  274. typedef void (* GDBusResultFunction) (const DBusError *error, void *user_data);
  275. gboolean g_dbus_proxy_set_property_basic(GDBusProxy *proxy,
  276. const char *name, int type, const void *value,
  277. GDBusResultFunction function, void *user_data,
  278. GDBusDestroyFunction destroy);
  279. gboolean g_dbus_proxy_set_property_array(GDBusProxy *proxy,
  280. const char *name, int type, const void *value,
  281. size_t size, GDBusResultFunction function,
  282. void *user_data, GDBusDestroyFunction destroy);
  283. void g_dbus_dict_append_entry(DBusMessageIter *dict,
  284. const char *key, int type, void *val);
  285. void g_dbus_dict_append_basic_array(DBusMessageIter *dict, int key_type,
  286. const void *key, int type, void *val,
  287. int n_elements);
  288. void g_dbus_dict_append_array(DBusMessageIter *dict,
  289. const char *key, int type, void *val,
  290. int n_elements);
  291. typedef void (* GDBusSetupFunction) (DBusMessageIter *iter, void *user_data);
  292. typedef void (* GDBusReturnFunction) (DBusMessage *message, void *user_data);
  293. gboolean g_dbus_proxy_method_call(GDBusProxy *proxy, const char *method,
  294. GDBusSetupFunction setup,
  295. GDBusReturnFunction function, void *user_data,
  296. GDBusDestroyFunction destroy);
  297. typedef void (* GDBusClientFunction) (GDBusClient *client, void *user_data);
  298. typedef void (* GDBusProxyFunction) (GDBusProxy *proxy, void *user_data);
  299. typedef void (* GDBusPropertyFunction) (GDBusProxy *proxy, const char *name,
  300. DBusMessageIter *iter, void *user_data);
  301. gboolean g_dbus_proxy_set_property_watch(GDBusProxy *proxy,
  302. GDBusPropertyFunction function, void *user_data);
  303. gboolean g_dbus_proxy_set_removed_watch(GDBusProxy *proxy,
  304. GDBusProxyFunction destroy, void *user_data);
  305. GDBusClient *g_dbus_client_new(DBusConnection *connection,
  306. const char *service, const char *path);
  307. GDBusClient *g_dbus_client_new_full(DBusConnection *connection,
  308. const char *service,
  309. const char *path,
  310. const char *root_path);
  311. GDBusClient *g_dbus_client_ref(GDBusClient *client);
  312. void g_dbus_client_unref(GDBusClient *client);
  313. gboolean g_dbus_client_set_connect_watch(GDBusClient *client,
  314. GDBusWatchFunction function, void *user_data);
  315. gboolean g_dbus_client_set_disconnect_watch(GDBusClient *client,
  316. GDBusWatchFunction function, void *user_data);
  317. gboolean g_dbus_client_set_signal_watch(GDBusClient *client,
  318. GDBusMessageFunction function, void *user_data);
  319. gboolean g_dbus_client_set_ready_watch(GDBusClient *client,
  320. GDBusClientFunction ready, void *user_data);
  321. gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
  322. GDBusProxyFunction proxy_added,
  323. GDBusProxyFunction proxy_removed,
  324. GDBusPropertyFunction property_changed,
  325. void *user_data);
  326. #ifdef __cplusplus
  327. }
  328. #endif
  329. #endif /* __GDBUS_H */