libdbus_sys/
lib.rs

1use std::os::raw::{c_void, c_char, c_uint, c_int, c_long};
2
3pub type DBusConnection = c_void;
4pub type DBusMessage = c_void;
5pub type DBusWatch = c_void;
6pub type DBusPendingCall = c_void;
7pub type DBusTimeout = c_void;
8
9#[repr(C)]
10#[derive(Debug, PartialEq, Copy, Clone)]
11/// System or Session bus
12pub enum DBusBusType {
13    Session = 0,
14    System = 1,
15    Starter = 2,
16}
17
18pub const DBUS_TYPE_ARRAY: c_int = 'a' as c_int;
19pub const DBUS_TYPE_VARIANT: c_int = 'v' as c_int;
20pub const DBUS_TYPE_BOOLEAN: c_int = 'b' as c_int;
21pub const DBUS_TYPE_INVALID: c_int = 0;
22pub const DBUS_TYPE_STRING: c_int = 's' as c_int;
23pub const DBUS_TYPE_DICT_ENTRY: c_int = 'e' as c_int;
24pub const DBUS_TYPE_BYTE: c_int = 'y' as c_int;
25pub const DBUS_TYPE_INT16: c_int = 'n' as c_int;
26pub const DBUS_TYPE_UINT16: c_int = 'q' as c_int;
27pub const DBUS_TYPE_INT32: c_int = 'i' as c_int;
28pub const DBUS_TYPE_UINT32: c_int = 'u' as c_int;
29pub const DBUS_TYPE_INT64: c_int = 'x' as c_int;
30pub const DBUS_TYPE_UINT64: c_int = 't' as c_int;
31pub const DBUS_TYPE_DOUBLE: c_int = 'd' as c_int;
32pub const DBUS_TYPE_UNIX_FD: c_int = 'h' as c_int;
33pub const DBUS_TYPE_STRUCT: c_int = 'r' as c_int;
34pub const DBUS_TYPE_OBJECT_PATH: c_int = 'o' as c_int;
35pub const DBUS_TYPE_SIGNATURE: c_int = 'g' as c_int;
36
37pub const DBUS_TIMEOUT_USE_DEFAULT: c_int = -1;
38pub const DBUS_TIMEOUT_INFINITE: c_int = 0x7fffffff;
39
40pub const DBUS_NAME_FLAG_ALLOW_REPLACEMENT: c_int = 1;
41pub const DBUS_NAME_FLAG_REPLACE_EXISTING: c_int = 2;
42pub const DBUS_NAME_FLAG_DO_NOT_QUEUE: c_int = 4;
43
44pub const DBUS_WATCH_READABLE: c_int = 1;
45pub const DBUS_WATCH_WRITABLE: c_int = 2;
46pub const DBUS_WATCH_ERROR: c_int = 4;
47pub const DBUS_WATCH_HANGUP: c_int = 8;
48
49#[repr(C)]
50#[derive(Debug, PartialEq, Copy, Clone)]
51pub enum DBusRequestNameReply {
52    PrimaryOwner = 1,
53    InQueue = 2,
54    Exists = 3,
55    AlreadyOwner = 4,
56}
57
58#[repr(C)]
59#[derive(Debug, PartialEq, Copy, Clone)]
60pub enum DBusReleaseNameReply {
61    Released = 1,
62    NonExistent = 2,
63    NotOwner = 3,
64}
65
66#[repr(C)]
67#[derive(Debug, PartialEq, Copy, Clone)]
68pub enum DBusHandlerResult {
69    Handled = 0,
70    NotYetHandled = 1,
71    NeedMemory = 2,
72}
73
74#[repr(C)]
75#[derive(Debug, PartialEq, Copy, Clone)]
76/// One of the four different D-Bus message types.
77pub enum DBusMessageType {
78    /// This is not a valid message type (rarely used)
79    Invalid = 0,
80    /// This is a method call D-Bus message
81    MethodCall = 1,
82    /// This is a method return Ok D-Bus message, used when the method call message was successfully processed
83    MethodReturn = 2,
84    /// This is a method return with error D-Bus message, used when the method call message could not be handled 
85    Error = 3,
86    /// This is a signal, usually sent to whoever wants to listen
87    Signal = 4,
88}
89
90#[repr(C)]
91#[derive(Debug, PartialEq, Copy, Clone)]
92pub enum DBusDispatchStatus {
93    DataRemains = 0,
94    Complete = 1,
95    NeedMemory = 2,
96}
97
98#[repr(C)]
99pub struct DBusError {
100    pub name: *const c_char,
101    pub message: *const c_char,
102    pub dummy: c_uint,
103    pub padding1: *const c_void
104}
105
106#[repr(C)]
107#[derive(Copy, Clone)]
108pub struct DBusMessageIter {
109    pub dummy1: *mut c_void,
110    pub dummy2: *mut c_void,
111    pub dummy3: u32,
112    pub dummy4: c_int,
113    pub dummy5: c_int,
114    pub dummy6: c_int,
115    pub dummy7: c_int,
116    pub dummy8: c_int,
117    pub dummy9: c_int,
118    pub dummy10: c_int,
119    pub dummy11: c_int,
120    pub pad1: c_int,
121    pub pad2: c_int,
122    // Here would have been padding; because pad3 is a 8 byte aligned pointer (on amd64).
123    // Rust reserves the right not to copy the padding when cloning a struct,
124    // but the D-Bus library uses this part of the struct too.
125    // Hence, add a field as big as the padding to ensure Rust copies all data.
126    pub pad2_added_by_rust: c_int,
127    pub pad3: *mut c_void,
128}
129
130#[repr(C)]
131#[derive(Copy, Clone)]
132pub struct DBusSignatureIter {
133    pub dummy1: *mut c_void,
134    pub dummy2: *mut c_void,
135    pub dummy8: u32,
136    pub dummy12: c_int,
137    pub dummy17: c_int,
138}
139
140pub type DBusHandleMessageFunction = Option<extern "C" fn(conn: *mut DBusConnection, msg: *mut DBusMessage, user_data: *mut c_void) -> DBusHandlerResult>;
141
142pub type DBusAddWatchFunction = Option<extern "C" fn(watch: *mut DBusWatch, user_data: *mut c_void) -> u32>;
143pub type DBusRemoveWatchFunction = Option<extern "C" fn(watch: *mut DBusWatch, user_data: *mut c_void)>;
144pub type DBusWatchToggledFunction = Option<extern "C" fn(watch: *mut DBusWatch, user_data: *mut c_void)>;
145
146pub type DBusAddTimeoutFunction = Option<extern "C" fn(timeout: *mut DBusTimeout, user_data: *mut c_void) -> u32>;
147pub type DBusTimeoutToggledFunction = Option<extern "C" fn(timeout: *mut DBusTimeout, user_data: *mut c_void)>;
148pub type DBusRemoveTimeoutFunction = Option<extern "C" fn(timeout: *mut DBusTimeout, user_data: *mut c_void)>;
149
150pub type DBusDispatchStatusFunction = Option<extern "C" fn(conn: *mut DBusConnection, new_status: DBusDispatchStatus, user_data: *mut c_void)>;
151
152pub type DBusWakeupMainFunction = Option<extern "C" fn(conn: *mut DBusConnection, user_data: *mut c_void)>;
153
154pub type DBusPendingCallNotifyFunction = Option<extern "C" fn(pending: *mut DBusPendingCall, user_data: *mut c_void)>;
155
156pub type DBusFreeFunction = Option<extern "C" fn(memory: *mut c_void)>;
157
158#[repr(C)]
159pub struct DBusObjectPathVTable {
160    pub unregister_function: Option<extern "C" fn(conn: *mut DBusConnection, user_data: *mut c_void)>,
161    pub message_function: DBusHandleMessageFunction,
162    pub dbus_internal_pad1: Option<extern "C" fn()>,
163    pub dbus_internal_pad2: Option<extern "C" fn()>,
164    pub dbus_internal_pad3: Option<extern "C" fn()>,
165    pub dbus_internal_pad4: Option<extern "C" fn()>,
166}
167
168extern "C" {
169    pub fn dbus_bus_get_private(t: DBusBusType, error: *mut DBusError) -> *mut DBusConnection;
170    pub fn dbus_bus_get_unique_name(conn: *mut DBusConnection) -> *const c_char;
171    pub fn dbus_bus_request_name(conn: *mut DBusConnection, name: *const c_char,
172        flags: c_uint, error: *mut DBusError) -> c_int;
173    pub fn dbus_bus_release_name(conn: *mut DBusConnection, name: *const c_char,
174        error: *mut DBusError) -> c_int;
175    pub fn dbus_bus_add_match(conn: *mut DBusConnection, rule: *const c_char,
176        error: *mut DBusError);
177    pub fn dbus_bus_remove_match(conn: *mut DBusConnection, rule: *const c_char,
178        error: *mut DBusError);
179    pub fn dbus_bus_register(conn: *mut DBusConnection, error: *mut DBusError) -> u32;
180
181    pub fn dbus_connection_close(conn: *mut DBusConnection);
182    pub fn dbus_connection_dispatch(conn: *mut DBusConnection) -> DBusDispatchStatus;
183    pub fn dbus_connection_flush(conn: *mut DBusConnection);
184    pub fn dbus_connection_open_private(address: *const c_char, error: *mut DBusError) -> *mut DBusConnection;
185    pub fn dbus_connection_unref(conn: *mut DBusConnection);
186    pub fn dbus_connection_get_is_connected(conn: *mut DBusConnection) -> u32;
187    pub fn dbus_connection_set_exit_on_disconnect(conn: *mut DBusConnection, enable: u32);
188    pub fn dbus_connection_send_with_reply_and_block(conn: *mut DBusConnection,
189        message: *mut DBusMessage, timeout_milliseconds: c_int, error: *mut DBusError) -> *mut DBusMessage;
190    pub fn dbus_connection_send_with_reply(conn: *mut DBusConnection,
191        message: *mut DBusMessage, pending_return: *mut *mut DBusPendingCall, timeout_milliseconds: c_int) -> u32;
192    pub fn dbus_connection_send(conn: *mut DBusConnection,
193        message: *mut DBusMessage, serial: *mut u32) -> u32;
194    pub fn dbus_connection_read_write_dispatch(conn: *mut DBusConnection,
195        timeout_milliseconds: c_int) -> u32;
196    pub fn dbus_connection_read_write(conn: *mut DBusConnection, timeout_milliseconds: c_int) -> u32;
197    pub fn dbus_connection_try_register_object_path(conn: *mut DBusConnection,
198        path: *const c_char, vtable: *const DBusObjectPathVTable, user_data: *mut c_void,
199        error: *mut DBusError) -> u32;
200    pub fn dbus_connection_unregister_object_path(conn: *mut DBusConnection,
201        path: *const c_char) -> u32;
202    pub fn dbus_connection_list_registered(conn: *mut DBusConnection,
203        parent_path: *const c_char, child_entries: *mut *mut *mut c_char) -> u32;
204    pub fn dbus_connection_add_filter(conn: *mut DBusConnection, function: DBusHandleMessageFunction,
205        user_data: *mut c_void, free_data_function: DBusFreeFunction) -> u32;
206    pub fn dbus_connection_remove_filter(conn: *mut DBusConnection, function: DBusHandleMessageFunction,
207        user_data: *mut c_void) -> u32;
208    pub fn dbus_connection_set_watch_functions(conn: *mut DBusConnection, add_function: DBusAddWatchFunction,
209        remove_function: DBusRemoveWatchFunction, toggled_function: DBusWatchToggledFunction,
210        data: *mut c_void, free_data_function: DBusFreeFunction) -> u32;
211    pub fn dbus_connection_set_timeout_functions(conn: *mut DBusConnection, add_function: DBusAddTimeoutFunction,
212        remove_function: DBusRemoveTimeoutFunction, toggled_function: DBusTimeoutToggledFunction,
213        data: *mut c_void, free_data_function: DBusFreeFunction) -> u32;
214    pub fn dbus_connection_set_dispatch_status_function(conn: *mut DBusConnection,
215        dispatch_function: DBusDispatchStatusFunction, data: *mut c_void, free_data_function: DBusFreeFunction);
216    pub fn dbus_connection_set_wakeup_main_function(conn: *mut DBusConnection,
217        wakeup_function: DBusWakeupMainFunction, data: *mut c_void, free_data_function: DBusFreeFunction);
218    pub fn dbus_connection_pop_message(conn: *mut DBusConnection) -> *mut DBusMessage;
219    pub fn dbus_connection_get_dispatch_status(conn: *mut DBusConnection) -> DBusDispatchStatus;
220
221    pub fn dbus_error_init(error: *mut DBusError);
222    pub fn dbus_error_free(error: *mut DBusError);
223    pub fn dbus_set_error(error: *mut DBusError, name: *const c_char, message: *const c_char, ...);
224    pub fn dbus_set_error_from_message(error: *mut DBusError, message: *mut DBusMessage) -> u32;
225
226    pub fn dbus_message_new_method_call(destination: *const c_char, path: *const c_char,
227        iface: *const c_char, method: *const c_char) -> *mut DBusMessage;
228    pub fn dbus_message_new_method_return(message: *mut DBusMessage) -> *mut DBusMessage;
229    pub fn dbus_message_new_error(message: *mut DBusMessage,
230        error_name: *const c_char, error_message: *const c_char) -> *mut DBusMessage;
231    pub fn dbus_message_new_signal(path: *const c_char,
232        iface: *const c_char, name: *const c_char) -> *mut DBusMessage;
233    pub fn dbus_message_ref(message: *mut DBusMessage) -> *mut DBusMessage;
234    pub fn dbus_message_unref(message: *mut DBusMessage);
235    pub fn dbus_message_get_type(message: *mut DBusMessage) -> c_int;
236    pub fn dbus_message_is_method_call(message: *mut DBusMessage, iface: *const c_char, method: *const c_char) -> u32;
237    pub fn dbus_message_is_signal(message: *mut DBusMessage, iface: *const c_char, signal_name: *const c_char) -> u32;
238    pub fn dbus_message_get_reply_serial(message: *mut DBusMessage) -> u32;
239    pub fn dbus_message_get_serial(message: *mut DBusMessage) -> u32;
240    pub fn dbus_message_get_path(message: *mut DBusMessage) -> *const c_char;
241    pub fn dbus_message_set_path(message: *mut DBusMessage, path: *const c_char) -> bool;
242    pub fn dbus_message_get_interface(message: *mut DBusMessage) -> *const c_char;
243    pub fn dbus_message_get_destination(message: *mut DBusMessage) -> *const c_char;
244    pub fn dbus_message_get_member(message: *mut DBusMessage) -> *const c_char;
245    pub fn dbus_message_get_sender(message: *mut DBusMessage) -> *const c_char;
246    pub fn dbus_message_set_serial(message: *mut DBusMessage, serial: u32);
247    pub fn dbus_message_set_sender(message: *mut DBusMessage, sender: *const c_char) -> u32;
248    pub fn dbus_message_set_destination(message: *mut DBusMessage, destination: *const c_char) -> u32;
249    pub fn dbus_message_get_no_reply(message: *mut DBusMessage) -> u32;
250    pub fn dbus_message_set_no_reply(message: *mut DBusMessage, no_reply: u32);
251    pub fn dbus_message_get_auto_start(message: *mut DBusMessage) -> u32;
252    pub fn dbus_message_set_auto_start(message: *mut DBusMessage, no_reply: u32);
253    pub fn dbus_message_copy(message: *const DBusMessage) -> *mut DBusMessage;
254
255    pub fn dbus_message_iter_append_basic(iter: *mut DBusMessageIter, t: c_int, value: *const c_void) -> u32;
256    pub fn dbus_message_iter_append_fixed_array(iter: *mut DBusMessageIter, element_type: c_int,
257        value: *const c_void, n_elements: c_int) -> u32;
258    pub fn dbus_message_iter_init(message: *mut DBusMessage, iter: *mut DBusMessageIter) -> u32;
259    pub fn dbus_message_iter_init_append(message: *mut DBusMessage, iter: *mut DBusMessageIter);
260    pub fn dbus_message_iter_get_arg_type(iter: *mut DBusMessageIter) -> c_int;
261    pub fn dbus_message_iter_get_basic(iter: *mut DBusMessageIter, value: *mut c_void);
262    pub fn dbus_message_iter_get_element_type(iter: *mut DBusMessageIter) -> c_int;
263    pub fn dbus_message_iter_get_fixed_array(iter: *mut DBusMessageIter,
264        value: *mut c_void, n_elements: *mut c_int) -> u32;
265    pub fn dbus_message_iter_get_signature(iter: *mut DBusMessageIter) -> *mut c_char;
266    pub fn dbus_message_iter_next(iter: *mut DBusMessageIter) -> u32;
267    pub fn dbus_message_iter_recurse(iter: *mut DBusMessageIter, subiter: *mut DBusMessageIter);
268    pub fn dbus_message_iter_open_container(iter: *mut DBusMessageIter, _type: c_int,
269        contained_signature: *const c_char, sub: *mut DBusMessageIter) -> u32;
270    pub fn dbus_message_iter_close_container(iter: *mut DBusMessageIter, sub: *mut DBusMessageIter) -> u32;
271
272    pub fn dbus_signature_iter_init(iter: *mut DBusSignatureIter, signature: *const c_char);
273    pub fn dbus_signature_iter_get_current_type(iter: *const DBusSignatureIter) -> c_int;
274    pub fn dbus_signature_iter_get_signature(iter: *const DBusSignatureIter) -> *mut c_char;
275    pub fn dbus_signature_iter_get_element_type(iter: *const DBusSignatureIter) -> c_int;
276    pub fn dbus_signature_iter_next(iter: *mut DBusSignatureIter) -> bool;
277    pub fn dbus_signature_iter_recurse(iter: *const DBusSignatureIter, subiter: *mut DBusSignatureIter);
278
279    pub fn dbus_free(memory: *mut c_void);
280    pub fn dbus_free_string_array(str_array: *mut *mut c_char) -> c_void;
281
282    pub fn dbus_signature_validate_single(signature: *const c_char, error: *mut DBusError) -> u32;
283
284    pub fn dbus_threads_init_default() -> c_int;
285
286    pub fn dbus_validate_bus_name(busname: *const c_char, error: *mut DBusError) -> u32;
287    pub fn dbus_validate_error_name(errorname: *const c_char, error: *mut DBusError) -> u32;
288    pub fn dbus_validate_interface(interface: *const c_char, error: *mut DBusError) -> u32;
289    pub fn dbus_validate_member(member: *const c_char, error: *mut DBusError) -> u32;
290    pub fn dbus_validate_path(path: *const c_char, error: *mut DBusError) -> u32;
291
292    pub fn dbus_watch_get_enabled(watch: *mut DBusWatch) -> u32;
293    pub fn dbus_watch_get_flags(watch: *mut DBusWatch) -> c_uint;
294    pub fn dbus_watch_get_unix_fd(watch: *mut DBusWatch) -> c_int;
295    pub fn dbus_watch_get_socket(watch: *mut DBusWatch) -> c_int;
296    pub fn dbus_watch_handle(watch: *mut DBusWatch, flags: c_uint) -> u32;
297    pub fn dbus_watch_get_data(watch: *mut DBusWatch) -> *mut c_void;
298    pub fn dbus_watch_set_data(watch: *mut DBusWatch, user_data: *mut c_void,
299        free_data_function: DBusFreeFunction);
300
301    pub fn dbus_timeout_get_enabled(timeout: *mut DBusTimeout) -> u32;
302    pub fn dbus_timeout_get_interval(timeout: *mut DBusTimeout) -> c_int;
303    pub fn dbus_timeout_handle(timeout: *mut DBusTimeout) -> u32;
304    pub fn dbus_timeout_get_data(timeout: *mut DBusTimeout) -> *mut c_void;
305    pub fn dbus_timeout_set_data(timeout: *mut DBusTimeout, user_data: *mut c_void,
306        free_data_function: DBusFreeFunction);
307
308    pub fn dbus_pending_call_ref(pending: *mut DBusPendingCall) -> *mut DBusPendingCall;
309    pub fn dbus_pending_call_unref(pending: *mut DBusPendingCall);
310    pub fn dbus_pending_call_set_notify(pending: *mut DBusPendingCall, n: DBusPendingCallNotifyFunction,
311        user_data: *mut c_void, free_user_data: DBusFreeFunction) -> u32;
312    pub fn dbus_pending_call_steal_reply(pending: *mut DBusPendingCall) -> *mut DBusMessage;
313
314    pub fn dbus_message_marshal(msg: *mut DBusMessage, marshalled_data_p: *mut *mut c_char, len_p: *mut c_int) -> u32;
315    pub fn dbus_message_demarshal(s: *const c_char, len: c_int, error: *mut DBusError) -> *mut DBusMessage;
316    pub fn dbus_message_demarshal_bytes_needed(buf: *const c_char, len: c_int) -> c_int;
317
318    pub fn dbus_connection_set_max_message_size(conn: *mut DBusConnection, size: c_long);
319    pub fn dbus_connection_get_max_message_size(conn: *mut DBusConnection) -> c_long;
320    pub fn dbus_connection_set_max_message_unix_fds(conn: *mut DBusConnection, n: c_long);
321    pub fn dbus_connection_get_max_message_unix_fds(conn: *mut DBusConnection) -> c_long;
322
323    pub fn dbus_connection_set_max_received_size(conn: *mut DBusConnection, size: c_long);
324    pub fn dbus_connection_get_max_received_size(conn: *mut DBusConnection) -> c_long;
325    pub fn dbus_connection_set_max_received_unix_fds(conn: *mut DBusConnection, n: c_long);
326    pub fn dbus_connection_get_max_received_unix_fds(conn: *mut DBusConnection) -> c_long;
327
328    pub fn dbus_connection_get_outgoing_size(conn: *mut DBusConnection) -> c_long;
329    pub fn dbus_connection_get_outgoing_unix_fds(conn: *mut DBusConnection) -> c_long;
330    pub fn dbus_connection_has_messages_to_send(conn: *mut DBusConnection) -> u32;
331
332    pub fn dbus_try_get_local_machine_id(error: *mut DBusError) -> *mut c_char;
333    pub fn dbus_get_local_machine_id() -> *mut c_char;
334}