struct sd_bus_vtable vtab_signal(const char *member, const char *sig, const char *const *names, uint64_t flags){ #if defined(SD_BUS_SIGNAL_WITH_NAMES) return (struct sd_bus_vtable)SD_BUS_SIGNAL_WITH_NAMES(member, sig, names, flags); #else (void)names; return (struct sd_bus_vtable)SD_BUS_SIGNAL(member, sig, flags); #endif }
fprintf(stderr, "Failed to emit signal: %s\n", strerror(-r)); return r; } strncat(response, path, 128); strcat(response, " says "); strncat(response, str, 128); /* Reply with the response */ return sd_bus_reply_method_return(m, "s", &response); } static const sd_bus_vtable echo_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_METHOD("Echo", "s", "s", method_echo, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_SIGNAL("MethodInvoked", "s", 0), SD_BUS_VTABLE_END }; int main(int argc, char *argv[]) { sd_bus_slot *slot = NULL; sd_bus *bus = NULL; int r; char **acquired = NULL, **activatable = NULL, **i; /* Connect to the user bus this time */ r = sd_bus_open_system(&bus); if (r < 0) { fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r)); goto finish; }
#include <systemd/sd-bus.h> const sd_bus_vtable example2[] = { SD_BUS_VTABLE_START(0), SD_BUS_METHOD((const char*)1, (const char*)2, (const char*)3, (sd_bus_message_handler_t)4, 0), SD_BUS_SIGNAL((const char*)5, (const char*)6, 0), SD_BUS_PROPERTY((const char*)7, (const char*)8, (sd_bus_property_get_t)9, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_WRITABLE_PROPERTY((const char*)10, (const char*)11, (sd_bus_property_get_t)12, (sd_bus_property_set_t)13, 0, 0), SD_BUS_PROPERTY((const char*)14, (const char*)15, NULL, 16, 0), SD_BUS_VTABLE_END, }; const size_t example2_size = sizeof(example2);
#include "log.h" static int prop_get(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error) { return -EINVAL; } static int prop_set(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error) { return -EINVAL; } static const sd_bus_vtable vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_METHOD("Hello", "ssas", "a(uu)", NULL, 0), SD_BUS_METHOD("DeprecatedHello", "", "", NULL, SD_BUS_VTABLE_DEPRECATED), SD_BUS_METHOD("DeprecatedHelloNoReply", "", "", NULL, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_METHOD_NO_REPLY), SD_BUS_SIGNAL("Wowza", "sss", 0), SD_BUS_SIGNAL("DeprecatedWowza", "ut", SD_BUS_VTABLE_DEPRECATED), SD_BUS_WRITABLE_PROPERTY("AProperty", "s", prop_get, prop_set, 0, 0), SD_BUS_PROPERTY("AReadOnlyDeprecatedProperty", "(ut)", prop_get, 0, SD_BUS_VTABLE_DEPRECATED), SD_BUS_PROPERTY("ChangingProperty", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_PROPERTY("Invalidating", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION), SD_BUS_PROPERTY("Constant", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_PROPERTY_EXPLICIT), SD_BUS_VTABLE_END }; int main(int argc, char *argv[]) { struct introspect intro; log_set_max_level(LOG_DEBUG); assert_se(introspect_begin(&intro, false) >= 0);
if (recv_seq == seq) { rsp.ccode = recv_cc; rsp.data_len = n; memcpy(rsp.data, data, rsp.data_len); reply_received = true; } out: sd_bus_reply_method_return(msg, "x", 0); return 0; } static const sd_bus_vtable dbus_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_SIGNAL("ReceivedMessage", "yyyyay", 0), SD_BUS_METHOD("sendMessage", "yyyyyay", "x", ipmi_dbus_method_send_message, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_END }; static int ipmi_dbus_setup(struct ipmi_intf *intf) { const char *name; int rc; rc = sd_bus_default(&bus); if (rc < 0) { lprintf(LOG_ERR, "Can't connect to session bus: %s\n", strerror(-rc));
return r; if (r == -ESTALE) return sd_bus_error_setf(error, BUS_ERROR_SCOPE_NOT_RUNNING, "Scope %s is not running, cannot abandon.", UNIT(s)->id); return sd_bus_reply_method_return(message, NULL); } static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, scope_result, ScopeResult); const sd_bus_vtable bus_scope_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("Controller", "s", NULL, offsetof(Scope, controller), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("TimeoutStopUSec", "t", bus_property_get_usec, offsetof(Scope, timeout_stop_usec), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Scope, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_SIGNAL("RequestStop", NULL, 0), SD_BUS_METHOD("Abandon", NULL, NULL, bus_scope_abandon, 0), SD_BUS_VTABLE_END }; static int bus_scope_set_transient_property( Scope *s, const char *name, sd_bus_message *message, UnitSetPropertiesMode mode, sd_bus_error *error) { int r; assert(s); assert(name);
return 0; } static int method_get_server_information(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) { printf("D-BUS GetServerInformation\n"); return sd_bus_reply_method_return(m, "ssss", "kirstu", "siiptuo", "0.1", "1.2"); } static const sd_bus_vtable vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_METHOD("GetCapabilities", "", "as", method_get_capabilities, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("Notify", "susssasa{sv}i", "u", method_notify, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("CloseNotification", "u", "", method_close_notification, SD_BUS_VTABLE_METHOD_NO_REPLY), SD_BUS_METHOD("GetServerInformation", "", "ssss", method_get_server_information, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_SIGNAL("NotificationClosed", "uu", 0), SD_BUS_SIGNAL("ActionInvoked", "us", 0), SD_BUS_VTABLE_END }; int kirstu_dbus_init(void) { int r = sd_bus_default_user(&bus); if (r < 0) { fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r)); exit(EXIT_FAILURE); } r = sd_bus_add_object_vtable(bus, &slot, "/org/freedesktop/Notifications",