예제 #1
0
파일: vtable.c 프로젝트: pybus/pybus
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;
	}
예제 #3
0
#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);
예제 #4
0
#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);
예제 #5
0
파일: dbus.c 프로젝트: openbmc/ipmitool
	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));
예제 #6
0
                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);
예제 #7
0
파일: dbus.c 프로젝트: siiptuo/kirstu
    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",