_public_ int sd_bus_match_signal_async( sd_bus *bus, sd_bus_slot **ret, const char *sender, const char *path, const char *interface, const char *member, sd_bus_message_handler_t callback, sd_bus_message_handler_t install_callback, void *userdata) { const char *expression; assert_return(bus, -EINVAL); assert_return(bus = bus_resolve(bus), -ENOPKG); assert_return(!bus_pid_changed(bus), -ECHILD); assert_return(!sender || service_name_is_valid(sender), -EINVAL); assert_return(!path || object_path_is_valid(path), -EINVAL); assert_return(!interface || interface_name_is_valid(interface), -EINVAL); assert_return(!member || member_name_is_valid(member), -EINVAL); expression = make_expression(sender, path, interface, member); return sd_bus_add_match_async(bus, ret, expression, callback, install_callback, userdata); }
_public_ int sd_bus_emit_signal( sd_bus *bus, const char *path, const char *interface, const char *member, const char *types, ...) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; int r; assert_return(bus, -EINVAL); assert_return(bus = bus_resolve(bus), -ENOPKG); assert_return(!bus_pid_changed(bus), -ECHILD); if (!BUS_IS_OPEN(bus->state)) return -ENOTCONN; r = sd_bus_message_new_signal(bus, &m, path, interface, member); if (r < 0) return r; if (!isempty(types)) { va_list ap; va_start(ap, types); r = sd_bus_message_appendv(m, types, ap); va_end(ap); if (r < 0) return r; } return sd_bus_send(bus, m, NULL); }
_public_ int sd_bus_track_new( sd_bus *bus, sd_bus_track **track, sd_bus_track_handler_t handler, void *userdata) { sd_bus_track *t; assert_return(bus, -EINVAL); assert_return(bus = bus_resolve(bus), -ENOPKG); assert_return(track, -EINVAL); if (!bus->bus_client) return -EINVAL; t = new0(sd_bus_track, 1); if (!t) return -ENOMEM; t->n_ref = 1; t->handler = handler; t->userdata = userdata; t->bus = sd_bus_ref(bus); LIST_PREPEND(tracks, bus->tracks, t); t->in_list = true; bus_track_add_to_queue(t); *track = t; return 0; }
_public_ int sd_bus_call_method_async( sd_bus *bus, sd_bus_slot **slot, const char *destination, const char *path, const char *interface, const char *member, sd_bus_message_handler_t callback, void *userdata, const char *types, ...) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; int r; assert_return(bus, -EINVAL); assert_return(bus = bus_resolve(bus), -ENOPKG); assert_return(!bus_pid_changed(bus), -ECHILD); if (!BUS_IS_OPEN(bus->state)) return -ENOTCONN; r = sd_bus_message_new_method_call(bus, &m, destination, path, interface, member); if (r < 0) return r; if (!isempty(types)) { va_list ap; va_start(ap, types); r = sd_bus_message_appendv(m, types, ap); va_end(ap); if (r < 0) return r; } return sd_bus_call_async(bus, slot, m, callback, userdata, 0); }