1 | use std::os::raw::{c_void, c_char, c_uint, c_int, c_long}; |
2 | |
3 | pub type DBusConnection = c_void; |
4 | pub type DBusMessage = c_void; |
5 | pub type DBusWatch = c_void; |
6 | pub type DBusPendingCall = c_void; |
7 | pub type DBusTimeout = c_void; |
8 | |
9 | #[repr (C)] |
10 | #[derive (Debug, PartialEq, Copy, Clone)] |
11 | /// System or Session bus |
12 | pub enum DBusBusType { |
13 | Session = 0, |
14 | System = 1, |
15 | Starter = 2, |
16 | } |
17 | |
18 | pub const DBUS_TYPE_ARRAY: c_int = 'a' as c_int; |
19 | pub const DBUS_TYPE_VARIANT: c_int = 'v' as c_int; |
20 | pub const DBUS_TYPE_BOOLEAN: c_int = 'b' as c_int; |
21 | pub const DBUS_TYPE_INVALID: c_int = 0; |
22 | pub const DBUS_TYPE_STRING: c_int = 's' as c_int; |
23 | pub const DBUS_TYPE_DICT_ENTRY: c_int = 'e' as c_int; |
24 | pub const DBUS_TYPE_BYTE: c_int = 'y' as c_int; |
25 | pub const DBUS_TYPE_INT16: c_int = 'n' as c_int; |
26 | pub const DBUS_TYPE_UINT16: c_int = 'q' as c_int; |
27 | pub const DBUS_TYPE_INT32: c_int = 'i' as c_int; |
28 | pub const DBUS_TYPE_UINT32: c_int = 'u' as c_int; |
29 | pub const DBUS_TYPE_INT64: c_int = 'x' as c_int; |
30 | pub const DBUS_TYPE_UINT64: c_int = 't' as c_int; |
31 | pub const DBUS_TYPE_DOUBLE: c_int = 'd' as c_int; |
32 | pub const DBUS_TYPE_UNIX_FD: c_int = 'h' as c_int; |
33 | pub const DBUS_TYPE_STRUCT: c_int = 'r' as c_int; |
34 | pub const DBUS_TYPE_OBJECT_PATH: c_int = 'o' as c_int; |
35 | pub const DBUS_TYPE_SIGNATURE: c_int = 'g' as c_int; |
36 | |
37 | pub const DBUS_TIMEOUT_USE_DEFAULT: c_int = -1; |
38 | pub const DBUS_TIMEOUT_INFINITE: c_int = 0x7fffffff; |
39 | |
40 | pub const DBUS_NAME_FLAG_ALLOW_REPLACEMENT: c_int = 1; |
41 | pub const DBUS_NAME_FLAG_REPLACE_EXISTING: c_int = 2; |
42 | pub const DBUS_NAME_FLAG_DO_NOT_QUEUE: c_int = 4; |
43 | |
44 | pub const DBUS_WATCH_READABLE: c_int = 1; |
45 | pub const DBUS_WATCH_WRITABLE: c_int = 2; |
46 | pub const DBUS_WATCH_ERROR: c_int = 4; |
47 | pub const DBUS_WATCH_HANGUP: c_int = 8; |
48 | |
49 | #[repr (C)] |
50 | #[derive (Debug, PartialEq, Copy, Clone)] |
51 | pub 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)] |
60 | pub enum DBusReleaseNameReply { |
61 | Released = 1, |
62 | NonExistent = 2, |
63 | NotOwner = 3, |
64 | } |
65 | |
66 | #[repr (C)] |
67 | #[derive (Debug, PartialEq, Copy, Clone)] |
68 | pub 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. |
77 | pub 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)] |
92 | pub enum DBusDispatchStatus { |
93 | DataRemains = 0, |
94 | Complete = 1, |
95 | NeedMemory = 2, |
96 | } |
97 | |
98 | #[repr (C)] |
99 | pub 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)] |
108 | pub 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 | pub type DBusHandleMessageFunction = Option<extern fn(conn: *mut DBusConnection, msg: *mut DBusMessage, user_data: *mut c_void) -> DBusHandlerResult>; |
131 | |
132 | pub type DBusAddWatchFunction = Option<extern fn(watch: *mut DBusWatch, user_data: *mut c_void) -> u32>; |
133 | pub type DBusRemoveWatchFunction = Option<extern fn(watch: *mut DBusWatch, user_data: *mut c_void)>; |
134 | pub type DBusWatchToggledFunction = Option<extern fn(watch: *mut DBusWatch, user_data: *mut c_void)>; |
135 | |
136 | pub type DBusAddTimeoutFunction = Option<extern fn(timeout: *mut DBusTimeout, user_data: *mut c_void) -> u32>; |
137 | pub type DBusTimeoutToggledFunction = Option<extern fn(timeout: *mut DBusTimeout, user_data: *mut c_void)>; |
138 | pub type DBusRemoveTimeoutFunction = Option<extern fn(timeout: *mut DBusTimeout, user_data: *mut c_void)>; |
139 | |
140 | pub type DBusDispatchStatusFunction = Option<extern fn(conn: *mut DBusConnection, new_status: DBusDispatchStatus, user_data: *mut c_void)>; |
141 | |
142 | pub type DBusWakeupMainFunction = Option<extern fn(conn: *mut DBusConnection, user_data: *mut c_void)>; |
143 | |
144 | pub type DBusPendingCallNotifyFunction = Option<extern fn(pending: *mut DBusPendingCall, user_data: *mut c_void)>; |
145 | |
146 | pub type DBusFreeFunction = Option<extern fn(memory: *mut c_void)>; |
147 | |
148 | #[repr (C)] |
149 | pub struct DBusObjectPathVTable { |
150 | pub unregister_function: Option<extern fn(conn: *mut DBusConnection, user_data: *mut c_void)>, |
151 | pub message_function: DBusHandleMessageFunction, |
152 | pub dbus_internal_pad1: Option<extern fn()>, |
153 | pub dbus_internal_pad2: Option<extern fn()>, |
154 | pub dbus_internal_pad3: Option<extern fn()>, |
155 | pub dbus_internal_pad4: Option<extern fn()>, |
156 | } |
157 | |
158 | unsafeextern "C" { |
159 | pub unsafefn dbus_bus_get_private(t: DBusBusType, error: *mut DBusError) -> *mut DBusConnection; |
160 | pub unsafefn dbus_bus_get_unique_name(conn: *mut DBusConnection) -> *const c_char; |
161 | pub unsafefn dbus_bus_request_name(conn: *mut DBusConnection, name: *const c_char, |
162 | flags: c_uint, error: *mut DBusError) -> c_int; |
163 | pub unsafefn dbus_bus_release_name(conn: *mut DBusConnection, name: *const c_char, |
164 | error: *mut DBusError) -> c_int; |
165 | pub unsafefn dbus_bus_add_match(conn: *mut DBusConnection, rule: *const c_char, |
166 | error: *mut DBusError); |
167 | pub unsafefn dbus_bus_remove_match(conn: *mut DBusConnection, rule: *const c_char, |
168 | error: *mut DBusError); |
169 | pub unsafefn dbus_bus_register(conn: *mut DBusConnection, error: *mut DBusError) -> u32; |
170 | |
171 | pub unsafefn dbus_connection_close(conn: *mut DBusConnection); |
172 | pub unsafefn dbus_connection_dispatch(conn: *mut DBusConnection) -> DBusDispatchStatus; |
173 | pub unsafefn dbus_connection_flush(conn: *mut DBusConnection); |
174 | pub unsafefn dbus_connection_open_private(address: *const c_char, error: *mut DBusError) -> *mut DBusConnection; |
175 | pub unsafefn dbus_connection_unref(conn: *mut DBusConnection); |
176 | pub unsafefn dbus_connection_get_is_connected(conn: *mut DBusConnection) -> u32; |
177 | pub unsafefn dbus_connection_set_exit_on_disconnect(conn: *mut DBusConnection, enable: u32); |
178 | pub unsafefn dbus_connection_send_with_reply_and_block(conn: *mut DBusConnection, |
179 | message: *mut DBusMessage, timeout_milliseconds: c_int, error: *mut DBusError) -> *mut DBusMessage; |
180 | pub unsafefn dbus_connection_send_with_reply(conn: *mut DBusConnection, |
181 | message: *mut DBusMessage, pending_return: *mut *mut DBusPendingCall, timeout_milliseconds: c_int) -> u32; |
182 | pub unsafefn dbus_connection_send(conn: *mut DBusConnection, |
183 | message: *mut DBusMessage, serial: *mut u32) -> u32; |
184 | pub unsafefn dbus_connection_read_write_dispatch(conn: *mut DBusConnection, |
185 | timeout_milliseconds: c_int) -> u32; |
186 | pub unsafefn dbus_connection_read_write(conn: *mut DBusConnection, timeout_milliseconds: c_int) -> u32; |
187 | pub unsafefn dbus_connection_try_register_object_path(conn: *mut DBusConnection, |
188 | path: *const c_char, vtable: *const DBusObjectPathVTable, user_data: *mut c_void, |
189 | error: *mut DBusError) -> u32; |
190 | pub unsafefn dbus_connection_unregister_object_path(conn: *mut DBusConnection, |
191 | path: *const c_char) -> u32; |
192 | pub unsafefn dbus_connection_list_registered(conn: *mut DBusConnection, |
193 | parent_path: *const c_char, child_entries: *mut *mut *mut c_char) -> u32; |
194 | pub unsafefn dbus_connection_add_filter(conn: *mut DBusConnection, function: DBusHandleMessageFunction, |
195 | user_data: *mut c_void, free_data_function: DBusFreeFunction) -> u32; |
196 | pub unsafefn dbus_connection_remove_filter(conn: *mut DBusConnection, function: DBusHandleMessageFunction, |
197 | user_data: *mut c_void) -> u32; |
198 | pub unsafefn dbus_connection_set_watch_functions(conn: *mut DBusConnection, add_function: DBusAddWatchFunction, |
199 | remove_function: DBusRemoveWatchFunction, toggled_function: DBusWatchToggledFunction, |
200 | data: *mut c_void, free_data_function: DBusFreeFunction) -> u32; |
201 | pub unsafefn dbus_connection_set_timeout_functions(conn: *mut DBusConnection, add_function: DBusAddTimeoutFunction, |
202 | remove_function: DBusRemoveTimeoutFunction, toggled_function: DBusTimeoutToggledFunction, |
203 | data: *mut c_void, free_data_function: DBusFreeFunction) -> u32; |
204 | pub unsafefn dbus_connection_set_dispatch_status_function(conn: *mut DBusConnection, |
205 | dispatch_function: DBusDispatchStatusFunction, data: *mut c_void, free_data_function: DBusFreeFunction); |
206 | pub unsafefn dbus_connection_set_wakeup_main_function(conn: *mut DBusConnection, |
207 | wakeup_function: DBusWakeupMainFunction, data: *mut c_void, free_data_function: DBusFreeFunction); |
208 | pub unsafefn dbus_connection_pop_message(conn: *mut DBusConnection) -> *mut DBusMessage; |
209 | pub unsafefn dbus_connection_get_dispatch_status(conn: *mut DBusConnection) -> DBusDispatchStatus; |
210 | |
211 | pub unsafefn dbus_error_init(error: *mut DBusError); |
212 | pub unsafefn dbus_error_free(error: *mut DBusError); |
213 | pub unsafefn dbus_set_error(error: *mut DBusError, name: *const c_char, message: *const c_char, ...); |
214 | pub unsafefn dbus_set_error_from_message(error: *mut DBusError, message: *mut DBusMessage) -> u32; |
215 | |
216 | pub unsafefn dbus_message_new_method_call(destination: *const c_char, path: *const c_char, |
217 | iface: *const c_char, method: *const c_char) -> *mut DBusMessage; |
218 | pub unsafefn dbus_message_new_method_return(message: *mut DBusMessage) -> *mut DBusMessage; |
219 | pub unsafefn dbus_message_new_error(message: *mut DBusMessage, |
220 | error_name: *const c_char, error_message: *const c_char) -> *mut DBusMessage; |
221 | pub unsafefn dbus_message_new_signal(path: *const c_char, |
222 | iface: *const c_char, name: *const c_char) -> *mut DBusMessage; |
223 | pub unsafefn dbus_message_ref(message: *mut DBusMessage) -> *mut DBusMessage; |
224 | pub unsafefn dbus_message_unref(message: *mut DBusMessage); |
225 | pub unsafefn dbus_message_get_type(message: *mut DBusMessage) -> c_int; |
226 | pub unsafefn dbus_message_is_method_call(message: *mut DBusMessage, iface: *const c_char, method: *const c_char) -> u32; |
227 | pub unsafefn dbus_message_is_signal(message: *mut DBusMessage, iface: *const c_char, signal_name: *const c_char) -> u32; |
228 | pub unsafefn dbus_message_get_reply_serial(message: *mut DBusMessage) -> u32; |
229 | pub unsafefn dbus_message_get_serial(message: *mut DBusMessage) -> u32; |
230 | pub unsafefn dbus_message_get_path(message: *mut DBusMessage) -> *const c_char; |
231 | pub unsafefn dbus_message_get_interface(message: *mut DBusMessage) -> *const c_char; |
232 | pub unsafefn dbus_message_get_destination(message: *mut DBusMessage) -> *const c_char; |
233 | pub unsafefn dbus_message_get_member(message: *mut DBusMessage) -> *const c_char; |
234 | pub unsafefn dbus_message_get_sender(message: *mut DBusMessage) -> *const c_char; |
235 | pub unsafefn dbus_message_set_serial(message: *mut DBusMessage, serial: u32); |
236 | pub unsafefn dbus_message_set_sender(message: *mut DBusMessage, sender: *const c_char) -> u32; |
237 | pub unsafefn dbus_message_set_destination(message: *mut DBusMessage, destination: *const c_char) -> u32; |
238 | pub unsafefn dbus_message_get_no_reply(message: *mut DBusMessage) -> u32; |
239 | pub unsafefn dbus_message_set_no_reply(message: *mut DBusMessage, no_reply: u32); |
240 | pub unsafefn dbus_message_get_auto_start(message: *mut DBusMessage) -> u32; |
241 | pub unsafefn dbus_message_set_auto_start(message: *mut DBusMessage, no_reply: u32); |
242 | pub unsafefn dbus_message_copy(message: *const DBusMessage) -> *mut DBusMessage; |
243 | |
244 | pub unsafefn dbus_message_iter_append_basic(iter: *mut DBusMessageIter, t: c_int, value: *const c_void) -> u32; |
245 | pub unsafefn dbus_message_iter_append_fixed_array(iter: *mut DBusMessageIter, element_type: c_int, |
246 | value: *const c_void, n_elements: c_int) -> u32; |
247 | pub unsafefn dbus_message_iter_init(message: *mut DBusMessage, iter: *mut DBusMessageIter) -> u32; |
248 | pub unsafefn dbus_message_iter_init_append(message: *mut DBusMessage, iter: *mut DBusMessageIter); |
249 | pub unsafefn dbus_message_iter_get_arg_type(iter: *mut DBusMessageIter) -> c_int; |
250 | pub unsafefn dbus_message_iter_get_basic(iter: *mut DBusMessageIter, value: *mut c_void); |
251 | pub unsafefn dbus_message_iter_get_element_type(iter: *mut DBusMessageIter) -> c_int; |
252 | pub unsafefn dbus_message_iter_get_fixed_array(iter: *mut DBusMessageIter, |
253 | value: *mut c_void, n_elements: *mut c_int) -> u32; |
254 | pub unsafefn dbus_message_iter_get_signature(iter: *mut DBusMessageIter) -> *mut c_char; |
255 | pub unsafefn dbus_message_iter_next(iter: *mut DBusMessageIter) -> u32; |
256 | pub unsafefn dbus_message_iter_recurse(iter: *mut DBusMessageIter, subiter: *mut DBusMessageIter); |
257 | pub unsafefn dbus_message_iter_open_container(iter: *mut DBusMessageIter, _type: c_int, |
258 | contained_signature: *const c_char, sub: *mut DBusMessageIter) -> u32; |
259 | pub unsafefn dbus_message_iter_close_container(iter: *mut DBusMessageIter, sub: *mut DBusMessageIter) -> u32; |
260 | |
261 | pub unsafefn dbus_free(memory: *mut c_void); |
262 | pub unsafefn dbus_free_string_array(str_array: *mut *mut c_char) -> c_void; |
263 | |
264 | pub unsafefn dbus_signature_validate_single(signature: *const c_char, error: *mut DBusError) -> u32; |
265 | |
266 | pub unsafefn dbus_threads_init_default() -> c_int; |
267 | |
268 | pub unsafefn dbus_validate_bus_name(busname: *const c_char, error: *mut DBusError) -> u32; |
269 | pub unsafefn dbus_validate_error_name(errorname: *const c_char, error: *mut DBusError) -> u32; |
270 | pub unsafefn dbus_validate_interface(interface: *const c_char, error: *mut DBusError) -> u32; |
271 | pub unsafefn dbus_validate_member(member: *const c_char, error: *mut DBusError) -> u32; |
272 | pub unsafefn dbus_validate_path(path: *const c_char, error: *mut DBusError) -> u32; |
273 | |
274 | pub unsafefn dbus_watch_get_enabled(watch: *mut DBusWatch) -> u32; |
275 | pub unsafefn dbus_watch_get_flags(watch: *mut DBusWatch) -> c_uint; |
276 | pub unsafefn dbus_watch_get_unix_fd(watch: *mut DBusWatch) -> c_int; |
277 | pub unsafefn dbus_watch_get_socket(watch: *mut DBusWatch) -> c_int; |
278 | pub unsafefn dbus_watch_handle(watch: *mut DBusWatch, flags: c_uint) -> u32; |
279 | pub unsafefn dbus_watch_get_data(watch: *mut DBusWatch) -> *mut c_void; |
280 | pub unsafefn dbus_watch_set_data(watch: *mut DBusWatch, user_data: *mut c_void, |
281 | free_data_function: DBusFreeFunction); |
282 | |
283 | pub unsafefn dbus_timeout_get_enabled(timeout: *mut DBusTimeout) -> u32; |
284 | pub unsafefn dbus_timeout_get_interval(timeout: *mut DBusTimeout) -> c_int; |
285 | pub unsafefn dbus_timeout_handle(timeout: *mut DBusTimeout) -> u32; |
286 | pub unsafefn dbus_timeout_get_data(timeout: *mut DBusTimeout) -> *mut c_void; |
287 | pub unsafefn dbus_timeout_set_data(timeout: *mut DBusTimeout, user_data: *mut c_void, |
288 | free_data_function: DBusFreeFunction); |
289 | |
290 | pub unsafefn dbus_pending_call_ref(pending: *mut DBusPendingCall) -> *mut DBusPendingCall; |
291 | pub unsafefn dbus_pending_call_unref(pending: *mut DBusPendingCall); |
292 | pub unsafefn dbus_pending_call_set_notify(pending: *mut DBusPendingCall, n: DBusPendingCallNotifyFunction, |
293 | user_data: *mut c_void, free_user_data: DBusFreeFunction) -> u32; |
294 | pub unsafefn dbus_pending_call_steal_reply(pending: *mut DBusPendingCall) -> *mut DBusMessage; |
295 | |
296 | pub unsafefn dbus_message_marshal(msg: *mut DBusMessage, marshalled_data_p: *mut *mut c_char, len_p: *mut c_int) -> u32; |
297 | pub unsafefn dbus_message_demarshal(s: *const c_char, len: c_int, error: *mut DBusError) -> *mut DBusMessage; |
298 | pub unsafefn dbus_message_demarshal_bytes_needed(buf: *const c_char, len: c_int) -> c_int; |
299 | |
300 | pub unsafefn dbus_connection_set_max_message_size(conn: *mut DBusConnection, size: c_long); |
301 | pub unsafefn dbus_connection_get_max_message_size(conn: *mut DBusConnection) -> c_long; |
302 | pub unsafefn dbus_connection_set_max_message_unix_fds(conn: *mut DBusConnection, n: c_long); |
303 | pub unsafefn dbus_connection_get_max_message_unix_fds(conn: *mut DBusConnection) -> c_long; |
304 | |
305 | pub unsafefn dbus_connection_set_max_received_size(conn: *mut DBusConnection, size: c_long); |
306 | pub unsafefn dbus_connection_get_max_received_size(conn: *mut DBusConnection) -> c_long; |
307 | pub unsafefn dbus_connection_set_max_received_unix_fds(conn: *mut DBusConnection, n: c_long); |
308 | pub unsafefn dbus_connection_get_max_received_unix_fds(conn: *mut DBusConnection) -> c_long; |
309 | |
310 | pub unsafefn dbus_connection_get_outgoing_size(conn: *mut DBusConnection) -> c_long; |
311 | pub unsafefn dbus_connection_get_outgoing_unix_fds(conn: *mut DBusConnection) -> c_long; |
312 | pub unsafefn dbus_connection_has_messages_to_send(conn: *mut DBusConnection) -> u32; |
313 | |
314 | pub unsafefn dbus_try_get_local_machine_id(error: *mut DBusError) -> *mut c_char; |
315 | pub unsafefn dbus_get_local_machine_id() -> *mut c_char; |
316 | } |
317 | |