libsystemd_sys/bus/
mod.rs

1use super::const_iovec;
2use super::event::sd_event;
3use super::id128::sd_id128_t;
4use super::{c_char, c_int, c_uint, c_void, gid_t, pid_t, size_t, uid_t};
5
6mod protocol;
7pub mod vtable;
8pub use self::protocol::*;
9pub use self::vtable::sd_bus_vtable;
10
11#[allow(non_camel_case_types)]
12pub enum sd_bus {}
13#[allow(non_camel_case_types)]
14pub enum sd_bus_message {}
15#[allow(non_camel_case_types)]
16pub enum sd_bus_slot {}
17#[allow(non_camel_case_types)]
18pub enum sd_bus_creds {}
19#[allow(non_camel_case_types)]
20pub enum sd_bus_track {}
21
22#[allow(non_camel_case_types)]
23pub type sd_bus_message_handler_t = Option<
24    unsafe extern "C" fn(
25        m: *mut sd_bus_message,
26        userdata: *mut c_void,
27        ret_error: *mut sd_bus_error,
28    ) -> c_int,
29>;
30#[allow(non_camel_case_types)]
31pub type sd_bus_property_get_t = Option<
32    unsafe extern "C" fn(
33        bus: *mut sd_bus,
34        path: *const c_char,
35        interface: *const c_char,
36        property: *const c_char,
37        reply: *mut sd_bus_message,
38        userdata: *mut c_void,
39        ret_error: *mut sd_bus_error,
40    ) -> c_int,
41>;
42#[allow(non_camel_case_types)]
43pub type sd_bus_property_set_t = Option<
44    unsafe extern "C" fn(
45        bus: *mut sd_bus,
46        path: *const c_char,
47        interface: *const c_char,
48        property: *const c_char,
49        value: *mut sd_bus_message,
50        userdata: *mut c_void,
51        ret_error: *mut sd_bus_error,
52    ) -> c_int,
53>;
54#[allow(non_camel_case_types)]
55pub type sd_bus_object_find_t = Option<
56    unsafe extern "C" fn(
57        bus: *mut sd_bus,
58        path: *const c_char,
59        interface: *const c_char,
60        userdata: *mut c_void,
61        ret_found: *mut *mut c_void,
62        ret_error: *mut sd_bus_error,
63    ) -> c_int,
64>;
65#[allow(non_camel_case_types)]
66pub type sd_bus_node_enumerator_t = Option<
67    unsafe extern "C" fn(
68        bus: *mut sd_bus,
69        prefix: *const c_char,
70        userdata: *mut c_void,
71        ret_nodes: *mut *mut *mut c_char,
72        ret_error: *mut sd_bus_error,
73    ) -> c_int,
74>;
75#[allow(non_camel_case_types)]
76pub type sd_bus_track_handler_t =
77    Option<unsafe extern "C" fn(track: *mut sd_bus_track, userdata: *mut c_void) -> c_int>;
78
79#[allow(non_camel_case_types)]
80type sd_destroy_t = Option<unsafe extern "C" fn(userdata: *mut c_void)>;
81
82#[allow(non_camel_case_types)]
83pub type sd_bus_destroy_t = sd_destroy_t;
84
85#[repr(C)]
86pub struct sd_bus_error {
87    pub name: *const c_char,
88    pub message: *const c_char,
89    pub need_free: c_int,
90}
91
92#[repr(C)]
93pub struct sd_bus_error_map {
94    pub name: *const c_char,
95    pub code: c_int,
96}
97
98extern "C" {
99    // Connections
100    pub fn sd_bus_default(ret: *mut *mut sd_bus) -> c_int;
101    pub fn sd_bus_default_user(ret: *mut *mut sd_bus) -> c_int;
102    pub fn sd_bus_default_system(ret: *mut *mut sd_bus) -> c_int;
103
104    pub fn sd_bus_open(ret: *mut *mut sd_bus) -> c_int;
105    pub fn sd_bus_open_user(ret: *mut *mut sd_bus) -> c_int;
106    pub fn sd_bus_open_system(ret: *mut *mut sd_bus) -> c_int;
107    pub fn sd_bus_open_system_remote(ret: *mut *mut sd_bus, host: *const c_char) -> c_int;
108    pub fn sd_bus_open_system_machine(ret: *mut *mut sd_bus, host: *const c_char) -> c_int;
109
110    pub fn sd_bus_new(ret: *mut *mut sd_bus) -> c_int;
111
112    pub fn sd_bus_set_address(bus: *mut sd_bus, address: *const c_char) -> c_int;
113    pub fn sd_bus_set_fd(bus: *mut sd_bus, input_fd: c_int, output_fd: c_int) -> c_int;
114    pub fn sd_bus_set_exec(
115        bus: *mut sd_bus,
116        path: *const c_char,
117        argv: *const *mut c_char,
118    ) -> c_int;
119    pub fn sd_bus_get_address(bus: *mut sd_bus, address: *mut *const c_char) -> c_int;
120    pub fn sd_bus_set_bus_client(bus: *mut sd_bus, b: c_int) -> c_int;
121    pub fn sd_bus_is_bus_client(bus: *mut sd_bus) -> c_int;
122    pub fn sd_bus_set_server(bus: *mut sd_bus, b: c_int, bus_id: sd_id128_t) -> c_int;
123    pub fn sd_bus_is_server(bus: *mut sd_bus) -> c_int;
124    pub fn sd_bus_set_anonymous(bus: *mut sd_bus, b: c_int) -> c_int;
125    pub fn sd_bus_is_anonymous(bus: *mut sd_bus) -> c_int;
126    pub fn sd_bus_set_trusted(bus: *mut sd_bus, b: c_int) -> c_int;
127    pub fn sd_bus_is_trusted(bus: *mut sd_bus) -> c_int;
128    pub fn sd_bus_set_monitor(bus: *mut sd_bus, b: c_int) -> c_int;
129    pub fn sd_bus_is_monitor(bus: *mut sd_bus) -> c_int;
130    pub fn sd_bus_set_description(bus: *mut sd_bus, description: *const c_char) -> c_int;
131    pub fn sd_bus_get_description(bus: *mut sd_bus, description: *mut *const c_char) -> c_int;
132    pub fn sd_bus_negotiate_creds(bus: *mut sd_bus, b: c_int, creds_mask: u64) -> c_int;
133    pub fn sd_bus_negotiate_timestamp(bus: *mut sd_bus, b: c_int) -> c_int;
134    pub fn sd_bus_negotiate_fds(bus: *mut sd_bus, b: c_int) -> c_int;
135    pub fn sd_bus_can_send(bus: *mut sd_bus, typ: c_char) -> c_int;
136    pub fn sd_bus_get_creds_mask(bus: *mut sd_bus, creds_mask: *mut u64) -> c_int;
137    pub fn sd_bus_set_allow_interactive_authorization(bus: *mut sd_bus, b: c_int) -> c_int;
138    pub fn sd_bus_get_allow_interactive_authorization(bus: *mut sd_bus) -> c_int;
139    pub fn sd_bus_set_exit_on_disconnect(bus: *mut sd_bus, b: c_int) -> c_int;
140    pub fn sd_bus_get_exit_on_disconnect(bus: *mut sd_bus) -> c_int;
141    pub fn sd_bus_set_close_on_exit(bus: *mut sd_bus, b: c_int) -> c_int;
142    pub fn sd_bus_get_close_on_exit(bus: *mut sd_bus) -> c_int;
143    pub fn sd_bus_set_watch_bind(bus: *mut sd_bus, b: c_int) -> c_int;
144    pub fn sd_bus_get_watch_bind(bus: *mut sd_bus) -> c_int;
145    pub fn sd_bus_set_connected_signal(bus: *mut sd_bus, b: c_int) -> c_int;
146    pub fn sd_bus_get_connected_signal(bus: *mut sd_bus) -> c_int;
147    pub fn sd_bus_set_sender(bus: *mut sd_bus, sender: *const c_char) -> c_int;
148    pub fn sd_bus_get_sender(bus: *mut sd_bus, ret: *mut *const c_char) -> c_int;
149
150    pub fn sd_bus_start(ret: *mut sd_bus) -> c_int;
151
152    pub fn sd_bus_try_close(bus: *mut sd_bus) -> c_int;
153    pub fn sd_bus_close(bus: *mut sd_bus);
154
155    pub fn sd_bus_ref(bus: *mut sd_bus) -> *mut sd_bus;
156    pub fn sd_bus_unref(bus: *mut sd_bus) -> *mut sd_bus;
157    pub fn sd_bus_close_unref(bus: *mut sd_bus) -> *mut sd_bus;
158    pub fn sd_bus_flush_close_unref(bus: *mut sd_bus) -> *mut sd_bus;
159
160    pub fn sd_bus_default_flush_close();
161
162    pub fn sd_bus_is_open(bus: *mut sd_bus) -> c_int;
163    pub fn sd_bus_is_ready(bus: *mut sd_bus) -> c_int;
164
165    pub fn sd_bus_get_bus_id(bus: *mut sd_bus, id: *mut sd_id128_t) -> c_int;
166    pub fn sd_bus_get_scope(bus: *mut sd_bus, scope: *mut *const c_char) -> c_int;
167    pub fn sd_bus_get_tid(bus: *mut sd_bus, tid: *mut pid_t) -> c_int;
168    pub fn sd_bus_get_owner_creds(
169        bus: *mut sd_bus,
170        creds_mask: u64,
171        ret: *mut *mut sd_bus_creds,
172    ) -> c_int;
173
174    pub fn sd_bus_send(bus: *mut sd_bus, m: *mut sd_bus_message, cookie: *mut u64) -> c_int;
175    pub fn sd_bus_send_to(
176        bus: *mut sd_bus,
177        m: *mut sd_bus_message,
178        destination: *const c_char,
179        cookie: *mut u64,
180    ) -> c_int;
181    pub fn sd_bus_call(
182        bus: *mut sd_bus,
183        m: *mut sd_bus_message,
184        usec: u64,
185        ret_error: *mut sd_bus_error,
186        reply: *mut *mut sd_bus_message,
187    ) -> c_int;
188    pub fn sd_bus_call_async(
189        bus: *mut sd_bus,
190        slot: *mut *mut sd_bus_slot,
191        m: *mut sd_bus_message,
192        callback: sd_bus_message_handler_t,
193        userdata: *mut c_void,
194        usec: u64,
195    ) -> c_int;
196
197    pub fn sd_bus_get_fd(bus: *mut sd_bus) -> c_int;
198    pub fn sd_bus_get_events(bus: *mut sd_bus) -> c_int;
199    pub fn sd_bus_get_timeout(bus: *mut sd_bus, timeout_usec: *mut u64) -> c_int;
200    pub fn sd_bus_process(bus: *mut sd_bus, r: *mut *mut sd_bus_message) -> c_int;
201    pub fn sd_bus_process_priority(
202        bus: *mut sd_bus,
203        max_priority: i64,
204        r: *mut *mut sd_bus_message,
205    ) -> c_int;
206    pub fn sd_bus_wait(bus: *mut sd_bus, timeout_usec: u64) -> c_int;
207    pub fn sd_bus_flush(bus: *mut sd_bus) -> c_int;
208
209    pub fn sd_bus_get_current_slot(bus: *mut sd_bus) -> *mut sd_bus_slot;
210    pub fn sd_bus_get_current_message(bus: *mut sd_bus) -> *mut sd_bus_message;
211    pub fn sd_bus_get_current_handler(bus: *mut sd_bus) -> sd_bus_message_handler_t;
212    pub fn sd_bus_get_current_userdata(bus: *mut sd_bus) -> *mut c_void;
213
214    pub fn sd_bus_attach_event(bus: *mut sd_bus, e: *mut sd_event, priority: c_int) -> c_int;
215    pub fn sd_bus_detach_event(bus: *mut sd_bus) -> c_int;
216    pub fn sd_bus_get_event(bus: *mut sd_bus) -> *mut sd_event;
217
218    pub fn sd_bus_get_n_queued_read(bus: *mut sd_bus, ret: *mut u64) -> c_int;
219    pub fn sd_bus_get_n_queued_write(bus: *mut sd_bus, ret: *mut u64) -> c_int;
220
221    pub fn sd_bus_set_method_call_timeout(bus: *mut sd_bus, usec: u64) -> c_int;
222    pub fn sd_bus_get_method_call_timeout(bus: *mut sd_bus, ret: *mut u64) -> c_int;
223
224    pub fn sd_bus_add_filter(
225        bus: *mut sd_bus,
226        slot: *mut *mut sd_bus_slot,
227        callback: sd_bus_message_handler_t,
228        userdata: *mut c_void,
229    ) -> c_int;
230    pub fn sd_bus_add_match(
231        bus: *mut sd_bus,
232        slot: *mut *mut sd_bus_slot,
233        match_: *const c_char,
234        callback: sd_bus_message_handler_t,
235        userdata: *mut c_void,
236    ) -> c_int;
237    pub fn sd_bus_add_object(
238        bus: *mut sd_bus,
239        slot: *mut *mut sd_bus_slot,
240        path: *const c_char,
241        callback: sd_bus_message_handler_t,
242        userdata: *mut c_void,
243    ) -> c_int;
244    pub fn sd_bus_add_fallback(
245        bus: *mut sd_bus,
246        slot: *mut *mut sd_bus_slot,
247        prefix: *const c_char,
248        callback: sd_bus_message_handler_t,
249        userdata: *mut c_void,
250    ) -> c_int;
251    pub fn sd_bus_add_object_vtable(
252        bus: *mut sd_bus,
253        slot: *mut *mut sd_bus_slot,
254        path: *const c_char,
255        interface: *const c_char,
256        vtable: *const sd_bus_vtable,
257        userdata: *mut c_void,
258    ) -> c_int;
259    pub fn sd_bus_add_fallback_vtable(
260        bus: *mut sd_bus,
261        slot: *mut *mut sd_bus_slot,
262        prefix: *const c_char,
263        interface: *const c_char,
264        vtable: *const sd_bus_vtable,
265        find: sd_bus_object_find_t,
266        userdata: *mut c_void,
267    ) -> c_int;
268    pub fn sd_bus_add_node_enumerator(
269        bus: *mut sd_bus,
270        slot: *mut *mut sd_bus_slot,
271        path: *const c_char,
272        callback: sd_bus_node_enumerator_t,
273        userdata: *mut c_void,
274    ) -> c_int;
275    pub fn sd_bus_add_object_manager(
276        bus: *mut sd_bus,
277        slot: *mut *mut sd_bus_slot,
278        path: *const c_char,
279    ) -> c_int;
280
281    // Slot object
282
283    pub fn sd_bus_slot_ref(slot: *mut sd_bus_slot) -> *mut sd_bus_slot;
284    pub fn sd_bus_slot_unref(slot: *mut sd_bus_slot) -> *mut sd_bus_slot;
285
286    pub fn sd_bus_slot_get_bus(slot: *mut sd_bus_slot) -> *mut sd_bus;
287    pub fn sd_bus_slot_get_userdata(slot: *mut sd_bus_slot) -> *mut c_void;
288    pub fn sd_bus_slot_set_userdata(slot: *mut sd_bus_slot, userdata: *mut c_void) -> *mut c_void;
289    pub fn sd_bus_slot_set_description(slot: *mut sd_bus_slot, description: *const c_char)
290        -> c_int;
291    pub fn sd_bus_slot_get_description(
292        slot: *mut sd_bus_slot,
293        description: *mut *const c_char,
294    ) -> c_int;
295    pub fn sd_bus_slot_get_floating(slot: *mut sd_bus_slot) -> c_int;
296    pub fn sd_bus_slot_set_floating(slot: *mut sd_bus_slot, b: c_int) -> c_int;
297    // since v239
298    pub fn sd_bus_slot_set_destroy_callback(
299        slot: *mut sd_bus_slot,
300        callback: sd_bus_destroy_t,
301    ) -> c_int;
302    // since v239
303    pub fn sd_bus_slot_get_destroy_callback(
304        slot: *mut sd_bus_slot,
305        callback: *mut sd_bus_destroy_t,
306    ) -> c_int;
307
308    pub fn sd_bus_slot_get_current_message(slot: *mut sd_bus_slot) -> *mut sd_bus_message;
309    pub fn sd_bus_slot_get_current_handler(bus: *mut sd_bus_slot) -> sd_bus_message_handler_t;
310    pub fn sd_bus_slot_get_current_userdata(slot: *mut sd_bus_slot) -> *mut c_void;
311
312    // Message object
313
314    pub fn sd_bus_message_new(bus: *mut sd_bus, m: *mut *mut sd_bus_message, typ: u8) -> c_int;
315    pub fn sd_bus_message_new_signal(
316        bus: *mut sd_bus,
317        m: *mut *mut sd_bus_message,
318        path: *const c_char,
319        interface: *const c_char,
320        member: *const c_char,
321    ) -> c_int;
322    pub fn sd_bus_message_new_method_call(
323        bus: *mut sd_bus,
324        m: *mut *mut sd_bus_message,
325        destination: *const c_char,
326        path: *const c_char,
327        interface: *const c_char,
328        member: *const c_char,
329    ) -> c_int;
330    pub fn sd_bus_message_new_method_return(
331        call: *mut sd_bus_message,
332        m: *mut *mut sd_bus_message,
333    ) -> c_int;
334    pub fn sd_bus_message_new_method_error(
335        call: *mut sd_bus_message,
336        m: *mut *mut sd_bus_message,
337        e: *const sd_bus_error,
338    ) -> c_int;
339    pub fn sd_bus_message_new_method_errorf(
340        call: *mut sd_bus_message,
341        m: *mut *mut sd_bus_message,
342        name: *const c_char,
343        format: *const c_char,
344        ...
345    ) -> c_int;
346    pub fn sd_bus_message_new_method_errno(
347        call: *mut sd_bus_message,
348        m: *mut *mut sd_bus_message,
349        error: c_int,
350        e: *const sd_bus_error,
351    ) -> c_int;
352    pub fn sd_bus_message_new_method_errnof(
353        call: *mut sd_bus_message,
354        m: *mut *mut sd_bus_message,
355        error: c_int,
356        format: *const c_char,
357        ...
358    ) -> c_int;
359
360    pub fn sd_bus_message_ref(m: *mut sd_bus_message) -> *mut sd_bus_message;
361    pub fn sd_bus_message_unref(m: *mut sd_bus_message) -> *mut sd_bus_message;
362
363    pub fn sd_bus_message_seal(m: *mut sd_bus_message, cookie: u64, timeout_usec: u64) -> c_int;
364
365    pub fn sd_bus_message_get_type(m: *mut sd_bus_message, typ: *mut u8) -> c_int;
366    pub fn sd_bus_message_get_cookie(m: *mut sd_bus_message, cookie: *mut u64) -> c_int;
367    pub fn sd_bus_message_get_reply_cookie(m: *mut sd_bus_message, cookie: *mut u64) -> c_int;
368    pub fn sd_bus_message_get_priority(m: *mut sd_bus_message, priority: *mut i64) -> c_int;
369
370    pub fn sd_bus_message_get_expect_reply(m: *mut sd_bus_message) -> c_int;
371    pub fn sd_bus_message_get_auto_start(m: *mut sd_bus_message) -> c_int;
372    pub fn sd_bus_message_get_allow_interactive_authorization(m: *mut sd_bus_message) -> c_int;
373
374    pub fn sd_bus_message_get_signature(m: *mut sd_bus_message, complete: c_int) -> *const c_char;
375    pub fn sd_bus_message_get_path(m: *mut sd_bus_message) -> *const c_char;
376    pub fn sd_bus_message_get_interface(m: *mut sd_bus_message) -> *const c_char;
377    pub fn sd_bus_message_get_member(m: *mut sd_bus_message) -> *const c_char;
378    pub fn sd_bus_message_get_destination(m: *mut sd_bus_message) -> *const c_char;
379    pub fn sd_bus_message_get_sender(m: *mut sd_bus_message) -> *const c_char;
380    pub fn sd_bus_message_get_error(m: *mut sd_bus_message) -> *const sd_bus_error;
381    pub fn sd_bus_message_get_errno(m: *mut sd_bus_message) -> c_int;
382
383    pub fn sd_bus_message_get_monotonic_usec(m: *mut sd_bus_message, usec: *mut u64) -> c_int;
384    pub fn sd_bus_message_get_realtime_usec(m: *mut sd_bus_message, usec: *mut u64) -> c_int;
385    pub fn sd_bus_message_get_seqnum(m: *mut sd_bus_message, seqnum: *mut u64) -> c_int;
386
387    pub fn sd_bus_message_get_bus(m: *mut sd_bus_message) -> *mut sd_bus;
388    /// do not unref the result
389    pub fn sd_bus_message_get_creds(m: *mut sd_bus_message) -> *mut sd_bus_creds;
390
391    pub fn sd_bus_message_is_signal(
392        m: *mut sd_bus_message,
393        interface: *const c_char,
394        member: *const c_char,
395    ) -> c_int;
396    pub fn sd_bus_message_is_method_call(
397        m: *mut sd_bus_message,
398        interface: *const c_char,
399        member: *const c_char,
400    ) -> c_int;
401    pub fn sd_bus_message_is_method_error(m: *mut sd_bus_message, name: *const c_char) -> c_int;
402    pub fn sd_bus_message_is_empty(m: *mut sd_bus_message) -> c_int;
403    pub fn sd_bus_message_has_signature(m: *mut sd_bus_message, signature: *const c_char) -> c_int;
404
405    pub fn sd_bus_message_set_expect_reply(m: *mut sd_bus_message, b: c_int) -> c_int;
406    pub fn sd_bus_message_set_auto_start(m: *mut sd_bus_message, b: c_int) -> c_int;
407    pub fn sd_bus_message_set_allow_interactive_authorization(
408        m: *mut sd_bus_message,
409        b: c_int,
410    ) -> c_int;
411
412    pub fn sd_bus_message_set_destination(
413        m: *mut sd_bus_message,
414        destination: *const c_char,
415    ) -> c_int;
416    pub fn sd_bus_message_set_sender(m: *mut sd_bus_message, sender: *const c_char) -> c_int;
417    pub fn sd_bus_message_set_priority(m: *mut sd_bus_message, priority: i64) -> c_int;
418
419    pub fn sd_bus_message_append(m: *mut sd_bus_message, types: *const c_char, ...) -> c_int;
420    // pub fn sd_bus_message_appendv(m: *mut sd_bus_message, types: *const c_char, ap: va_list) ->
421    // c_int;
422    pub fn sd_bus_message_append_basic(
423        m: *mut sd_bus_message,
424        typ: c_char,
425        p: *const c_void,
426    ) -> c_int;
427    pub fn sd_bus_message_append_array(
428        m: *mut sd_bus_message,
429        typ: c_char,
430        ptr: *const c_void,
431        size: size_t,
432    ) -> c_int;
433    pub fn sd_bus_message_append_array_space(
434        m: *mut sd_bus_message,
435        typ: c_char,
436        size: size_t,
437        ptr: *mut *mut c_void,
438    ) -> c_int;
439    pub fn sd_bus_message_append_array_iovec(
440        m: *mut sd_bus_message,
441        typ: c_char,
442        iov: *const const_iovec,
443        n: c_uint,
444    ) -> c_int;
445    pub fn sd_bus_message_append_array_memfd(
446        m: *mut sd_bus_message,
447        typ: c_char,
448        memfd: c_int,
449        offset: u64,
450        size: u64,
451    ) -> c_int;
452    pub fn sd_bus_message_append_string_space(
453        m: *mut sd_bus_message,
454        size: size_t,
455        s: *mut *mut c_char,
456    ) -> c_int;
457    pub fn sd_bus_message_append_string_iovec(
458        m: *mut sd_bus_message,
459        iov: *const const_iovec,
460        n: c_uint,
461    ) -> c_int;
462    pub fn sd_bus_message_append_string_memfd(
463        m: *mut sd_bus_message,
464        memfd: c_int,
465        offset: u64,
466        size: u64,
467    ) -> c_int;
468    pub fn sd_bus_message_append_strv(m: *mut sd_bus_message, l: *mut *mut c_char) -> c_int;
469    pub fn sd_bus_message_open_container(
470        m: *mut sd_bus_message,
471        typ: c_char,
472        contents: *const c_char,
473    ) -> c_int;
474    pub fn sd_bus_message_close_container(m: *mut sd_bus_message) -> c_int;
475    pub fn sd_bus_message_copy(
476        m: *mut sd_bus_message,
477        source: *mut sd_bus_message,
478        all: c_int,
479    ) -> c_int;
480
481    pub fn sd_bus_message_read(m: *mut sd_bus_message, types: *const c_char, ...) -> c_int;
482    //pub fn sd_bus_message_readv(m: *mut sd_bus_message, types: *const c_char, ap: va_list);
483    pub fn sd_bus_message_read_basic(m: *mut sd_bus_message, typ: c_char, p: *mut c_void) -> c_int;
484    pub fn sd_bus_message_read_array(
485        m: *mut sd_bus_message,
486        typ: c_char,
487        ptr: *mut *const c_void,
488        size: *mut size_t,
489    ) -> c_int;
490    // free the result!
491    pub fn sd_bus_message_read_strv(m: *mut sd_bus_message, l: *mut *mut *mut c_char) -> c_int;
492    pub fn sd_bus_message_skip(m: *mut sd_bus_message, types: *const c_char) -> c_int;
493    pub fn sd_bus_message_enter_container(
494        m: *mut sd_bus_message,
495        typ: c_char,
496        contents: *const c_char,
497    ) -> c_int;
498    pub fn sd_bus_message_exit_container(m: *mut sd_bus_message) -> c_int;
499    pub fn sd_bus_message_peek_type(
500        m: *mut sd_bus_message,
501        typ: *mut c_char,
502        contents: *mut *const c_char,
503    ) -> c_int;
504    pub fn sd_bus_message_verify_type(
505        m: *mut sd_bus_message,
506        typ: c_char,
507        contents: *const c_char,
508    ) -> c_int;
509    pub fn sd_bus_message_at_end(m: *mut sd_bus_message, complete: c_int) -> c_int;
510    pub fn sd_bus_message_rewind(m: *mut sd_bus_message, complete: c_int) -> c_int;
511
512    // Bus management
513
514    pub fn sd_bus_get_unique_name(bus: *mut sd_bus, unique: *mut *const c_char) -> c_int;
515    pub fn sd_bus_request_name(bus: *mut sd_bus, name: *const c_char, flags: u64) -> c_int;
516    pub fn sd_bus_request_name_async(
517        bus: *mut sd_bus,
518        ret_slot: *mut *mut sd_bus_slot,
519        name: *const c_char,
520        flags: u64,
521        callback: sd_bus_message_handler_t,
522        userdata: *mut c_void,
523    ) -> c_int;
524    pub fn sd_bus_release_name(bus: *mut sd_bus, name: *const c_char) -> c_int;
525    pub fn sd_bus_release_name_async(
526        bus: *mut sd_bus,
527        ret_slot: *mut *mut sd_bus_slot,
528        name: *const c_char,
529        callback: sd_bus_message_handler_t,
530        userdata: *mut c_void,
531    ) -> c_int;
532    // free the results
533    pub fn sd_bus_list_names(
534        bus: *mut sd_bus,
535        acquired: *mut *mut *mut c_char,
536        activatable: *mut *mut *mut c_char,
537    ) -> c_int;
538    // unref the result!
539    pub fn sd_bus_get_name_creds(
540        bus: *mut sd_bus,
541        name: *const c_char,
542        mask: u64,
543        creds: *mut *mut sd_bus_creds,
544    ) -> c_int;
545    pub fn sd_bus_get_name_machine_id(
546        bus: *mut sd_bus,
547        name: *const c_char,
548        machine: *mut sd_id128_t,
549    ) -> c_int;
550
551    // Convenience calls
552
553    pub fn sd_bus_call_method(
554        bus: *mut sd_bus,
555        destination: *const c_char,
556        path: *const c_char,
557        interface: *const c_char,
558        member: *const c_char,
559        ret_error: *mut sd_bus_error,
560        reply: *mut *mut sd_bus_message,
561        types: *const c_char,
562        ...
563    ) -> c_int;
564    pub fn sd_bus_call_method_async(
565        bus: *mut sd_bus,
566        slot: *mut *mut sd_bus_slot,
567        destination: *const c_char,
568        path: *const c_char,
569        interface: *const c_char,
570        member: *const c_char,
571        callback: sd_bus_message_handler_t,
572        userdata: *mut c_void,
573        types: *const c_char,
574        ...
575    ) -> c_int;
576    pub fn sd_bus_get_property(
577        bus: *mut sd_bus,
578        destination: *const c_char,
579        path: *const c_char,
580        interface: *const c_char,
581        member: *const c_char,
582        ret_error: *mut sd_bus_error,
583        reply: *mut *mut sd_bus_message,
584        typ: *const c_char,
585    ) -> c_int;
586    pub fn sd_bus_get_property_trivial(
587        bus: *mut sd_bus,
588        destination: *const c_char,
589        path: *const c_char,
590        interface: *const c_char,
591        member: *const c_char,
592        ret_error: *mut sd_bus_error,
593        typ: c_char,
594        ret_ptr: *mut c_void,
595    ) -> c_int;
596    /// free the result!
597    pub fn sd_bus_get_property_string(
598        bus: *mut sd_bus,
599        destination: *const c_char,
600        path: *const c_char,
601        interface: *const c_char,
602        member: *const c_char,
603        ret_error: *mut sd_bus_error,
604        ret: *mut *mut c_char,
605    ) -> c_int;
606    /// free the result!
607    pub fn sd_bus_get_property_strv(
608        bus: *mut sd_bus,
609        destination: *const c_char,
610        path: *const c_char,
611        interface: *const c_char,
612        member: *const c_char,
613        ret_error: *mut sd_bus_error,
614        ret: *mut *mut *mut c_char,
615    ) -> c_int;
616    pub fn sd_bus_set_property(
617        bus: *mut sd_bus,
618        destination: *const c_char,
619        path: *const c_char,
620        interface: *const c_char,
621        member: *const c_char,
622        ret_error: *mut sd_bus_error,
623        typ: *const c_char,
624        ...
625    ) -> c_int;
626
627    pub fn sd_bus_reply_method_return(
628        call: *mut sd_bus_message,
629        types: *const c_char,
630        ...
631    ) -> c_int;
632    pub fn sd_bus_reply_method_error(call: *mut sd_bus_message, e: *const sd_bus_error) -> c_int;
633    pub fn sd_bus_reply_method_errorf(
634        call: *mut sd_bus_message,
635        name: *const c_char,
636        format: *const c_char,
637        ...
638    ) -> c_int;
639    pub fn sd_bus_reply_method_errno(
640        call: *mut sd_bus_message,
641        error: c_int,
642        e: *const sd_bus_error,
643    ) -> c_int;
644    pub fn sd_bus_reply_method_errnof(
645        call: *mut sd_bus_message,
646        error: c_int,
647        format: *const c_char,
648        ...
649    ) -> c_int;
650
651    pub fn sd_bus_emit_signal(
652        bus: *mut sd_bus,
653        path: *const c_char,
654        interface: *const c_char,
655        member: *const c_char,
656        types: *const c_char,
657        ...
658    ) -> c_int;
659
660    pub fn sd_bus_emit_properties_changed_strv(
661        bus: *mut sd_bus,
662        path: *const c_char,
663        interface: *const c_char,
664        names: *mut *mut c_char,
665    ) -> c_int;
666    pub fn sd_bus_emit_properties_changed(
667        bus: *mut sd_bus,
668        path: *const c_char,
669        interface: *const c_char,
670        name: *const c_char,
671        ...
672    ) -> c_int;
673
674    pub fn sd_bus_emit_object_added(bus: *mut sd_bus, path: *const c_char) -> c_int;
675    pub fn sd_bus_emit_object_removed(bus: *mut sd_bus, path: *const c_char) -> c_int;
676    pub fn sd_bus_emit_interfaces_added_strv(
677        bus: *mut sd_bus,
678        path: *const c_char,
679        interfaces: *mut *mut c_char,
680    ) -> c_int;
681    pub fn sd_bus_emit_interfaces_added(
682        bus: *mut sd_bus,
683        path: *const c_char,
684        interface: *const c_char,
685        ...
686    ) -> c_int;
687    pub fn sd_bus_emit_interfaces_removed_strv(
688        bus: *mut sd_bus,
689        path: *const c_char,
690        interfaces: *mut *mut c_char,
691    ) -> c_int;
692    pub fn sd_bus_emit_interfaces_removed(
693        bus: *mut sd_bus,
694        path: *const c_char,
695        interface: *const c_char,
696        ...
697    ) -> c_int;
698
699    pub fn sd_bus_query_sender_creds(
700        call: *mut sd_bus_message,
701        mask: u64,
702        creds: *mut *mut sd_bus_creds,
703    ) -> c_int;
704    pub fn sd_bus_query_sender_privilege(call: *mut sd_bus_message, capability: c_int) -> c_int;
705
706    // Credential handling
707
708    pub fn sd_bus_creds_new_from_pid(
709        ret: *mut *mut sd_bus_creds,
710        pid: pid_t,
711        creds_mask: u64,
712    ) -> c_int;
713    pub fn sd_bus_creds_ref(c: *mut sd_bus_creds) -> *mut sd_bus_creds;
714    pub fn sd_bus_creds_unref(c: *mut sd_bus_creds) -> *mut sd_bus_creds;
715    pub fn sd_bus_creds_get_mask(c: *const sd_bus_creds) -> u64;
716    pub fn sd_bus_creds_get_augmented_mask(c: *const sd_bus_creds) -> u64;
717
718    pub fn sd_bus_creds_get_pid(c: *mut sd_bus_creds, pid: *mut pid_t) -> c_int;
719    pub fn sd_bus_creds_get_ppid(c: *mut sd_bus_creds, ppid: *mut pid_t) -> c_int;
720    pub fn sd_bus_creds_get_tid(c: *mut sd_bus_creds, tid: *mut pid_t) -> c_int;
721    pub fn sd_bus_creds_get_uid(c: *mut sd_bus_creds, uid: *mut uid_t) -> c_int;
722    pub fn sd_bus_creds_get_euid(c: *mut sd_bus_creds, euid: *mut uid_t) -> c_int;
723    pub fn sd_bus_creds_get_suid(c: *mut sd_bus_creds, suid: *mut uid_t) -> c_int;
724    pub fn sd_bus_creds_get_fsuid(c: *mut sd_bus_creds, fsuid: *mut uid_t) -> c_int;
725    pub fn sd_bus_creds_get_gid(c: *mut sd_bus_creds, gid: *mut gid_t) -> c_int;
726    pub fn sd_bus_creds_get_egid(c: *mut sd_bus_creds, egid: *mut gid_t) -> c_int;
727    pub fn sd_bus_creds_get_sgid(c: *mut sd_bus_creds, sgid: *mut gid_t) -> c_int;
728    pub fn sd_bus_creds_get_fsgid(c: *mut sd_bus_creds, fsgid: *mut gid_t) -> c_int;
729    pub fn sd_bus_creds_get_supplementary_gids(
730        c: *mut sd_bus_creds,
731        gids: *const *mut gid_t,
732    ) -> c_int;
733    pub fn sd_bus_creds_get_comm(c: *mut sd_bus_creds, comm: *mut *const c_char) -> c_int;
734    pub fn sd_bus_creds_get_tid_comm(c: *mut sd_bus_creds, comm: *mut *const c_char) -> c_int;
735    pub fn sd_bus_creds_get_exe(c: *mut sd_bus_creds, exe: *mut *const c_char) -> c_int;
736    pub fn sd_bus_creds_get_cmdline(c: *mut sd_bus_creds, cmdline: *mut *mut *mut c_char) -> c_int;
737    pub fn sd_bus_creds_get_cgroup(c: *mut sd_bus_creds, cgroup: *mut *const c_char) -> c_int;
738    pub fn sd_bus_creds_get_unit(c: *mut sd_bus_creds, unit: *mut *const c_char) -> c_int;
739    pub fn sd_bus_creds_get_slice(c: *mut sd_bus_creds, slice: *mut *const c_char) -> c_int;
740    pub fn sd_bus_creds_get_user_unit(c: *mut sd_bus_creds, unit: *mut *const c_char) -> c_int;
741    pub fn sd_bus_creds_get_user_slice(c: *mut sd_bus_creds, slice: *mut *const c_char) -> c_int;
742    pub fn sd_bus_creds_get_session(c: *mut sd_bus_creds, session: *mut *const c_char) -> c_int;
743    pub fn sd_bus_creds_get_owner_uid(c: *mut sd_bus_creds, uid: *mut uid_t) -> c_int;
744    pub fn sd_bus_creds_has_effective_cap(c: *mut sd_bus_creds, capability: c_int) -> c_int;
745    pub fn sd_bus_creds_has_permitted_cap(c: *mut sd_bus_creds, capability: c_int) -> c_int;
746    pub fn sd_bus_creds_has_inheritable_cap(c: *mut sd_bus_creds, capability: c_int) -> c_int;
747    pub fn sd_bus_creds_has_bounding_cap(c: *mut sd_bus_creds, capability: c_int) -> c_int;
748    pub fn sd_bus_creds_get_selinux_context(
749        c: *mut sd_bus_creds,
750        context: *mut *const c_char,
751    ) -> c_int;
752    pub fn sd_bus_creds_get_audit_session_id(c: *mut sd_bus_creds, sessionid: *mut u32) -> c_int;
753    pub fn sd_bus_creds_get_audit_login_uid(c: *mut sd_bus_creds, loginuid: *mut uid_t) -> c_int;
754    pub fn sd_bus_creds_get_tty(c: *mut sd_bus_creds, tty: *mut *const c_char) -> c_int;
755    pub fn sd_bus_creds_get_unique_name(c: *mut sd_bus_creds, name: *mut *const c_char) -> c_int;
756    pub fn sd_bus_creds_get_well_known_names(
757        c: *mut sd_bus_creds,
758        names: *mut *mut *mut c_char,
759    ) -> c_int;
760    pub fn sd_bus_creds_get_description(c: *mut sd_bus_creds, name: *mut *const c_char) -> c_int;
761
762    // Error structures
763
764    pub fn sd_bus_error_free(e: *mut sd_bus_error);
765    pub fn sd_bus_error_set(
766        e: *mut sd_bus_error,
767        name: *const c_char,
768        message: *const c_char,
769    ) -> c_int;
770    pub fn sd_bus_error_setf(
771        e: *mut sd_bus_error,
772        name: *const c_char,
773        format: *const c_char,
774        ...
775    ) -> c_int;
776    pub fn sd_bus_error_set_const(
777        e: *mut sd_bus_error,
778        name: *const c_char,
779        message: *const c_char,
780    ) -> c_int;
781    pub fn sd_bus_error_set_errno(e: *mut sd_bus_error, error: c_int) -> c_int;
782    pub fn sd_bus_error_set_errnof(
783        e: *mut sd_bus_error,
784        error: c_int,
785        format: *const c_char,
786        ...
787    ) -> c_int;
788
789    pub fn sd_bus_error_get_errno(e: *const sd_bus_error) -> c_int;
790    pub fn sd_bus_error_copy(dest: *mut sd_bus_error, e: *const sd_bus_error) -> c_int;
791    pub fn sd_bus_error_is_set(e: *const sd_bus_error) -> c_int;
792    pub fn sd_bus_error_has_name(e: *const sd_bus_error, name: *const c_char) -> c_int;
793
794    pub fn sd_bus_error_add_map(map: *const sd_bus_error_map) -> c_int;
795
796    // Label escaping
797
798    pub fn sd_bus_path_encode(
799        prefix: *const c_char,
800        external_id: *const c_char,
801        ret_path: *mut *mut c_char,
802    ) -> c_int;
803    pub fn sd_bus_path_encode_many(
804        out: *mut *mut c_char,
805        path_template: *const c_char,
806        ...
807    ) -> c_int;
808    pub fn sd_bus_path_decode(
809        path: *const c_char,
810        prefix: *const c_char,
811        ret_external_id: *mut *mut c_char,
812    ) -> c_int;
813    pub fn sd_bus_path_decode_many(path: *const c_char, path_template: *const c_char, ...)
814        -> c_int;
815
816    // Tracking peers
817
818    pub fn sd_bus_track_new(
819        bus: *mut sd_bus,
820        track: *mut *mut sd_bus_track,
821        handler: sd_bus_track_handler_t,
822        userdata: *mut c_void,
823    ) -> c_int;
824    pub fn sd_bus_track_ref(track: *mut sd_bus_track) -> *mut sd_bus_track;
825    pub fn sd_bus_track_unref(track: *mut sd_bus_track) -> *mut sd_bus_track;
826
827    pub fn sd_bus_track_get_bus(track: *mut sd_bus_track) -> *mut sd_bus;
828    pub fn sd_bus_track_get_userdata(track: *mut sd_bus_track) -> *mut c_void;
829    pub fn sd_bus_track_set_userdata(
830        track: *mut sd_bus_track,
831        userdata: *mut c_void,
832    ) -> *mut c_void;
833
834    pub fn sd_bus_track_add_sender(track: *mut sd_bus_track, m: *mut sd_bus_message) -> c_int;
835    pub fn sd_bus_track_remove_sender(track: *mut sd_bus_track, m: *mut sd_bus_message) -> c_int;
836    pub fn sd_bus_track_add_name(track: *mut sd_bus_track, name: *const c_char) -> c_int;
837    pub fn sd_bus_track_remove_name(track: *mut sd_bus_track, name: *const c_char) -> c_int;
838
839    pub fn sd_bus_track_set_recursive(track: *mut sd_bus_track, b: c_int) -> c_int;
840    pub fn sd_bus_track_count_sender(track: *mut sd_bus_track, m: *mut sd_bus_message) -> c_int;
841    pub fn sd_bus_track_count_name(track: *mut sd_bus_track, name: *const c_char) -> c_int;
842
843    pub fn sd_bus_track_count(track: *mut sd_bus_track) -> c_uint;
844    pub fn sd_bus_track_contains(track: *mut sd_bus_track, names: *const c_char) -> *const c_char;
845    pub fn sd_bus_track_first(track: *mut sd_bus_track) -> *const c_char;
846    pub fn sd_bus_track_next(track: *mut sd_bus_track) -> *const c_char;
847
848    pub fn sd_bus_track_set_destroy_callback(
849        track: *mut sd_bus_track,
850        callback: sd_bus_destroy_t,
851    ) -> c_int;
852    pub fn sd_bus_track_get_destroy_callback(
853        track: *mut sd_bus_track,
854        ret: *mut sd_bus_destroy_t,
855    ) -> c_int;
856}