bus-util.h revision f38857914ab5c9cc55aac05795e1886963a5fd04
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek This file is part of systemd.
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek Copyright 2013 Lennart Poettering
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek systemd is free software; you can redistribute it and/or modify it
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek under the terms of the GNU Lesser General Public License as published by
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek the Free Software Foundation; either version 2.1 of the License, or
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek (at your option) any later version.
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek systemd is distributed in the hope that it will be useful, but
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek WITHOUT ANY WARRANTY; without even the implied warranty of
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek Lesser General Public License for more details.
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek You should have received a copy of the GNU Lesser General Public License
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek along with systemd; If not, see <http://www.gnu.org/licenses/>.
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmektypedef int (*bus_property_set_t) (sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringint bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_map_all_properties(sd_bus *bus,
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek const struct bus_properties_map *map,
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poetteringint bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringtypedef bool (*check_idle_t)(void *userdata);
07630cea1f3a845c09309f197ac7c4f11edd3b62Lennart Poetteringint bus_event_loop_with_idle(sd_event *e, sd_bus *bus, const char *name, usec_t timeout, check_idle_t check_idle, void *userdata);
4e731273edfe852a3eee2949cd20f49fd5b4f6d7Lennart Poetteringint bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error);
07630cea1f3a845c09309f197ac7c4f11edd3b62Lennart Poetteringint bus_verify_polkit(sd_bus_message *call, int capability, const char *action, bool interactive, bool *_challenge, sd_bus_error *e);
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringint bus_verify_polkit_async(sd_bus_message *call, int capability, const char *action, bool interactive, Hashmap **registry, sd_bus_error *error);
07630cea1f3a845c09309f197ac7c4f11edd3b62Lennart Poetteringvoid bus_verify_polkit_async_registry_free(Hashmap *registry);
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_open_system_systemd(sd_bus **_bus);
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_open_user_systemd(sd_bus **_bus);
7f1ad696a273703789b624fe0b209fb63e953016Lennart Poetteringint bus_open_transport(BusTransport transport, const char *host, bool user, sd_bus **bus);
7f1ad696a273703789b624fe0b209fb63e953016Lennart Poetteringint bus_open_transport_systemd(BusTransport transport, const char *host, bool user, sd_bus **bus);
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_print_property(const char *name, sd_bus_message *property, bool all);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringint bus_print_all_properties(sd_bus *bus, const char *dest, const char *path, char **filter, bool all);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringint bus_property_get_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_usec ((sd_bus_property_get_t) NULL)
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_set_usec ((sd_bus_property_set_t) NULL)
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringassert_cc(sizeof(int) == sizeof(int32_t));
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_int ((sd_bus_property_get_t) NULL)
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringassert_cc(sizeof(unsigned) == sizeof(unsigned));
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_unsigned ((sd_bus_property_get_t) NULL)
7fd1b19bc9e9f5574f2877936b8ac267c7706947Harald Hoyer/* On 64bit machines we can use the default serializer for size_t and
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering * friends, otherwise we need to cast this manually */
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_size ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_property_get_size(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_long ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek#define bus_property_get_ulong ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_property_get_long(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringint bus_property_get_ulong(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering/* uid_t and friends on Linux 32 bit. This means we can just use the
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering * default serializer for 32bit unsigned, for serializing it, and map
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering * it to NULL here */
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekassert_cc(sizeof(uid_t) == sizeof(uint32_t));
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek#define bus_property_get_uid ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekassert_cc(sizeof(gid_t) == sizeof(uint32_t));
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_gid ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekassert_cc(sizeof(pid_t) == sizeof(uint32_t));
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_pid ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekassert_cc(sizeof(mode_t) == sizeof(uint32_t));
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define bus_property_get_mode ((sd_bus_property_get_t) NULL)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmekint bus_parse_unit_info(sd_bus_message *message, UnitInfo *u);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringstatic inline void sd_bus_close_unrefp(sd_bus **bus) {
348ced909724a1331b85d57aede80a102a00e428Zbigniew Jędrzejewski-SzmekDEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus*, sd_bus_unref);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_slot*, sd_bus_slot_unref);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_message*, sd_bus_message_unref);
348ced909724a1331b85d57aede80a102a00e428Zbigniew Jędrzejewski-SzmekDEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_creds*, sd_bus_creds_unref);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart PoetteringDEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_track*, sd_bus_track_unref);
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define _cleanup_bus_unref_ _cleanup_(sd_bus_unrefp)
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek#define _cleanup_bus_close_unref_ _cleanup_(sd_bus_close_unrefp)
670b110c3b59dfa335ac43065b2038400d1d04a9Zbigniew Jędrzejewski-Szmek#define _cleanup_bus_slot_unref_ _cleanup_(sd_bus_slot_unrefp)
670b110c3b59dfa335ac43065b2038400d1d04a9Zbigniew Jędrzejewski-Szmek#define _cleanup_bus_message_unref_ _cleanup_(sd_bus_message_unrefp)
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define _cleanup_bus_creds_unref_ _cleanup_(sd_bus_creds_unrefp)
670b110c3b59dfa335ac43065b2038400d1d04a9Zbigniew Jędrzejewski-Szmek#define _cleanup_bus_track_unref_ _cleanup_(sd_bus_slot_unrefp)
670b110c3b59dfa335ac43065b2038400d1d04a9Zbigniew Jędrzejewski-Szmek#define _cleanup_bus_error_free_ _cleanup_(sd_bus_error_free)
da2e288bbc4d8cebaa1d38a80f6eec8cde3e9cceLennart Poettering#define BUS_DEFINE_PROPERTY_GET_ENUM(function, name, type) \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering const char *path, \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering const char *value; \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering value = strempty(name##_to_string(*field)); \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering r = sd_bus_message_append_basic(reply, 's', value); \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering struct __useless_struct_to_allow_trailing_semicolon__
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering#define BUS_PROPERTY_DUAL_TIMESTAMP(name, offset, flags) \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering SD_BUS_PROPERTY(name, "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, realtime), (flags)), \
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poettering SD_BUS_PROPERTY(name "Monotonic", "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, monotonic), (flags))
8580d1f73db36e9383e674e388b4fb55828c0c66Lennart Poetteringint bus_maybe_reply_error(sd_bus_message *m, int r, sd_bus_error *error);