blob: ead2888164383468e8c2b9ca35cfc908d72f6b55 [file] [log] [blame]
Patrick Venturedba73d72018-04-12 14:14:42 -07001#pragma once
2
3#include <systemd/sd-bus.h>
4
5// ABC for sdbus implementation.
6namespace sdbusplus
7{
8
9// A wrapper for interfacing or testing sd-bus. This will hold methods for
10// buses, messages, etc.
11class SdBusInterface
12{
13 public:
14 virtual ~SdBusInterface() = default;
15
Patrick Venture248c9902018-04-10 17:53:43 -070016 virtual int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot,
17 const char *path) = 0;
18
Patrick Venture540946e2018-04-16 13:17:51 -070019 virtual int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot,
20 const char *path,
21 const char *interface,
22 const sd_bus_vtable *vtable,
23 void *userdata) = 0;
24
Patrick Ventureff095682018-04-13 20:54:32 -070025 virtual int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority) = 0;
Patrick Venturedba73d72018-04-12 14:14:42 -070026
Patrick Ventureff095682018-04-13 20:54:32 -070027 virtual int sd_bus_call(sd_bus *bus, sd_bus_message *m, uint64_t usec,
28 sd_bus_error *ret_error,
29 sd_bus_message **reply) = 0;
30
31 virtual int sd_bus_detach_event(sd_bus *bus) = 0;
32
33 virtual int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path,
34 char **interfaces) = 0;
35 virtual int sd_bus_emit_interfaces_removed_strv(sd_bus *bus,
36 const char *path,
37 char **interfaces) = 0;
38 virtual int sd_bus_emit_object_added(sd_bus *bus, const char *path) = 0;
39 virtual int sd_bus_emit_object_removed(sd_bus *bus, const char *path) = 0;
Patrick Venture540946e2018-04-16 13:17:51 -070040 virtual int sd_bus_emit_properties_changed_strv(sd_bus *bus,
41 const char *path,
42 const char *interface,
43 char **names) = 0;
Patrick Ventureff095682018-04-13 20:54:32 -070044
Patrick Venture263712f2018-04-16 14:19:08 -070045 virtual int sd_bus_error_set_const(sd_bus_error *e, const char *name,
46 const char *message) = 0;
47
Patrick Ventureff095682018-04-13 20:54:32 -070048 virtual sd_event *sd_bus_get_event(sd_bus *bus) = 0;
William A. Kennington IIIcb582e02018-06-28 18:01:01 -070049 virtual int sd_bus_get_fd(sd_bus *bus) = 0;
Patrick Ventureff095682018-04-13 20:54:32 -070050 virtual int sd_bus_get_unique_name(sd_bus *bus, const char **unique) = 0;
51
52 virtual int sd_bus_list_names(sd_bus *bus, char ***acquired,
53 char ***activatable) = 0;
54
55 // https://github.com/systemd/systemd/blob/master/src/systemd/sd-bus.h
Patrick Venturedba73d72018-04-12 14:14:42 -070056 virtual int sd_bus_message_append_basic(sd_bus_message *message, char type,
57 const void *value) = 0;
58
59 virtual int sd_bus_message_at_end(sd_bus_message *m, int complete) = 0;
60
61 virtual int sd_bus_message_close_container(sd_bus_message *m) = 0;
62
63 virtual int sd_bus_message_enter_container(sd_bus_message *m, char type,
64 const char *contents) = 0;
65
66 virtual int sd_bus_message_exit_container(sd_bus_message *m) = 0;
67
68 virtual sd_bus *sd_bus_message_get_bus(sd_bus_message *m) = 0;
69 virtual int sd_bus_message_get_cookie(sd_bus_message *m,
70 uint64_t *cookie) = 0;
71 virtual const char *sd_bus_message_get_destination(sd_bus_message *m) = 0;
72 virtual const char *sd_bus_message_get_interface(sd_bus_message *m) = 0;
73 virtual const char *sd_bus_message_get_member(sd_bus_message *m) = 0;
74 virtual const char *sd_bus_message_get_path(sd_bus_message *m) = 0;
75 virtual const char *sd_bus_message_get_sender(sd_bus_message *m) = 0;
76 virtual const char *sd_bus_message_get_signature(sd_bus_message *m,
77 int complete) = 0;
William A. Kennington IIIcb582e02018-06-28 18:01:01 -070078 virtual int sd_bus_message_get_errno(sd_bus_message *m) = 0;
Patrick Venturedba73d72018-04-12 14:14:42 -070079
80 virtual int sd_bus_message_is_method_call(sd_bus_message *m,
81 const char *interface,
82 const char *member) = 0;
83 virtual int sd_bus_message_is_method_error(sd_bus_message *m,
84 const char *name) = 0;
85 virtual int sd_bus_message_is_signal(sd_bus_message *m,
86 const char *interface,
87 const char *member) = 0;
88
Patrick Ventureff095682018-04-13 20:54:32 -070089 virtual int sd_bus_message_new_method_call(sd_bus *bus, sd_bus_message **m,
90 const char *destination,
91 const char *path,
92 const char *interface,
93 const char *member) = 0;
94
Patrick Venturedba73d72018-04-12 14:14:42 -070095 virtual int sd_bus_message_new_method_return(sd_bus_message *call,
96 sd_bus_message **m) = 0;
97
Patrick Ventureff095682018-04-13 20:54:32 -070098 virtual int sd_bus_message_new_signal(sd_bus *bus, sd_bus_message **m,
99 const char *path,
100 const char *interface,
101 const char *member) = 0;
102
103 virtual int sd_bus_message_open_container(sd_bus_message *m, char type,
104 const char *contents) = 0;
105
Patrick Venturedba73d72018-04-12 14:14:42 -0700106 virtual int sd_bus_message_read_basic(sd_bus_message *m, char type,
107 void *p) = 0;
108
Patrick Ventureff095682018-04-13 20:54:32 -0700109 virtual sd_bus_message *sd_bus_message_ref(sd_bus_message *m) = 0;
110
Patrick Venturedba73d72018-04-12 14:14:42 -0700111 virtual int sd_bus_message_skip(sd_bus_message *m, const char *types) = 0;
112
113 virtual int sd_bus_message_verify_type(sd_bus_message *m, char type,
114 const char *contents) = 0;
115
Patrick Ventureff095682018-04-13 20:54:32 -0700116 virtual int sd_bus_process(sd_bus *bus, sd_bus_message **r) = 0;
117
118 virtual sd_bus *sd_bus_ref(sd_bus *bus) = 0;
119
120 virtual int sd_bus_request_name(sd_bus *bus, const char *name,
121 uint64_t flags) = 0;
122
Patrick Venturedba73d72018-04-12 14:14:42 -0700123 virtual int sd_bus_send(sd_bus *bus, sd_bus_message *m,
124 uint64_t *cookie) = 0;
125
Patrick Ventureff095682018-04-13 20:54:32 -0700126 virtual sd_bus *sd_bus_unref(sd_bus *bus) = 0;
127
128 virtual int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec) = 0;
Patrick Venturedba73d72018-04-12 14:14:42 -0700129};
130
131class SdBusImpl : public SdBusInterface
132{
133 public:
134 SdBusImpl() = default;
135 ~SdBusImpl() = default;
136 SdBusImpl(const SdBusImpl &) = default;
137 SdBusImpl &operator=(const SdBusImpl &) = default;
138 SdBusImpl(SdBusImpl &&) = default;
139 SdBusImpl &operator=(SdBusImpl &&) = default;
140
Patrick Venture248c9902018-04-10 17:53:43 -0700141 int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot,
142 const char *path) override
143 {
144 return ::sd_bus_add_object_manager(bus, slot, path);
145 }
146
Patrick Venture540946e2018-04-16 13:17:51 -0700147 int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot,
148 const char *path, const char *interface,
149 const sd_bus_vtable *vtable,
150 void *userdata) override
151 {
152 return ::sd_bus_add_object_vtable(bus, slot, path, interface, vtable,
153 userdata);
154 }
155
Patrick Ventureff095682018-04-13 20:54:32 -0700156 int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority) override
Patrick Venturedba73d72018-04-12 14:14:42 -0700157 {
Patrick Ventureff095682018-04-13 20:54:32 -0700158 return ::sd_bus_attach_event(bus, e, priority);
159 }
160
161 int sd_bus_call(sd_bus *bus, sd_bus_message *m, uint64_t usec,
162 sd_bus_error *ret_error, sd_bus_message **reply) override
163 {
164 return ::sd_bus_call(bus, m, usec, ret_error, reply);
165 }
166
167 int sd_bus_detach_event(sd_bus *bus) override
168 {
169 return ::sd_bus_detach_event(bus);
170 }
171
172 int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path,
173 char **interfaces) override
174 {
175 return ::sd_bus_emit_interfaces_added_strv(bus, path, interfaces);
176 }
177
178 int sd_bus_emit_interfaces_removed_strv(sd_bus *bus, const char *path,
179 char **interfaces) override
180 {
181 return ::sd_bus_emit_interfaces_removed_strv(bus, path, interfaces);
182 }
183
184 int sd_bus_emit_object_added(sd_bus *bus, const char *path) override
185 {
186 return ::sd_bus_emit_object_added(bus, path);
187 }
188
189 int sd_bus_emit_object_removed(sd_bus *bus, const char *path) override
190 {
191 return ::sd_bus_emit_object_removed(bus, path);
192 }
193
Patrick Venture540946e2018-04-16 13:17:51 -0700194 int sd_bus_emit_properties_changed_strv(sd_bus *bus, const char *path,
195 const char *interface,
196 char **names) override
197 {
198 return ::sd_bus_emit_properties_changed_strv(bus, path, interface,
199 names);
200 }
201
Patrick Venture263712f2018-04-16 14:19:08 -0700202 int sd_bus_error_set_const(sd_bus_error *e, const char *name,
203 const char *message) override
204 {
205 return ::sd_bus_error_set_const(e, name, message);
206 }
207
Patrick Ventureff095682018-04-13 20:54:32 -0700208 sd_event *sd_bus_get_event(sd_bus *bus) override
209 {
210 return ::sd_bus_get_event(bus);
211 }
212
William A. Kennington IIIcb582e02018-06-28 18:01:01 -0700213 int sd_bus_get_fd(sd_bus *bus) override
214 {
215 return ::sd_bus_get_fd(bus);
216 }
217
Patrick Ventureff095682018-04-13 20:54:32 -0700218 int sd_bus_get_unique_name(sd_bus *bus, const char **unique) override
219 {
220 return ::sd_bus_get_unique_name(bus, unique);
221 }
222
223 int sd_bus_list_names(sd_bus *bus, char ***acquired,
224 char ***activatable) override
225 {
226 return ::sd_bus_list_names(bus, acquired, activatable);
Patrick Venturedba73d72018-04-12 14:14:42 -0700227 }
228
229 int sd_bus_message_append_basic(sd_bus_message *message, char type,
230 const void *value) override
231 {
232 return ::sd_bus_message_append_basic(message, type, value);
233 }
234
235 int sd_bus_message_at_end(sd_bus_message *m, int complete) override
236 {
237 return ::sd_bus_message_at_end(m, complete);
238 }
239
240 int sd_bus_message_close_container(sd_bus_message *m) override
241 {
242 return ::sd_bus_message_close_container(m);
243 }
244
245 int sd_bus_message_enter_container(sd_bus_message *m, char type,
246 const char *contents) override
247 {
248 return ::sd_bus_message_enter_container(m, type, contents);
249 }
250
251 int sd_bus_message_exit_container(sd_bus_message *m) override
252 {
253 return ::sd_bus_message_exit_container(m);
254 }
255
256 sd_bus *sd_bus_message_get_bus(sd_bus_message *m) override
257 {
258 return ::sd_bus_message_get_bus(m);
259 }
260
261 int sd_bus_message_get_cookie(sd_bus_message *m, uint64_t *cookie) override
262 {
263 return ::sd_bus_message_get_cookie(m, cookie);
264 }
265
266 const char *sd_bus_message_get_destination(sd_bus_message *m) override
267 {
268 return ::sd_bus_message_get_destination(m);
269 }
270
271 const char *sd_bus_message_get_interface(sd_bus_message *m) override
272 {
273 return ::sd_bus_message_get_interface(m);
274 }
275
276 const char *sd_bus_message_get_member(sd_bus_message *m) override
277 {
278 return ::sd_bus_message_get_member(m);
279 }
280
281 const char *sd_bus_message_get_path(sd_bus_message *m) override
282 {
283 return ::sd_bus_message_get_path(m);
284 }
285
286 const char *sd_bus_message_get_sender(sd_bus_message *m) override
287 {
288 return ::sd_bus_message_get_sender(m);
289 }
290
291 const char *sd_bus_message_get_signature(sd_bus_message *m,
292 int complete) override
293 {
294 return ::sd_bus_message_get_signature(m, complete);
295 }
296
William A. Kennington IIIcb582e02018-06-28 18:01:01 -0700297 int sd_bus_message_get_errno(sd_bus_message *m) override
298 {
299 return ::sd_bus_message_get_errno(m);
300 }
301
Patrick Venturedba73d72018-04-12 14:14:42 -0700302 int sd_bus_message_is_method_call(sd_bus_message *m, const char *interface,
303 const char *member) override
304 {
305 return ::sd_bus_message_is_method_call(m, interface, member);
306 }
307
308 int sd_bus_message_is_method_error(sd_bus_message *m,
309 const char *name) override
310 {
311 return ::sd_bus_message_is_method_error(m, name);
312 }
313
314 int sd_bus_message_is_signal(sd_bus_message *m, const char *interface,
315 const char *member) override
316 {
317 return ::sd_bus_message_is_signal(m, interface, member);
318 }
319
Patrick Ventureff095682018-04-13 20:54:32 -0700320 int sd_bus_message_new_method_call(sd_bus *bus, sd_bus_message **m,
321 const char *destination,
322 const char *path, const char *interface,
323 const char *member) override
324 {
325 return ::sd_bus_message_new_method_call(bus, m, destination, path,
326 interface, member);
327 }
328
Patrick Venturedba73d72018-04-12 14:14:42 -0700329 int sd_bus_message_new_method_return(sd_bus_message *call,
330 sd_bus_message **m) override
331 {
332 return ::sd_bus_message_new_method_return(call, m);
333 }
334
Patrick Ventureff095682018-04-13 20:54:32 -0700335 int sd_bus_message_new_signal(sd_bus *bus, sd_bus_message **m,
336 const char *path, const char *interface,
337 const char *member) override
338 {
339 return ::sd_bus_message_new_signal(bus, m, path, interface, member);
340 }
341
342 int sd_bus_message_open_container(sd_bus_message *m, char type,
343 const char *contents) override
344 {
345 return ::sd_bus_message_open_container(m, type, contents);
346 }
347
Patrick Venturedba73d72018-04-12 14:14:42 -0700348 int sd_bus_message_read_basic(sd_bus_message *m, char type,
349 void *p) override
350 {
351 return ::sd_bus_message_read_basic(m, type, p);
352 }
353
Patrick Ventureff095682018-04-13 20:54:32 -0700354 sd_bus_message *sd_bus_message_ref(sd_bus_message *m) override
355 {
356 return ::sd_bus_message_ref(m);
357 }
358
Patrick Venturedba73d72018-04-12 14:14:42 -0700359 int sd_bus_message_skip(sd_bus_message *m, const char *types) override
360 {
361 return ::sd_bus_message_skip(m, types);
362 }
363
364 int sd_bus_message_verify_type(sd_bus_message *m, char type,
365 const char *contents) override
366 {
367 return ::sd_bus_message_verify_type(m, type, contents);
368 }
369
Patrick Ventureff095682018-04-13 20:54:32 -0700370 int sd_bus_process(sd_bus *bus, sd_bus_message **r) override
371 {
372 return ::sd_bus_process(bus, r);
373 }
374
375 sd_bus *sd_bus_ref(sd_bus *bus) override
376 {
377 return ::sd_bus_ref(bus);
378 }
379
380 int sd_bus_request_name(sd_bus *bus, const char *name,
381 uint64_t flags) override
382 {
383 return ::sd_bus_request_name(bus, name, flags);
384 }
385
Patrick Venturedba73d72018-04-12 14:14:42 -0700386 int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *cookie) override
387 {
388 return ::sd_bus_send(bus, m, cookie);
389 }
390
Patrick Ventureff095682018-04-13 20:54:32 -0700391 sd_bus *sd_bus_unref(sd_bus *bus) override
Patrick Venturedba73d72018-04-12 14:14:42 -0700392 {
Patrick Ventureff095682018-04-13 20:54:32 -0700393 return ::sd_bus_unref(bus);
394 }
395
396 int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec) override
397 {
398 return ::sd_bus_wait(bus, timeout_usec);
Patrick Venturedba73d72018-04-12 14:14:42 -0700399 }
400};
401
William A. Kennington III9ff25f72018-06-28 17:59:15 -0700402extern SdBusImpl sdbus_impl;
403
Patrick Venturedba73d72018-04-12 14:14:42 -0700404} // namespace sdbusplus