]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd-bus/sd-bus.h
bus: demarshal header fields properly
[thirdparty/systemd.git] / src / libsystemd-bus / sd-bus.h
CommitLineData
de1c301e
LP
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>
27
28#include "sd-bus-protocol.h"
29
9a17484d
LP
30/* TODO:
31 *
32 * - make unix fd passing work
33 * - add page donation logic
34 * - api for appending/reading fixed arrays
35 */
36
de1c301e
LP
37typedef struct sd_bus sd_bus;
38typedef struct sd_bus_message sd_bus_message;
39
40typedef struct {
41 const char *name;
42 const char *message;
43 int need_free;
44} sd_bus_error;
45
46typedef int (*sd_message_handler_t)(sd_bus *bus, sd_bus_message *m, void *userdata);
47
48/* Connections */
49
50int sd_bus_open_system(sd_bus **ret);
51int sd_bus_open_user(sd_bus **ret);
52int sd_bus_open_address(const char *address, sd_bus **ret);
53int sd_bus_open_fd(int fd, sd_bus **ret);
54void sd_bus_close(sd_bus *bus);
55
56sd_bus *sd_bus_ref(sd_bus *bus);
57sd_bus *sd_bus_unref(sd_bus *bus);
58
59int sd_bus_is_running(sd_bus *bus);
60int sd_bus_can_send(sd_bus *bus, char type);
61
62int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial);
63int sd_bus_send_with_reply(sd_bus *bus, sd_bus_message *m, sd_message_handler_t callback, void *userdata, uint64_t usec, uint64_t *serial);
64int sd_bus_send_with_reply_cancel(sd_bus *bus, uint64_t serial);
65int sd_bus_send_with_reply_and_block(sd_bus *bus, sd_bus_message *m, uint64_t usec, sd_bus_error *error, sd_bus_message **r);
66
67int sd_bus_get_fd(sd_bus *bus);
68int sd_bus_get_events(sd_bus *bus);
69int sd_bus_process(sd_bus *bus, sd_bus_message **r);
70int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec);
71int sd_bus_flush(sd_bus *bus);
72
73int sd_bus_add_filter(sd_bus *bus, sd_message_handler_t callback, void *userdata);
74int sd_bus_remove_filter(sd_bus *bus, sd_message_handler_t callback, void *userdata);
75
76/* Message object */
77
78int sd_bus_message_new_signal(sd_bus *bus, const char *path, const char *interface, const char *member, sd_bus_message **m);
79int sd_bus_message_new_method_call(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_message **m);
80int sd_bus_message_new_method_return(sd_bus *bus, sd_bus_message *call, sd_bus_message **m);
81int sd_bus_message_new_method_error(sd_bus *bus, sd_bus_message *call, const sd_bus_error *e, sd_bus_message **m);
82
83sd_bus_message* sd_bus_message_ref(sd_bus_message *m);
84sd_bus_message* sd_bus_message_unref(sd_bus_message *m);
85
86int sd_bus_message_get_type(sd_bus_message *m, uint8_t *type);
87int sd_bus_message_get_serial(sd_bus_message *m, uint64_t *serial);
88int sd_bus_message_get_reply_serial(sd_bus_message *m, uint64_t *serial);
89int sd_bus_message_get_no_reply(sd_bus_message *m);
90
91const char *sd_bus_message_get_path(sd_bus_message *m);
92const char *sd_bus_message_get_interface(sd_bus_message *m);
93const char *sd_bus_message_get_member(sd_bus_message *m);
94const char *sd_bus_message_get_destination(sd_bus_message *m);
95const char *sd_bus_message_get_sender(sd_bus_message *m);
96const sd_bus_error *sd_bus_message_get_error(sd_bus_message *m);
97
98int sd_bus_message_get_uid(sd_bus_message *m, uid_t *uid);
99int sd_bus_message_get_gid(sd_bus_message *m, gid_t *gid);
100int sd_bus_message_get_pid(sd_bus_message *m, pid_t *pid);
101int sd_bus_message_get_tid(sd_bus_message *m, pid_t *tid);
102
103int sd_bus_message_is_signal(sd_bus_message *m, const char *interface, const char *member);
104int sd_bus_message_is_method_call(sd_bus_message *m, const char *interface, const char *member);
105int sd_bus_message_is_method_error(sd_bus_message *m, const char *name);
106
107int sd_bus_message_set_no_reply(sd_bus_message *m, int b);
108int sd_bus_message_set_destination(sd_bus_message *m, const char *destination);
109
110int sd_bus_message_append(sd_bus_message *m, const char *types, ...);
111int sd_bus_message_append_basic(sd_bus_message *m, char type, const void *p);
112int sd_bus_message_open_container(sd_bus_message *m, char type, const char *contents);
113int sd_bus_message_close_container(sd_bus_message *m);
114
de1c301e 115int sd_bus_message_read(sd_bus_message *m, const char *types, ...);
9a17484d
LP
116int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p);
117int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *contents);
118int sd_bus_message_exit_container(sd_bus_message *m);
119int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char **contents);
120int sd_bus_message_rewind(sd_bus_message *m, bool complete);
de1c301e
LP
121
122/* Bus management */
123
124const char *sd_bus_get_unique_name(sd_bus *bus);
125int sd_bus_request_name(sd_bus *bus, const char *name, int flags);
126int sd_bus_release_name(sd_bus *bus, const char *name);
127int sd_bus_list_names(sd_bus *bus, char ***l);
128int sd_bus_get_owner(sd_bus *bus, const char *name, char **owner);
129int sd_bus_get_owner_uid(sd_bus *bus, const char *name, uid_t *uid);
130int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid);
131int sd_bus_add_match(sd_bus *bus, const char *match);
132int sd_bus_remove_match(sd_bus *bus, const char *match);
133
134/* Error objects */
135
136#define SD_BUS_ERROR_INIT (NULL, NULL, false)
137
138void sd_bus_error_free(sd_bus_error *e);
139int sd_bus_error_set(sd_bus_error *e, const char *name, const char *format, ...);
140void sd_bus_error_set_const(sd_bus_error *e, const char *name, const char *message);
141int sd_bus_error_copy(sd_bus_error *dest, const sd_bus_error *e);
142int sd_bus_error_is_set(const sd_bus_error *e);
143int sd_bus_error_has_name(const sd_bus_error *e, const char *name);
144
145#endif