xref: /openbmc/sdbusplus/include/sdbusplus/sdbus.hpp (revision bc1399744a317307a3f9061de32b27681721248b)
1 #pragma once
2 
3 #include <systemd/sd-bus.h>
4 #include <systemd/sd-daemon.h>
5 
6 #include <chrono>
7 
8 // ABC for sdbus implementation.
9 namespace sdbusplus
10 {
11 
12 // Defined by systemd taking uint64_t usec params
13 using SdBusDuration =
14     std::chrono::duration<uint64_t, std::chrono::microseconds::period>;
15 
16 // A wrapper for interfacing or testing sd-bus.  This will hold methods for
17 // buses, messages, etc.
18 class SdBusInterface
19 {
20   public:
21     virtual ~SdBusInterface() = default;
22 
23     virtual int sd_bus_add_object_manager(sd_bus* bus, sd_bus_slot** slot,
24                                           const char* path) = 0;
25 
26     virtual int sd_bus_add_object_vtable(
27         sd_bus* bus, sd_bus_slot** slot, const char* path,
28         const char* interface, const sd_bus_vtable* vtable, void* userdata) = 0;
29 
30     virtual int sd_bus_add_match(
31         sd_bus* bus, sd_bus_slot** slot, const char* path,
32         sd_bus_message_handler_t callback, void* userdata) = 0;
33 
34     virtual int sd_bus_attach_event(sd_bus* bus, sd_event* e, int priority) = 0;
35 
36     virtual int sd_bus_call(sd_bus* bus, sd_bus_message* m, uint64_t usec,
37                             sd_bus_error* ret_error,
38                             sd_bus_message** reply) = 0;
39 
40     virtual int sd_bus_call_async(
41         sd_bus* bus, sd_bus_slot** slot, sd_bus_message* m,
42         sd_bus_message_handler_t callback, void* userdata, uint64_t usec) = 0;
43 
44     virtual int sd_bus_detach_event(sd_bus* bus) = 0;
45 
46     virtual int sd_bus_emit_interfaces_added_strv(sd_bus* bus, const char* path,
47                                                   char** interfaces) = 0;
48     virtual int sd_bus_emit_interfaces_removed_strv(
49         sd_bus* bus, const char* path, char** interfaces) = 0;
50     virtual int sd_bus_emit_object_added(sd_bus* bus, const char* path) = 0;
51     virtual int sd_bus_emit_object_removed(sd_bus* bus, const char* path) = 0;
52     virtual int sd_bus_emit_properties_changed_strv(
53         sd_bus* bus, const char* path, const char* interface,
54         const char** names) = 0;
55 
56     virtual int sd_bus_error_set(sd_bus_error* e, const char* name,
57                                  const char* message) = 0;
58     virtual int sd_bus_error_set_const(sd_bus_error* e, const char* name,
59                                        const char* message) = 0;
60     virtual int sd_bus_error_get_errno(const sd_bus_error* e) = 0;
61     virtual int sd_bus_error_set_errno(sd_bus_error* e, int error) = 0;
62     virtual int sd_bus_error_is_set(const sd_bus_error* e) = 0;
63     virtual void sd_bus_error_free(sd_bus_error* e) = 0;
64 
65     virtual sd_event* sd_bus_get_event(sd_bus* bus) = 0;
66     virtual int sd_bus_get_fd(sd_bus* bus) = 0;
67     virtual int sd_bus_get_events(sd_bus* bus) = 0;
68     virtual int sd_bus_get_timeout(sd_bus* bus, uint64_t* timeout_usec) = 0;
69     virtual int sd_bus_get_unique_name(sd_bus* bus, const char** unique) = 0;
70 
71     virtual int sd_bus_list_names(sd_bus* bus, char*** acquired,
72                                   char*** activatable) = 0;
73 
74     // https://github.com/systemd/systemd/blob/master/src/systemd/sd-bus.h
75     virtual int sd_bus_message_append_basic(sd_bus_message* message, char type,
76                                             const void* value) = 0;
77 
78     virtual int sd_bus_message_append_string_iovec(
79         sd_bus_message* message, const struct iovec* iov, int iovcnt) = 0;
80 
81     virtual int sd_bus_message_at_end(sd_bus_message* m, int complete) = 0;
82 
83     virtual int sd_bus_message_close_container(sd_bus_message* m) = 0;
84 
85     virtual int sd_bus_message_enter_container(sd_bus_message* m, char type,
86                                                const char* contents) = 0;
87 
88     virtual int sd_bus_message_exit_container(sd_bus_message* m) = 0;
89 
90     virtual sd_bus* sd_bus_message_get_bus(sd_bus_message* m) = 0;
91     virtual int sd_bus_message_get_type(sd_bus_message* m, uint8_t* type) = 0;
92     virtual int sd_bus_message_get_cookie(sd_bus_message* m,
93                                           uint64_t* cookie) = 0;
94     virtual int sd_bus_message_get_reply_cookie(sd_bus_message* m,
95                                                 uint64_t* cookie) = 0;
96     virtual const char* sd_bus_message_get_destination(sd_bus_message* m) = 0;
97     virtual const char* sd_bus_message_get_interface(sd_bus_message* m) = 0;
98     virtual const char* sd_bus_message_get_member(sd_bus_message* m) = 0;
99     virtual const char* sd_bus_message_get_path(sd_bus_message* m) = 0;
100     virtual const char* sd_bus_message_get_sender(sd_bus_message* m) = 0;
101     virtual const char* sd_bus_message_get_signature(sd_bus_message* m,
102                                                      int complete) = 0;
103     virtual int sd_bus_message_get_errno(sd_bus_message* m) = 0;
104     virtual const sd_bus_error* sd_bus_message_get_error(sd_bus_message* m) = 0;
105 
106     virtual int sd_bus_message_is_method_call(
107         sd_bus_message* m, const char* interface, const char* member) = 0;
108     virtual int sd_bus_message_is_method_error(sd_bus_message* m,
109                                                const char* name) = 0;
110     virtual int sd_bus_message_is_signal(
111         sd_bus_message* m, const char* interface, const char* member) = 0;
112 
113     virtual int sd_bus_message_new_method_call(
114         sd_bus* bus, sd_bus_message** m, const char* destination,
115         const char* path, const char* interface, const char* member) = 0;
116 
117     virtual int sd_bus_message_new_method_return(sd_bus_message* call,
118                                                  sd_bus_message** m) = 0;
119 
120     virtual int sd_bus_message_new_method_error(
121         sd_bus_message* call, sd_bus_message** m, sd_bus_error* e) = 0;
122 
123     virtual int sd_bus_message_new_method_errno(sd_bus_message* call,
124                                                 sd_bus_message** m, int error,
125                                                 const sd_bus_error* p) = 0;
126 
127     virtual int sd_bus_message_new_signal(
128         sd_bus* bus, sd_bus_message** m, const char* path,
129         const char* interface, const char* member) = 0;
130 
131     virtual int sd_bus_message_open_container(sd_bus_message* m, char type,
132                                               const char* contents) = 0;
133 
134     virtual int sd_bus_message_read_basic(sd_bus_message* m, char type,
135                                           void* p) = 0;
136 
137     virtual sd_bus_message* sd_bus_message_ref(sd_bus_message* m) = 0;
138 
139     virtual int sd_bus_message_skip(sd_bus_message* m, const char* types) = 0;
140 
141     virtual int sd_bus_message_verify_type(sd_bus_message* m, char type,
142                                            const char* contents) = 0;
143 
144     virtual int sd_bus_slot_set_destroy_callback(sd_bus_slot* slot,
145                                                  sd_bus_destroy_t callback) = 0;
146 
147     virtual void* sd_bus_slot_set_userdata(sd_bus_slot* slot,
148                                            void* userdata) = 0;
149 
150     virtual int sd_bus_process(sd_bus* bus, sd_bus_message** r) = 0;
151 
152     virtual sd_bus* sd_bus_ref(sd_bus* bus) = 0;
153 
154     virtual int sd_bus_request_name(sd_bus* bus, const char* name,
155                                     uint64_t flags) = 0;
156 
157     virtual int sd_bus_send(sd_bus* bus, sd_bus_message* m,
158                             uint64_t* cookie) = 0;
159 
160     virtual sd_bus* sd_bus_unref(sd_bus* bus) = 0;
161     virtual sd_bus_slot* sd_bus_slot_unref(sd_bus_slot* slot) = 0;
162     virtual sd_bus* sd_bus_flush_close_unref(sd_bus* bus) = 0;
163 
164     virtual int sd_bus_flush(sd_bus* bus) = 0;
165     virtual void sd_bus_close(sd_bus* bus) = 0;
166     virtual int sd_bus_is_open(sd_bus* bus) = 0;
167 
168     virtual int sd_bus_wait(sd_bus* bus, uint64_t timeout_usec) = 0;
169 
170     virtual int sd_notify(int unset_environment, const char* state) = 0;
171 
172     virtual int sd_watchdog_enabled(int unset_environment, uint64_t* usec) = 0;
173 
174     virtual int sd_bus_message_append_array(sd_bus_message* m, char type,
175                                             const void* ptr, size_t size) = 0;
176     virtual int sd_bus_message_read_array(sd_bus_message* m, char type,
177                                           const void** ptr, size_t* size) = 0;
178 };
179 
180 class SdBusImpl : public SdBusInterface
181 {
182   public:
183     SdBusImpl() = default;
184     ~SdBusImpl() override = default;
185     SdBusImpl(const SdBusImpl&) = default;
186     SdBusImpl& operator=(const SdBusImpl&) = default;
187     SdBusImpl(SdBusImpl&&) = default;
188     SdBusImpl& operator=(SdBusImpl&&) = default;
189 
sd_bus_add_object_manager(sd_bus * bus,sd_bus_slot ** slot,const char * path)190     int sd_bus_add_object_manager(sd_bus* bus, sd_bus_slot** slot,
191                                   const char* path) override
192     {
193         return ::sd_bus_add_object_manager(bus, slot, path);
194     }
195 
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)196     int sd_bus_add_object_vtable(sd_bus* bus, sd_bus_slot** slot,
197                                  const char* path, const char* interface,
198                                  const sd_bus_vtable* vtable,
199                                  void* userdata) override
200     {
201         return ::sd_bus_add_object_vtable(bus, slot, path, interface, vtable,
202                                           userdata);
203     }
204 
sd_bus_add_match(sd_bus * bus,sd_bus_slot ** slot,const char * path,sd_bus_message_handler_t callback,void * userdata)205     int sd_bus_add_match(sd_bus* bus, sd_bus_slot** slot, const char* path,
206                          sd_bus_message_handler_t callback,
207                          void* userdata) override
208     {
209         return ::sd_bus_add_match(bus, slot, path, callback, userdata);
210     }
211 
sd_bus_attach_event(sd_bus * bus,sd_event * e,int priority)212     int sd_bus_attach_event(sd_bus* bus, sd_event* e, int priority) override
213     {
214         return ::sd_bus_attach_event(bus, e, priority);
215     }
216 
sd_bus_call(sd_bus * bus,sd_bus_message * m,uint64_t usec,sd_bus_error * ret_error,sd_bus_message ** reply)217     int sd_bus_call(sd_bus* bus, sd_bus_message* m, uint64_t usec,
218                     sd_bus_error* ret_error, sd_bus_message** reply) override
219     {
220         return ::sd_bus_call(bus, m, usec, ret_error, reply);
221     }
222 
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)223     int sd_bus_call_async(sd_bus* bus, sd_bus_slot** slot, sd_bus_message* m,
224                           sd_bus_message_handler_t callback, void* userdata,
225                           uint64_t usec) override
226     {
227         return ::sd_bus_call_async(bus, slot, m, callback, userdata, usec);
228     }
229 
sd_bus_detach_event(sd_bus * bus)230     int sd_bus_detach_event(sd_bus* bus) override
231     {
232         return ::sd_bus_detach_event(bus);
233     }
234 
sd_bus_emit_interfaces_added_strv(sd_bus * bus,const char * path,char ** interfaces)235     int sd_bus_emit_interfaces_added_strv(sd_bus* bus, const char* path,
236                                           char** interfaces) override
237     {
238         return ::sd_bus_emit_interfaces_added_strv(bus, path, interfaces);
239     }
240 
sd_bus_emit_interfaces_removed_strv(sd_bus * bus,const char * path,char ** interfaces)241     int sd_bus_emit_interfaces_removed_strv(sd_bus* bus, const char* path,
242                                             char** interfaces) override
243     {
244         return ::sd_bus_emit_interfaces_removed_strv(bus, path, interfaces);
245     }
246 
sd_bus_emit_object_added(sd_bus * bus,const char * path)247     int sd_bus_emit_object_added(sd_bus* bus, const char* path) override
248     {
249         return ::sd_bus_emit_object_added(bus, path);
250     }
251 
sd_bus_emit_object_removed(sd_bus * bus,const char * path)252     int sd_bus_emit_object_removed(sd_bus* bus, const char* path) override
253     {
254         return ::sd_bus_emit_object_removed(bus, path);
255     }
256 
sd_bus_emit_properties_changed_strv(sd_bus * bus,const char * path,const char * interface,const char ** names)257     int sd_bus_emit_properties_changed_strv(sd_bus* bus, const char* path,
258                                             const char* interface,
259                                             const char** names) override
260     {
261         return ::sd_bus_emit_properties_changed_strv(bus, path, interface,
262                                                      const_cast<char**>(names));
263         // The const_cast above may seem unsafe, but it safe.  sd_bus's manpage
264         // shows a 'const char*' but the header does not.  I examined the code
265         // and no modification of the strings is done.  I tried to change sdbus
266         // directly but due to quirks of C you cannot implicitly convert a
267         // 'char **' to a 'const char**', so changing the implementation causes
268         // lots of compile failures due to an incompatible API change.
269         //
270         // Performing a const_cast allows us to avoid a memory allocation of
271         // the contained strings in 'interface::property_changed'.
272     }
273 
sd_bus_error_set(sd_bus_error * e,const char * name,const char * message)274     int sd_bus_error_set(sd_bus_error* e, const char* name,
275                          const char* message) override
276     {
277         return ::sd_bus_error_set(e, name, message);
278     }
279 
sd_bus_error_set_const(sd_bus_error * e,const char * name,const char * message)280     int sd_bus_error_set_const(sd_bus_error* e, const char* name,
281                                const char* message) override
282     {
283         return ::sd_bus_error_set_const(e, name, message);
284     }
285 
sd_bus_error_get_errno(const sd_bus_error * e)286     int sd_bus_error_get_errno(const sd_bus_error* e) override
287     {
288         return ::sd_bus_error_get_errno(e);
289     }
290 
sd_bus_error_set_errno(sd_bus_error * e,int error)291     int sd_bus_error_set_errno(sd_bus_error* e, int error) override
292     {
293         return ::sd_bus_error_set_errno(e, error);
294     }
295 
sd_bus_error_is_set(const sd_bus_error * e)296     int sd_bus_error_is_set(const sd_bus_error* e) override
297     {
298         return ::sd_bus_error_is_set(e);
299     }
300 
sd_bus_error_free(sd_bus_error * e)301     void sd_bus_error_free(sd_bus_error* e) override
302     {
303         return ::sd_bus_error_free(e);
304     }
305 
sd_bus_get_event(sd_bus * bus)306     sd_event* sd_bus_get_event(sd_bus* bus) override
307     {
308         return ::sd_bus_get_event(bus);
309     }
310 
sd_bus_get_fd(sd_bus * bus)311     int sd_bus_get_fd(sd_bus* bus) override
312     {
313         return ::sd_bus_get_fd(bus);
314     }
315 
sd_bus_get_events(sd_bus * bus)316     int sd_bus_get_events(sd_bus* bus) override
317     {
318         return ::sd_bus_get_events(bus);
319     }
320 
sd_bus_get_timeout(sd_bus * bus,uint64_t * timeout_usec)321     int sd_bus_get_timeout(sd_bus* bus, uint64_t* timeout_usec) override
322     {
323         return ::sd_bus_get_timeout(bus, timeout_usec);
324     }
325 
sd_bus_get_unique_name(sd_bus * bus,const char ** unique)326     int sd_bus_get_unique_name(sd_bus* bus, const char** unique) override
327     {
328         return ::sd_bus_get_unique_name(bus, unique);
329     }
330 
sd_bus_list_names(sd_bus * bus,char *** acquired,char *** activatable)331     int sd_bus_list_names(sd_bus* bus, char*** acquired,
332                           char*** activatable) override
333     {
334         return ::sd_bus_list_names(bus, acquired, activatable);
335     }
336 
sd_bus_message_append_basic(sd_bus_message * message,char type,const void * value)337     int sd_bus_message_append_basic(sd_bus_message* message, char type,
338                                     const void* value) override
339     {
340         return ::sd_bus_message_append_basic(message, type, value);
341     }
342 
sd_bus_message_append_string_iovec(sd_bus_message * message,const struct iovec * iov,int iovcnt)343     int sd_bus_message_append_string_iovec(
344         sd_bus_message* message, const struct iovec* iov, int iovcnt) override
345     {
346         return ::sd_bus_message_append_string_iovec(message, iov, iovcnt);
347     }
348 
sd_bus_message_at_end(sd_bus_message * m,int complete)349     int sd_bus_message_at_end(sd_bus_message* m, int complete) override
350     {
351         return ::sd_bus_message_at_end(m, complete);
352     }
353 
sd_bus_message_close_container(sd_bus_message * m)354     int sd_bus_message_close_container(sd_bus_message* m) override
355     {
356         return ::sd_bus_message_close_container(m);
357     }
358 
sd_bus_message_enter_container(sd_bus_message * m,char type,const char * contents)359     int sd_bus_message_enter_container(sd_bus_message* m, char type,
360                                        const char* contents) override
361     {
362         return ::sd_bus_message_enter_container(m, type, contents);
363     }
364 
sd_bus_message_exit_container(sd_bus_message * m)365     int sd_bus_message_exit_container(sd_bus_message* m) override
366     {
367         return ::sd_bus_message_exit_container(m);
368     }
369 
sd_bus_message_get_bus(sd_bus_message * m)370     sd_bus* sd_bus_message_get_bus(sd_bus_message* m) override
371     {
372         return ::sd_bus_message_get_bus(m);
373     }
374 
sd_bus_message_get_type(sd_bus_message * m,uint8_t * type)375     int sd_bus_message_get_type(sd_bus_message* m, uint8_t* type) override
376     {
377         return ::sd_bus_message_get_type(m, type);
378     }
379 
sd_bus_message_get_cookie(sd_bus_message * m,uint64_t * cookie)380     int sd_bus_message_get_cookie(sd_bus_message* m, uint64_t* cookie) override
381     {
382         return ::sd_bus_message_get_cookie(m, cookie);
383     }
384 
sd_bus_message_get_reply_cookie(sd_bus_message * m,uint64_t * cookie)385     int sd_bus_message_get_reply_cookie(sd_bus_message* m,
386                                         uint64_t* cookie) override
387     {
388         return ::sd_bus_message_get_reply_cookie(m, cookie);
389     }
390 
sd_bus_message_get_destination(sd_bus_message * m)391     const char* sd_bus_message_get_destination(sd_bus_message* m) override
392     {
393         return ::sd_bus_message_get_destination(m);
394     }
395 
sd_bus_message_get_interface(sd_bus_message * m)396     const char* sd_bus_message_get_interface(sd_bus_message* m) override
397     {
398         return ::sd_bus_message_get_interface(m);
399     }
400 
sd_bus_message_get_member(sd_bus_message * m)401     const char* sd_bus_message_get_member(sd_bus_message* m) override
402     {
403         return ::sd_bus_message_get_member(m);
404     }
405 
sd_bus_message_get_path(sd_bus_message * m)406     const char* sd_bus_message_get_path(sd_bus_message* m) override
407     {
408         return ::sd_bus_message_get_path(m);
409     }
410 
sd_bus_message_get_sender(sd_bus_message * m)411     const char* sd_bus_message_get_sender(sd_bus_message* m) override
412     {
413         return ::sd_bus_message_get_sender(m);
414     }
415 
sd_bus_message_get_signature(sd_bus_message * m,int complete)416     const char* sd_bus_message_get_signature(sd_bus_message* m,
417                                              int complete) override
418     {
419         return ::sd_bus_message_get_signature(m, complete);
420     }
421 
sd_bus_message_get_errno(sd_bus_message * m)422     int sd_bus_message_get_errno(sd_bus_message* m) override
423     {
424         return ::sd_bus_message_get_errno(m);
425     }
426 
sd_bus_message_get_error(sd_bus_message * m)427     const sd_bus_error* sd_bus_message_get_error(sd_bus_message* m) override
428     {
429         return ::sd_bus_message_get_error(m);
430     }
431 
sd_bus_message_is_method_call(sd_bus_message * m,const char * interface,const char * member)432     int sd_bus_message_is_method_call(sd_bus_message* m, const char* interface,
433                                       const char* member) override
434     {
435         return ::sd_bus_message_is_method_call(m, interface, member);
436     }
437 
sd_bus_message_is_method_error(sd_bus_message * m,const char * name)438     int sd_bus_message_is_method_error(sd_bus_message* m,
439                                        const char* name) override
440     {
441         return ::sd_bus_message_is_method_error(m, name);
442     }
443 
sd_bus_message_is_signal(sd_bus_message * m,const char * interface,const char * member)444     int sd_bus_message_is_signal(sd_bus_message* m, const char* interface,
445                                  const char* member) override
446     {
447         return ::sd_bus_message_is_signal(m, interface, member);
448     }
449 
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)450     int sd_bus_message_new_method_call(
451         sd_bus* bus, sd_bus_message** m, const char* destination,
452         const char* path, const char* interface, const char* member) override
453     {
454         return ::sd_bus_message_new_method_call(bus, m, destination, path,
455                                                 interface, member);
456     }
457 
sd_bus_message_new_method_return(sd_bus_message * call,sd_bus_message ** m)458     int sd_bus_message_new_method_return(sd_bus_message* call,
459                                          sd_bus_message** m) override
460     {
461         return ::sd_bus_message_new_method_return(call, m);
462     }
463 
sd_bus_message_new_method_error(sd_bus_message * call,sd_bus_message ** m,sd_bus_error * e)464     int sd_bus_message_new_method_error(
465         sd_bus_message* call, sd_bus_message** m, sd_bus_error* e) override
466     {
467         return ::sd_bus_message_new_method_error(call, m, e);
468     }
469 
sd_bus_message_new_method_errno(sd_bus_message * call,sd_bus_message ** m,int error,const sd_bus_error * p)470     int sd_bus_message_new_method_errno(sd_bus_message* call,
471                                         sd_bus_message** m, int error,
472                                         const sd_bus_error* p) override
473     {
474         return ::sd_bus_message_new_method_errno(call, m, error, p);
475     }
476 
sd_bus_message_new_signal(sd_bus * bus,sd_bus_message ** m,const char * path,const char * interface,const char * member)477     int sd_bus_message_new_signal(sd_bus* bus, sd_bus_message** m,
478                                   const char* path, const char* interface,
479                                   const char* member) override
480     {
481         return ::sd_bus_message_new_signal(bus, m, path, interface, member);
482     }
483 
sd_bus_message_open_container(sd_bus_message * m,char type,const char * contents)484     int sd_bus_message_open_container(sd_bus_message* m, char type,
485                                       const char* contents) override
486     {
487         return ::sd_bus_message_open_container(m, type, contents);
488     }
489 
sd_bus_message_read_basic(sd_bus_message * m,char type,void * p)490     int sd_bus_message_read_basic(sd_bus_message* m, char type,
491                                   void* p) override
492     {
493         return ::sd_bus_message_read_basic(m, type, p);
494     }
495 
sd_bus_message_ref(sd_bus_message * m)496     sd_bus_message* sd_bus_message_ref(sd_bus_message* m) override
497     {
498         return ::sd_bus_message_ref(m);
499     }
500 
sd_bus_message_skip(sd_bus_message * m,const char * types)501     int sd_bus_message_skip(sd_bus_message* m, const char* types) override
502     {
503         return ::sd_bus_message_skip(m, types);
504     }
505 
sd_bus_message_verify_type(sd_bus_message * m,char type,const char * contents)506     int sd_bus_message_verify_type(sd_bus_message* m, char type,
507                                    const char* contents) override
508     {
509         return ::sd_bus_message_verify_type(m, type, contents);
510     }
511 
sd_bus_slot_set_destroy_callback(sd_bus_slot * slot,sd_bus_destroy_t callback)512     int sd_bus_slot_set_destroy_callback(sd_bus_slot* slot,
513                                          sd_bus_destroy_t callback) override
514     {
515         return ::sd_bus_slot_set_destroy_callback(slot, callback);
516     }
517 
sd_bus_slot_set_userdata(sd_bus_slot * slot,void * userdata)518     void* sd_bus_slot_set_userdata(sd_bus_slot* slot, void* userdata) override
519     {
520         return ::sd_bus_slot_set_userdata(slot, userdata);
521     }
522 
sd_bus_process(sd_bus * bus,sd_bus_message ** r)523     int sd_bus_process(sd_bus* bus, sd_bus_message** r) override
524     {
525         return ::sd_bus_process(bus, r);
526     }
527 
sd_bus_ref(sd_bus * bus)528     sd_bus* sd_bus_ref(sd_bus* bus) override
529     {
530         return ::sd_bus_ref(bus);
531     }
532 
sd_bus_request_name(sd_bus * bus,const char * name,uint64_t flags)533     int sd_bus_request_name(sd_bus* bus, const char* name,
534                             uint64_t flags) override
535     {
536         return ::sd_bus_request_name(bus, name, flags);
537     }
538 
sd_bus_send(sd_bus * bus,sd_bus_message * m,uint64_t * cookie)539     int sd_bus_send(sd_bus* bus, sd_bus_message* m, uint64_t* cookie) override
540     {
541         return ::sd_bus_send(bus, m, cookie);
542     }
543 
sd_bus_unref(sd_bus * bus)544     sd_bus* sd_bus_unref(sd_bus* bus) override
545     {
546         return ::sd_bus_unref(bus);
547     }
548 
sd_bus_slot_unref(sd_bus_slot * slot)549     sd_bus_slot* sd_bus_slot_unref(sd_bus_slot* slot) override
550     {
551         return ::sd_bus_slot_unref(slot);
552     }
553 
sd_bus_flush_close_unref(sd_bus * bus)554     sd_bus* sd_bus_flush_close_unref(sd_bus* bus) override
555     {
556         return ::sd_bus_flush_close_unref(bus);
557     }
558 
sd_bus_flush(sd_bus * bus)559     int sd_bus_flush(sd_bus* bus) override
560     {
561         return ::sd_bus_flush(bus);
562     }
563 
sd_bus_close(sd_bus * bus)564     void sd_bus_close(sd_bus* bus) override
565     {
566         ::sd_bus_close(bus);
567     }
568 
sd_bus_is_open(sd_bus * bus)569     int sd_bus_is_open(sd_bus* bus) override
570     {
571         return ::sd_bus_is_open(bus);
572     }
573 
sd_bus_wait(sd_bus * bus,uint64_t timeout_usec)574     int sd_bus_wait(sd_bus* bus, uint64_t timeout_usec) override
575     {
576         return ::sd_bus_wait(bus, timeout_usec);
577     }
578 
sd_notify(int unset_environment,const char * state)579     int sd_notify(int unset_environment, const char* state) override
580     {
581         return ::sd_notify(unset_environment, state);
582     }
583 
sd_watchdog_enabled(int unset_environment,uint64_t * usec)584     int sd_watchdog_enabled(int unset_environment, uint64_t* usec) override
585     {
586         return ::sd_watchdog_enabled(unset_environment, usec);
587     }
588 
sd_bus_message_append_array(sd_bus_message * m,char type,const void * ptr,size_t size)589     int sd_bus_message_append_array(sd_bus_message* m, char type,
590                                     const void* ptr, size_t size) override
591     {
592         return ::sd_bus_message_append_array(m, type, ptr, size);
593     }
594 
sd_bus_message_read_array(sd_bus_message * m,char type,const void ** ptr,size_t * size)595     int sd_bus_message_read_array(sd_bus_message* m, char type,
596                                   const void** ptr, size_t* size) override
597     {
598         return ::sd_bus_message_read_array(m, type, ptr, size);
599     }
600 };
601 
602 extern SdBusImpl sdbus_impl;
603 
604 } // namespace sdbusplus
605