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