コード例 #1
0
int bus_open_transport(BusTransport transport, const char *host, bool user, sd_bus **bus) {
        int r;

        assert(transport >= 0);
        assert(transport < _BUS_TRANSPORT_MAX);
        assert(bus);

        assert_return((transport == BUS_TRANSPORT_LOCAL) == !host, -EINVAL);
        assert_return(transport == BUS_TRANSPORT_LOCAL || !user, -ENOTSUP);

        switch (transport) {

        case BUS_TRANSPORT_LOCAL:
                if (user)
                        r = sd_bus_default_user(bus);
                else
                        r = sd_bus_default_system(bus);

                break;

        case BUS_TRANSPORT_REMOTE:
                r = sd_bus_open_system_remote(bus, host);
                break;

        case BUS_TRANSPORT_CONTAINER:
                r = sd_bus_open_system_container(bus, host);
                break;

        default:
                assert_not_reached("Hmm, unknown transport type.");
        }

        return r;
}
コード例 #2
0
ファイル: dbus.c プロジェクト: siiptuo/kirstu
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",
        "org.freedesktop.Notifications",
        vtable,
        NULL);
    if (r < 0) {
        fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
        exit(EXIT_FAILURE);
    }

    r = sd_bus_request_name(bus, "org.freedesktop.Notifications", 0);
    if (r < 0) {
        fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
        exit(EXIT_FAILURE);
    }

    return sd_bus_get_fd(bus);
}