]> git.proxmox.com Git - systemd.git/blame - src/systemd/sd-bus.h
Imported Upstream version 214
[systemd.git] / src / systemd / sd-bus.h
CommitLineData
663996b3
MS
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#ifndef foosdbushfoo
4#define foosdbushfoo
5
6/***
7 This file is part of systemd.
8
9 Copyright 2013 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
20
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <inttypes.h>
26#include <sys/types.h>
60f067b4 27#include <sys/uio.h>
663996b3 28
60f067b4
JS
29#include "sd-id128.h"
30#include "sd-event.h"
14228c0d 31#include "sd-memfd.h"
60f067b4 32#include "_sd-common.h"
663996b3 33
60f067b4 34_SD_BEGIN_DECLARATIONS;
663996b3 35
60f067b4 36/* Types */
663996b3 37
663996b3
MS
38typedef struct sd_bus sd_bus;
39typedef struct sd_bus_message sd_bus_message;
60f067b4
JS
40typedef struct sd_bus_slot sd_bus_slot;
41typedef struct sd_bus_creds sd_bus_creds;
42typedef struct sd_bus_track sd_bus_track;
663996b3
MS
43
44typedef struct {
45 const char *name;
46 const char *message;
60f067b4 47 int _need_free;
663996b3
MS
48} sd_bus_error;
49
60f067b4
JS
50/* Flags */
51
52enum {
53 SD_BUS_CREDS_PID = 1ULL << 0,
54 SD_BUS_CREDS_PID_STARTTIME = 1ULL << 1,
55 SD_BUS_CREDS_TID = 1ULL << 2,
56 SD_BUS_CREDS_UID = 1ULL << 3,
57 SD_BUS_CREDS_GID = 1ULL << 4,
58 SD_BUS_CREDS_COMM = 1ULL << 5,
59 SD_BUS_CREDS_TID_COMM = 1ULL << 6,
60 SD_BUS_CREDS_EXE = 1ULL << 7,
61 SD_BUS_CREDS_CMDLINE = 1ULL << 8,
62 SD_BUS_CREDS_CGROUP = 1ULL << 9,
63 SD_BUS_CREDS_UNIT = 1ULL << 10,
64 SD_BUS_CREDS_USER_UNIT = 1ULL << 11,
65 SD_BUS_CREDS_SLICE = 1ULL << 12,
66 SD_BUS_CREDS_SESSION = 1ULL << 13,
67 SD_BUS_CREDS_OWNER_UID = 1ULL << 14,
68 SD_BUS_CREDS_EFFECTIVE_CAPS = 1ULL << 15,
69 SD_BUS_CREDS_PERMITTED_CAPS = 1ULL << 16,
70 SD_BUS_CREDS_INHERITABLE_CAPS = 1ULL << 17,
71 SD_BUS_CREDS_BOUNDING_CAPS = 1ULL << 18,
72 SD_BUS_CREDS_SELINUX_CONTEXT = 1ULL << 19,
73 SD_BUS_CREDS_AUDIT_SESSION_ID = 1ULL << 20,
74 SD_BUS_CREDS_AUDIT_LOGIN_UID = 1ULL << 21,
75 SD_BUS_CREDS_UNIQUE_NAME = 1ULL << 22,
76 SD_BUS_CREDS_WELL_KNOWN_NAMES = 1ULL << 23,
77 SD_BUS_CREDS_CONNECTION_NAME = 1ULL << 24,
78 _SD_BUS_CREDS_ALL = (1ULL << 25) -1,
79};
80
81enum {
82 SD_BUS_NAME_REPLACE_EXISTING = 1ULL << 0,
83 SD_BUS_NAME_ALLOW_REPLACEMENT = 1ULL << 1,
84 SD_BUS_NAME_QUEUE = 1ULL << 2,
85};
86
87/* Callbacks */
88
89typedef int (*sd_bus_message_handler_t)(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *ret_error);
90typedef int (*sd_bus_property_get_t) (sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *ret_error);
91typedef int (*sd_bus_property_set_t) (sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *value, void *userdata, sd_bus_error *ret_error);
92typedef int (*sd_bus_object_find_t) (sd_bus *bus, const char *path, const char *interface, void *userdata, void **ret_found, sd_bus_error *ret_error);
93typedef int (*sd_bus_node_enumerator_t) (sd_bus *bus, const char *path, void *userdata, char ***ret_nodes, sd_bus_error *ret_error);
94typedef int (*sd_bus_track_handler_t) (sd_bus_track *track, void *userdata);
95
96#include "sd-bus-protocol.h"
97#include "sd-bus-vtable.h"
663996b3
MS
98
99/* Connections */
100
60f067b4
JS
101int sd_bus_default(sd_bus **ret);
102int sd_bus_default_user(sd_bus **ret);
103int sd_bus_default_system(sd_bus **ret);
104
105int sd_bus_open(sd_bus **ret);
663996b3 106int sd_bus_open_user(sd_bus **ret);
60f067b4
JS
107int sd_bus_open_system(sd_bus **ret);
108int sd_bus_open_system_remote(sd_bus **ret, const char *host);
109int sd_bus_open_system_container(sd_bus **ret, const char *machine);
663996b3
MS
110
111int sd_bus_new(sd_bus **ret);
112int sd_bus_set_address(sd_bus *bus, const char *address);
113int sd_bus_set_fd(sd_bus *bus, int input_fd, int output_fd);
114int sd_bus_set_exec(sd_bus *bus, const char *path, char *const argv[]);
115int sd_bus_set_bus_client(sd_bus *bus, int b);
116int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id);
117int sd_bus_set_anonymous(sd_bus *bus, int b);
60f067b4
JS
118int sd_bus_set_trusted(sd_bus *bus, int b);
119int sd_bus_set_name(sd_bus *bus, const char *name);
120int sd_bus_set_monitor(sd_bus *bus, int b);
14228c0d 121int sd_bus_negotiate_fds(sd_bus *bus, int b);
60f067b4
JS
122int sd_bus_negotiate_timestamp(sd_bus *bus, int b);
123int sd_bus_negotiate_creds(sd_bus *bus, uint64_t creds_mask);
663996b3
MS
124int sd_bus_start(sd_bus *ret);
125
60f067b4 126int sd_bus_try_close(sd_bus *bus);
663996b3
MS
127void sd_bus_close(sd_bus *bus);
128
129sd_bus *sd_bus_ref(sd_bus *bus);
130sd_bus *sd_bus_unref(sd_bus *bus);
131
132int sd_bus_is_open(sd_bus *bus);
133int sd_bus_can_send(sd_bus *bus, char type);
134int sd_bus_get_server_id(sd_bus *bus, sd_id128_t *peer);
60f067b4
JS
135int sd_bus_get_peer_creds(sd_bus *bus, uint64_t creds_mask, sd_bus_creds **ret);
136int sd_bus_get_name(sd_bus *bus, const char **name);
137int sd_bus_get_tid(sd_bus *bus, pid_t *tid);
663996b3 138
60f067b4
JS
139int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *cookie);
140int sd_bus_send_to(sd_bus *bus, sd_bus_message *m, const char *destination, uint64_t *cookie);
141int sd_bus_call(sd_bus *bus, sd_bus_message *m, uint64_t usec, sd_bus_error *ret_error, sd_bus_message **reply);
142int sd_bus_call_async(sd_bus *bus, sd_bus_slot **slot, sd_bus_message *m, sd_bus_message_handler_t callback, void *userdata, uint64_t usec);
663996b3
MS
143
144int sd_bus_get_fd(sd_bus *bus);
145int sd_bus_get_events(sd_bus *bus);
146int sd_bus_get_timeout(sd_bus *bus, uint64_t *timeout_usec);
147int sd_bus_process(sd_bus *bus, sd_bus_message **r);
60f067b4 148int sd_bus_process_priority(sd_bus *bus, int64_t max_priority, sd_bus_message **r);
663996b3
MS
149int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec);
150int sd_bus_flush(sd_bus *bus);
60f067b4
JS
151sd_bus_message* sd_bus_get_current_message(sd_bus *bus);
152sd_bus_slot* sd_bus_get_current_slot(sd_bus *bus);
153
154int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority);
155int sd_bus_detach_event(sd_bus *bus);
156sd_event *sd_bus_get_event(sd_bus *bus);
663996b3 157
60f067b4
JS
158int sd_bus_add_filter(sd_bus *bus, sd_bus_slot **slot, sd_bus_message_handler_t callback, void *userdata);
159int sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata);
160int sd_bus_add_object(sd_bus *bus, sd_bus_slot **slot, const char *path, sd_bus_message_handler_t callback, void *userdata);
161int sd_bus_add_fallback(sd_bus *bus, sd_bus_slot **slot, const char *prefix, sd_bus_message_handler_t callback, void *userdata);
162int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot, const char *path, const char *interface, const sd_bus_vtable *vtable, void *userdata);
163int sd_bus_add_fallback_vtable(sd_bus *bus, sd_bus_slot **slot, const char *prefix, const char *interface, const sd_bus_vtable *vtable, sd_bus_object_find_t find, void *userdata);
164int sd_bus_add_node_enumerator(sd_bus *bus, sd_bus_slot **slot, const char *path, sd_bus_node_enumerator_t callback, void *userdata);
165int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot, const char *path);
663996b3 166
60f067b4 167/* Slot object */
663996b3 168
60f067b4
JS
169sd_bus_slot* sd_bus_slot_ref(sd_bus_slot *slot);
170sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot);
663996b3 171
60f067b4
JS
172sd_bus* sd_bus_slot_get_bus(sd_bus_slot *slot);
173
174void *sd_bus_slot_get_userdata(sd_bus_slot *slot);
175void *sd_bus_slot_set_userdata(sd_bus_slot *slot, void *userdata);
176
177sd_bus_message* sd_bus_slot_get_current_message(sd_bus_slot *slot);
663996b3
MS
178
179/* Message object */
180
60f067b4
JS
181int sd_bus_message_new_signal(sd_bus *bus, sd_bus_message **m, const char *path, const char *interface, const char *member);
182int sd_bus_message_new_method_call(sd_bus *bus, sd_bus_message **m, const char *destination, const char *path, const char *interface, const char *member);
183int sd_bus_message_new_method_return(sd_bus_message *call, sd_bus_message **m);
184int sd_bus_message_new_method_error(sd_bus_message *call, sd_bus_message **m, const sd_bus_error *e);
185int sd_bus_message_new_method_errorf(sd_bus_message *call, sd_bus_message **m, const char *name, const char *format, ...) _sd_printf_(4, 5);
186int sd_bus_message_new_method_errno(sd_bus_message *call, sd_bus_message **m, int error, const sd_bus_error *e);
187int sd_bus_message_new_method_errnof(sd_bus_message *call, sd_bus_message **m, int error, const char *format, ...) _sd_printf_(4, 5);
663996b3
MS
188
189sd_bus_message* sd_bus_message_ref(sd_bus_message *m);
190sd_bus_message* sd_bus_message_unref(sd_bus_message *m);
191
192int sd_bus_message_get_type(sd_bus_message *m, uint8_t *type);
60f067b4
JS
193int sd_bus_message_get_cookie(sd_bus_message *m, uint64_t *cookie);
194int sd_bus_message_get_reply_cookie(sd_bus_message *m, uint64_t *cookie);
195int sd_bus_message_get_expect_reply(sd_bus_message *m);
196int sd_bus_message_get_auto_start(sd_bus_message *m);
197int sd_bus_message_get_priority(sd_bus_message *m, int64_t *priority);
663996b3 198
60f067b4 199const char *sd_bus_message_get_signature(sd_bus_message *m, int complete);
663996b3
MS
200const char *sd_bus_message_get_path(sd_bus_message *m);
201const char *sd_bus_message_get_interface(sd_bus_message *m);
202const char *sd_bus_message_get_member(sd_bus_message *m);
203const char *sd_bus_message_get_destination(sd_bus_message *m);
204const char *sd_bus_message_get_sender(sd_bus_message *m);
205const sd_bus_error *sd_bus_message_get_error(sd_bus_message *m);
60f067b4 206int sd_bus_message_get_errno(sd_bus_message *m);
663996b3 207
60f067b4
JS
208int sd_bus_message_get_monotonic_usec(sd_bus_message *m, uint64_t *usec);
209int sd_bus_message_get_realtime_usec(sd_bus_message *m, uint64_t *usec);
210int sd_bus_message_get_seqnum(sd_bus_message *m, uint64_t* seqnum);
211
212sd_bus* sd_bus_message_get_bus(sd_bus_message *m);
213sd_bus_creds *sd_bus_message_get_creds(sd_bus_message *m); /* do not unref the result */
663996b3
MS
214
215int sd_bus_message_is_signal(sd_bus_message *m, const char *interface, const char *member);
216int sd_bus_message_is_method_call(sd_bus_message *m, const char *interface, const char *member);
217int sd_bus_message_is_method_error(sd_bus_message *m, const char *name);
218
60f067b4
JS
219int sd_bus_message_set_expect_reply(sd_bus_message *m, int b);
220int sd_bus_message_set_auto_start(sd_bus_message *m, int b);
663996b3 221int sd_bus_message_set_destination(sd_bus_message *m, const char *destination);
60f067b4 222int sd_bus_message_set_priority(sd_bus_message *m, int64_t priority);
663996b3
MS
223
224int sd_bus_message_append(sd_bus_message *m, const char *types, ...);
225int sd_bus_message_append_basic(sd_bus_message *m, char type, const void *p);
14228c0d
MB
226int sd_bus_message_append_array(sd_bus_message *m, char type, const void *ptr, size_t size);
227int sd_bus_message_append_array_space(sd_bus_message *m, char type, size_t size, void **ptr);
60f067b4 228int sd_bus_message_append_array_iovec(sd_bus_message *m, char type, const struct iovec *iov, unsigned n);
14228c0d
MB
229int sd_bus_message_append_array_memfd(sd_bus_message *m, char type, sd_memfd *memfd);
230int sd_bus_message_append_string_space(sd_bus_message *m, size_t size, char **s);
60f067b4 231int sd_bus_message_append_string_iovec(sd_bus_message *m, const struct iovec *iov, unsigned n);
14228c0d 232int sd_bus_message_append_string_memfd(sd_bus_message *m, sd_memfd* memfd);
60f067b4 233int sd_bus_message_append_strv(sd_bus_message *m, char **l);
663996b3
MS
234int sd_bus_message_open_container(sd_bus_message *m, char type, const char *contents);
235int sd_bus_message_close_container(sd_bus_message *m);
60f067b4 236int sd_bus_message_copy(sd_bus_message *m, sd_bus_message *source, int all);
663996b3
MS
237
238int sd_bus_message_read(sd_bus_message *m, const char *types, ...);
239int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p);
14228c0d 240int sd_bus_message_read_array(sd_bus_message *m, char type, const void **ptr, size_t *size);
60f067b4
JS
241int sd_bus_message_read_strv(sd_bus_message *m, char ***l); /* free the result! */
242int sd_bus_message_skip(sd_bus_message *m, const char *types);
663996b3
MS
243int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *contents);
244int sd_bus_message_exit_container(sd_bus_message *m);
245int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char **contents);
60f067b4
JS
246int sd_bus_message_verify_type(sd_bus_message *m, char type, const char *contents);
247int sd_bus_message_at_end(sd_bus_message *m, int complete);
663996b3
MS
248int sd_bus_message_rewind(sd_bus_message *m, int complete);
249
663996b3
MS
250/* Bus management */
251
252int sd_bus_get_unique_name(sd_bus *bus, const char **unique);
60f067b4 253int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags);
663996b3 254int sd_bus_release_name(sd_bus *bus, const char *name);
60f067b4
JS
255int sd_bus_list_names(sd_bus *bus, char ***acquired, char ***activatable); /* free the results */
256int sd_bus_get_owner(sd_bus *bus, const char *name, uint64_t mask, sd_bus_creds **creds); /* unref the result! */
663996b3
MS
257int sd_bus_get_owner_machine_id(sd_bus *bus, const char *name, sd_id128_t *machine);
258
60f067b4
JS
259/* Convenience calls */
260
261int sd_bus_call_method(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *ret_error, sd_bus_message **reply, const char *types, ...);
262int sd_bus_get_property(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *ret_error, sd_bus_message **reply, const char *type);
263int sd_bus_get_property_trivial(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *ret_error, char type, void *ret_ptr);
264int sd_bus_get_property_string(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *ret_error, char **ret); /* free the result! */
265int sd_bus_get_property_strv(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *ret_error, char ***ret); /* free the result! */
266int sd_bus_set_property(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *ret_error, const char *ret_type, ...);
267
268int sd_bus_reply_method_return(sd_bus_message *call, const char *types, ...);
269int sd_bus_reply_method_error(sd_bus_message *call, const sd_bus_error *e);
270int sd_bus_reply_method_errorf(sd_bus_message *call, const char *name, const char *format, ...) _sd_printf_(3, 4);
271int sd_bus_reply_method_errno(sd_bus_message *call, int error, const sd_bus_error *e);
272int sd_bus_reply_method_errnof(sd_bus_message *call, int error, const char *format, ...) _sd_printf_(3, 4);
273
274int sd_bus_emit_signal(sd_bus *bus, const char *path, const char *interface, const char *member, const char *types, ...);
275
276int sd_bus_emit_properties_changed_strv(sd_bus *bus, const char *path, const char *interface, char **names);
277int sd_bus_emit_properties_changed(sd_bus *bus, const char *path, const char *interface, const char *name, ...) _sd_sentinel_;
278
279int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces);
280int sd_bus_emit_interfaces_added(sd_bus *bus, const char *path, const char *interface, ...) _sd_sentinel_;
281int sd_bus_emit_interfaces_removed_strv(sd_bus *bus, const char *path, char **interfaces);
282int sd_bus_emit_interfaces_removed(sd_bus *bus, const char *path, const char *interface, ...) _sd_sentinel_;
283
284int sd_bus_query_sender_creds(sd_bus_message *call, uint64_t mask, sd_bus_creds **creds);
285
286/* Credential handling */
287
288int sd_bus_creds_new_from_pid(sd_bus_creds **ret, pid_t pid, uint64_t creds_mask);
289sd_bus_creds *sd_bus_creds_ref(sd_bus_creds *c);
290sd_bus_creds *sd_bus_creds_unref(sd_bus_creds *c);
291uint64_t sd_bus_creds_get_mask(const sd_bus_creds *c);
292
293int sd_bus_creds_get_pid(sd_bus_creds *c, pid_t *pid);
294int sd_bus_creds_get_pid_starttime(sd_bus_creds *c, uint64_t *usec);
295int sd_bus_creds_get_tid(sd_bus_creds *c, pid_t *tid);
296int sd_bus_creds_get_uid(sd_bus_creds *c, uid_t *uid);
297int sd_bus_creds_get_gid(sd_bus_creds *c, gid_t *gid);
298int sd_bus_creds_get_comm(sd_bus_creds *c, const char **comm);
299int sd_bus_creds_get_tid_comm(sd_bus_creds *c, const char **comm);
300int sd_bus_creds_get_exe(sd_bus_creds *c, const char **exe);
301int sd_bus_creds_get_cmdline(sd_bus_creds *c, char ***cmdline);
302int sd_bus_creds_get_cgroup(sd_bus_creds *c, const char **cgroup);
303int sd_bus_creds_get_unit(sd_bus_creds *c, const char **unit);
304int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **unit);
305int sd_bus_creds_get_slice(sd_bus_creds *c, const char **slice);
306int sd_bus_creds_get_session(sd_bus_creds *c, const char **session);
307int sd_bus_creds_get_owner_uid(sd_bus_creds *c, uid_t *uid);
308int sd_bus_creds_has_effective_cap(sd_bus_creds *c, int capability);
309int sd_bus_creds_has_permitted_cap(sd_bus_creds *c, int capability);
310int sd_bus_creds_has_inheritable_cap(sd_bus_creds *c, int capability);
311int sd_bus_creds_has_bounding_cap(sd_bus_creds *c, int capability);
312int sd_bus_creds_get_selinux_context(sd_bus_creds *c, const char **context);
313int sd_bus_creds_get_audit_session_id(sd_bus_creds *c, uint32_t *sessionid);
314int sd_bus_creds_get_audit_login_uid(sd_bus_creds *c, uid_t *loginuid);
315int sd_bus_creds_get_unique_name(sd_bus_creds *c, const char **name);
316int sd_bus_creds_get_well_known_names(sd_bus_creds *c, char ***names);
317int sd_bus_creds_get_connection_name(sd_bus_creds *c, const char **name);
318
663996b3
MS
319/* Error structures */
320
60f067b4
JS
321#define SD_BUS_ERROR_MAKE_CONST(name, message) ((const sd_bus_error) {(name), (message), 0})
322#define SD_BUS_ERROR_NULL SD_BUS_ERROR_MAKE_CONST(NULL, NULL)
663996b3
MS
323
324void sd_bus_error_free(sd_bus_error *e);
60f067b4
JS
325int sd_bus_error_set(sd_bus_error *e, const char *name, const char *message);
326int sd_bus_error_setf(sd_bus_error *e, const char *name, const char *format, ...) _sd_printf_(3, 4);
327int sd_bus_error_set_const(sd_bus_error *e, const char *name, const char *message);
328int sd_bus_error_set_errno(sd_bus_error *e, int error);
329int sd_bus_error_set_errnof(sd_bus_error *e, int error, const char *format, ...) _sd_printf_(3, 4);
330int sd_bus_error_get_errno(const sd_bus_error *e);
663996b3
MS
331int sd_bus_error_copy(sd_bus_error *dest, const sd_bus_error *e);
332int sd_bus_error_is_set(const sd_bus_error *e);
333int sd_bus_error_has_name(const sd_bus_error *e, const char *name);
334
60f067b4
JS
335/* Auxiliary macros */
336
337#define SD_BUS_MESSAGE_APPEND_ID128(x) 16, \
338 (x).bytes[0], (x).bytes[1], (x).bytes[2], (x).bytes[3], \
339 (x).bytes[4], (x).bytes[5], (x).bytes[6], (x).bytes[7], \
14228c0d
MB
340 (x).bytes[8], (x).bytes[9], (x).bytes[10], (x).bytes[11], \
341 (x).bytes[12], (x).bytes[13], (x).bytes[14], (x).bytes[15]
342
60f067b4
JS
343#define SD_BUS_MESSAGE_READ_ID128(x) 16, \
344 &(x).bytes[0], &(x).bytes[1], &(x).bytes[2], &(x).bytes[3], \
345 &(x).bytes[4], &(x).bytes[5], &(x).bytes[6], &(x).bytes[7], \
346 &(x).bytes[8], &(x).bytes[9], &(x).bytes[10], &(x).bytes[11], \
347 &(x).bytes[12], &(x).bytes[13], &(x).bytes[14], &(x).bytes[15]
348
349/* Label escaping */
350
351int sd_bus_path_encode(const char *prefix, const char *external_id, char **ret_path);
352int sd_bus_path_decode(const char *path, const char *prefix, char **ret_external_id);
353
354/* Tracking peers */
355
356int sd_bus_track_new(sd_bus *bus, sd_bus_track **track, sd_bus_track_handler_t handler, void *userdata);
357sd_bus_track* sd_bus_track_ref(sd_bus_track *track);
358sd_bus_track* sd_bus_track_unref(sd_bus_track *track);
359
360sd_bus* sd_bus_track_get_bus(sd_bus_track *track);
361void *sd_bus_track_get_userdata(sd_bus_track *track);
362void *sd_bus_track_set_userdata(sd_bus_track *track, void *userdata);
363
364int sd_bus_track_add_sender(sd_bus_track *track, sd_bus_message *m);
365int sd_bus_track_remove_sender(sd_bus_track *track, sd_bus_message *m);
366int sd_bus_track_add_name(sd_bus_track *track, const char *name);
367int sd_bus_track_remove_name(sd_bus_track *track, const char *name);
368
369unsigned sd_bus_track_count(sd_bus_track *track);
370const char* sd_bus_track_contains(sd_bus_track *track, const char *names);
371const char* sd_bus_track_first(sd_bus_track *track);
372const char* sd_bus_track_next(sd_bus_track *track);
373
374_SD_END_DECLARATIONS;
663996b3
MS
375
376#endif