dbus-message.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
  2. /* dbus-message.h DBusMessage object
  3. *
  4. * Copyright (C) 2002, 2003, 2005 Red Hat Inc.
  5. *
  6. * Licensed under the Academic Free License version 2.1
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21. *
  22. */
  23. #if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
  24. #error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
  25. #endif
  26. #ifndef DBUS_MESSAGE_H
  27. #define DBUS_MESSAGE_H
  28. #include <dbus/dbus-macros.h>
  29. #include <dbus/dbus-types.h>
  30. #include <dbus/dbus-arch-deps.h>
  31. #include <dbus/dbus-memory.h>
  32. #include <dbus/dbus-errors.h>
  33. #include <stdarg.h>
  34. DBUS_BEGIN_DECLS
  35. /**
  36. * @addtogroup DBusMessage
  37. * @{
  38. */
  39. typedef struct DBusMessage DBusMessage;
  40. /**
  41. * Opaque type representing a message iterator. Can be copied by value and
  42. * allocated on the stack.
  43. *
  44. * A DBusMessageIter usually contains no allocated memory. However, there
  45. * is one special case: after a successful call to
  46. * dbus_message_iter_open_container(), the caller is responsible for calling
  47. * either dbus_message_iter_close_container() or
  48. * dbus_message_iter_abandon_container() exactly once, with the same pair
  49. * of iterators.
  50. */
  51. typedef struct DBusMessageIter DBusMessageIter;
  52. /**
  53. * DBusMessageIter struct; contains no public fields.
  54. */
  55. struct DBusMessageIter
  56. {
  57. void *dummy1; /**< Don't use this */
  58. void *dummy2; /**< Don't use this */
  59. dbus_uint32_t dummy3; /**< Don't use this */
  60. int dummy4; /**< Don't use this */
  61. int dummy5; /**< Don't use this */
  62. int dummy6; /**< Don't use this */
  63. int dummy7; /**< Don't use this */
  64. int dummy8; /**< Don't use this */
  65. int dummy9; /**< Don't use this */
  66. int dummy10; /**< Don't use this */
  67. int dummy11; /**< Don't use this */
  68. int pad1; /**< Don't use this */
  69. void *pad2; /**< Don't use this */
  70. void *pad3; /**< Don't use this */
  71. };
  72. /**
  73. * A message iterator for which dbus_message_iter_abandon_container_if_open()
  74. * is the only valid operation.
  75. */
  76. #define DBUS_MESSAGE_ITER_INIT_CLOSED \
  77. { \
  78. NULL, /* dummy1 */ \
  79. NULL, /* dummy2 */ \
  80. 0, /* dummy3 */ \
  81. 0, /* dummy4 */ \
  82. 0, /* dummy5 */ \
  83. 0, /* dummy6 */ \
  84. 0, /* dummy7 */ \
  85. 0, /* dummy8 */ \
  86. 0, /* dummy9 */ \
  87. 0, /* dummy10 */ \
  88. 0, /* dummy11 */ \
  89. 0, /* pad1 */ \
  90. NULL, /* pad2 */ \
  91. NULL /* pad3 */ \
  92. }
  93. DBUS_EXPORT
  94. DBusMessage* dbus_message_new (int message_type);
  95. DBUS_EXPORT
  96. DBusMessage* dbus_message_new_method_call (const char *bus_name,
  97. const char *path,
  98. const char *iface,
  99. const char *method);
  100. DBUS_EXPORT
  101. DBusMessage* dbus_message_new_method_return (DBusMessage *method_call);
  102. DBUS_EXPORT
  103. DBusMessage* dbus_message_new_signal (const char *path,
  104. const char *iface,
  105. const char *name);
  106. DBUS_EXPORT
  107. DBusMessage* dbus_message_new_error (DBusMessage *reply_to,
  108. const char *error_name,
  109. const char *error_message);
  110. DBUS_EXPORT
  111. DBusMessage* dbus_message_new_error_printf (DBusMessage *reply_to,
  112. const char *error_name,
  113. const char *error_format,
  114. ...) _DBUS_GNUC_PRINTF (3, 4);
  115. DBUS_EXPORT
  116. DBusMessage* dbus_message_copy (const DBusMessage *message);
  117. DBUS_EXPORT
  118. DBusMessage* dbus_message_ref (DBusMessage *message);
  119. DBUS_EXPORT
  120. void dbus_message_unref (DBusMessage *message);
  121. DBUS_EXPORT
  122. int dbus_message_get_type (DBusMessage *message);
  123. DBUS_EXPORT
  124. dbus_bool_t dbus_message_set_path (DBusMessage *message,
  125. const char *object_path);
  126. DBUS_EXPORT
  127. const char* dbus_message_get_path (DBusMessage *message);
  128. DBUS_EXPORT
  129. dbus_bool_t dbus_message_has_path (DBusMessage *message,
  130. const char *object_path);
  131. DBUS_EXPORT
  132. dbus_bool_t dbus_message_set_interface (DBusMessage *message,
  133. const char *iface);
  134. DBUS_EXPORT
  135. const char* dbus_message_get_interface (DBusMessage *message);
  136. DBUS_EXPORT
  137. dbus_bool_t dbus_message_has_interface (DBusMessage *message,
  138. const char *iface);
  139. DBUS_EXPORT
  140. dbus_bool_t dbus_message_set_member (DBusMessage *message,
  141. const char *member);
  142. DBUS_EXPORT
  143. const char* dbus_message_get_member (DBusMessage *message);
  144. DBUS_EXPORT
  145. dbus_bool_t dbus_message_has_member (DBusMessage *message,
  146. const char *member);
  147. DBUS_EXPORT
  148. dbus_bool_t dbus_message_set_error_name (DBusMessage *message,
  149. const char *name);
  150. DBUS_EXPORT
  151. const char* dbus_message_get_error_name (DBusMessage *message);
  152. DBUS_EXPORT
  153. dbus_bool_t dbus_message_set_destination (DBusMessage *message,
  154. const char *destination);
  155. DBUS_EXPORT
  156. const char* dbus_message_get_destination (DBusMessage *message);
  157. DBUS_EXPORT
  158. dbus_bool_t dbus_message_set_sender (DBusMessage *message,
  159. const char *sender);
  160. DBUS_EXPORT
  161. const char* dbus_message_get_sender (DBusMessage *message);
  162. DBUS_EXPORT
  163. const char* dbus_message_get_signature (DBusMessage *message);
  164. DBUS_EXPORT
  165. void dbus_message_set_no_reply (DBusMessage *message,
  166. dbus_bool_t no_reply);
  167. DBUS_EXPORT
  168. dbus_bool_t dbus_message_get_no_reply (DBusMessage *message);
  169. DBUS_EXPORT
  170. dbus_bool_t dbus_message_is_method_call (DBusMessage *message,
  171. const char *iface,
  172. const char *method);
  173. DBUS_EXPORT
  174. dbus_bool_t dbus_message_is_signal (DBusMessage *message,
  175. const char *iface,
  176. const char *signal_name);
  177. DBUS_EXPORT
  178. dbus_bool_t dbus_message_is_error (DBusMessage *message,
  179. const char *error_name);
  180. DBUS_EXPORT
  181. dbus_bool_t dbus_message_has_destination (DBusMessage *message,
  182. const char *bus_name);
  183. DBUS_EXPORT
  184. dbus_bool_t dbus_message_has_sender (DBusMessage *message,
  185. const char *unique_bus_name);
  186. DBUS_EXPORT
  187. dbus_bool_t dbus_message_has_signature (DBusMessage *message,
  188. const char *signature);
  189. DBUS_EXPORT
  190. dbus_uint32_t dbus_message_get_serial (DBusMessage *message);
  191. DBUS_EXPORT
  192. void dbus_message_set_serial (DBusMessage *message,
  193. dbus_uint32_t serial);
  194. DBUS_EXPORT
  195. dbus_bool_t dbus_message_set_reply_serial (DBusMessage *message,
  196. dbus_uint32_t reply_serial);
  197. DBUS_EXPORT
  198. dbus_uint32_t dbus_message_get_reply_serial (DBusMessage *message);
  199. DBUS_EXPORT
  200. void dbus_message_set_auto_start (DBusMessage *message,
  201. dbus_bool_t auto_start);
  202. DBUS_EXPORT
  203. dbus_bool_t dbus_message_get_auto_start (DBusMessage *message);
  204. DBUS_EXPORT
  205. dbus_bool_t dbus_message_get_path_decomposed (DBusMessage *message,
  206. char ***path);
  207. DBUS_EXPORT
  208. dbus_bool_t dbus_message_append_args (DBusMessage *message,
  209. int first_arg_type,
  210. ...);
  211. DBUS_EXPORT
  212. dbus_bool_t dbus_message_append_args_valist (DBusMessage *message,
  213. int first_arg_type,
  214. va_list var_args);
  215. DBUS_EXPORT
  216. dbus_bool_t dbus_message_get_args (DBusMessage *message,
  217. DBusError *error,
  218. int first_arg_type,
  219. ...);
  220. DBUS_EXPORT
  221. dbus_bool_t dbus_message_get_args_valist (DBusMessage *message,
  222. DBusError *error,
  223. int first_arg_type,
  224. va_list var_args);
  225. DBUS_EXPORT
  226. dbus_bool_t dbus_message_contains_unix_fds (DBusMessage *message);
  227. DBUS_EXPORT
  228. void dbus_message_iter_init_closed (DBusMessageIter *iter);
  229. DBUS_EXPORT
  230. dbus_bool_t dbus_message_iter_init (DBusMessage *message,
  231. DBusMessageIter *iter);
  232. DBUS_EXPORT
  233. dbus_bool_t dbus_message_iter_has_next (DBusMessageIter *iter);
  234. DBUS_EXPORT
  235. dbus_bool_t dbus_message_iter_next (DBusMessageIter *iter);
  236. DBUS_EXPORT
  237. char* dbus_message_iter_get_signature (DBusMessageIter *iter);
  238. DBUS_EXPORT
  239. int dbus_message_iter_get_arg_type (DBusMessageIter *iter);
  240. DBUS_EXPORT
  241. int dbus_message_iter_get_element_type (DBusMessageIter *iter);
  242. DBUS_EXPORT
  243. void dbus_message_iter_recurse (DBusMessageIter *iter,
  244. DBusMessageIter *sub);
  245. DBUS_EXPORT
  246. void dbus_message_iter_get_basic (DBusMessageIter *iter,
  247. void *value);
  248. DBUS_EXPORT
  249. int dbus_message_iter_get_element_count(DBusMessageIter *iter);
  250. #ifndef DBUS_DISABLE_DEPRECATED
  251. /* This function returns the wire protocol size of the array in bytes,
  252. * you do not want to know that probably
  253. */
  254. DBUS_EXPORT
  255. DBUS_DEPRECATED int dbus_message_iter_get_array_len (DBusMessageIter *iter);
  256. #endif
  257. DBUS_EXPORT
  258. void dbus_message_iter_get_fixed_array (DBusMessageIter *iter,
  259. void *value,
  260. int *n_elements);
  261. DBUS_EXPORT
  262. void dbus_message_iter_init_append (DBusMessage *message,
  263. DBusMessageIter *iter);
  264. DBUS_EXPORT
  265. dbus_bool_t dbus_message_iter_append_basic (DBusMessageIter *iter,
  266. int type,
  267. const void *value);
  268. DBUS_EXPORT
  269. dbus_bool_t dbus_message_iter_append_fixed_array (DBusMessageIter *iter,
  270. int element_type,
  271. const void *value,
  272. int n_elements);
  273. DBUS_EXPORT
  274. dbus_bool_t dbus_message_iter_open_container (DBusMessageIter *iter,
  275. int type,
  276. const char *contained_signature,
  277. DBusMessageIter *sub);
  278. DBUS_EXPORT
  279. dbus_bool_t dbus_message_iter_close_container (DBusMessageIter *iter,
  280. DBusMessageIter *sub);
  281. DBUS_EXPORT
  282. void dbus_message_iter_abandon_container (DBusMessageIter *iter,
  283. DBusMessageIter *sub);
  284. DBUS_EXPORT
  285. void dbus_message_iter_abandon_container_if_open (DBusMessageIter *iter,
  286. DBusMessageIter *sub);
  287. DBUS_EXPORT
  288. void dbus_message_lock (DBusMessage *message);
  289. DBUS_EXPORT
  290. dbus_bool_t dbus_set_error_from_message (DBusError *error,
  291. DBusMessage *message);
  292. DBUS_EXPORT
  293. dbus_bool_t dbus_message_allocate_data_slot (dbus_int32_t *slot_p);
  294. DBUS_EXPORT
  295. void dbus_message_free_data_slot (dbus_int32_t *slot_p);
  296. DBUS_EXPORT
  297. dbus_bool_t dbus_message_set_data (DBusMessage *message,
  298. dbus_int32_t slot,
  299. void *data,
  300. DBusFreeFunction free_data_func);
  301. DBUS_EXPORT
  302. void* dbus_message_get_data (DBusMessage *message,
  303. dbus_int32_t slot);
  304. DBUS_EXPORT
  305. int dbus_message_type_from_string (const char *type_str);
  306. DBUS_EXPORT
  307. const char* dbus_message_type_to_string (int type);
  308. DBUS_EXPORT
  309. dbus_bool_t dbus_message_marshal (DBusMessage *msg,
  310. char **marshalled_data_p,
  311. int *len_p);
  312. DBUS_EXPORT
  313. DBusMessage* dbus_message_demarshal (const char *str,
  314. int len,
  315. DBusError *error);
  316. DBUS_EXPORT
  317. int dbus_message_demarshal_bytes_needed (const char *str,
  318. int len);
  319. DBUS_EXPORT
  320. void dbus_message_set_allow_interactive_authorization (DBusMessage *message,
  321. dbus_bool_t allow);
  322. DBUS_EXPORT
  323. dbus_bool_t dbus_message_get_allow_interactive_authorization (
  324. DBusMessage *message);
  325. /**
  326. * Clear a variable or struct member that contains a #DBusMessage.
  327. * If it does not contain #NULL, the message that was previously
  328. * there is unreferenced with dbus_message_unref().
  329. *
  330. * This is very similar to dbus_clear_connection(): see that function
  331. * for more details.
  332. *
  333. * @param pointer_to_message A pointer to a variable or struct member.
  334. * pointer_to_message must not be #NULL, but *pointer_to_message
  335. * may be #NULL.
  336. */
  337. static inline void
  338. dbus_clear_message (DBusMessage **pointer_to_message)
  339. {
  340. _dbus_clear_pointer_impl (DBusMessage, pointer_to_message,
  341. dbus_message_unref);
  342. }
  343. /** @} */
  344. DBUS_END_DECLS
  345. #endif /* DBUS_MESSAGE_H */