X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fdbus-common.h;h=9752f08c0536b661a30cb8f16cdbe6afafd56cb4;hb=e4ee6e5cc3e8e23e1ecc0d9fa756d9cc2534d218;hp=ca398fc3f5444f41802e8fbb2ce860f37188745f;hpb=d4e7373bbbc878b0d8ed1c28e21262a6d908d616;p=elogind.git diff --git a/src/shared/dbus-common.h b/src/shared/dbus-common.h index ca398fc3f..9752f08c0 100644 --- a/src/shared/dbus-common.h +++ b/src/shared/dbus-common.h @@ -1,7 +1,6 @@ /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -#ifndef foodbuscommonhfoo -#define foodbuscommonhfoo +#pragma once /*** This file is part of systemd. @@ -23,6 +22,10 @@ ***/ #include +#include +#include + +#include "macro.h" #ifndef DBUS_ERROR_UNKNOWN_OBJECT #define DBUS_ERROR_UNKNOWN_OBJECT "org.freedesktop.DBus.Error.UnknownObject" @@ -91,6 +94,7 @@ int bus_connect_system_ssh(const char *user, const char *host, DBusConnection ** int bus_connect_system_polkit(DBusConnection **_bus, DBusError *error); const char *bus_error_message(const DBusError *error); +const char *bus_error(const DBusError *e, int r); typedef int (*BusPropertyCallback)(DBusMessageIter *iter, const char *property, void *data); typedef int (*BusPropertySetCallback)(DBusMessageIter *iter, const char *property, void *data); @@ -112,6 +116,10 @@ typedef struct BusBoundProperties { const void *const base; /* base pointer to which the offset must be added to reach data */ } BusBoundProperties; +dbus_bool_t bus_maybe_send_reply (DBusConnection *c, + DBusMessage *message, + DBusMessage *reply); + DBusHandlerResult bus_send_error_reply( DBusConnection *c, DBusMessage *message, @@ -144,6 +152,9 @@ int bus_property_append_long(DBusMessageIter *i, const char *property, void *dat #define bus_property_append_unsigned bus_property_append_uint32 #define bus_property_append_usec bus_property_append_uint64 +int bus_property_set_uint64(DBusMessageIter *i, const char *property, void *data); +#define bus_property_set_usec bus_property_set_uint64 + #define DEFINE_BUS_PROPERTY_APPEND_ENUM(function,name,type) \ int function(DBusMessageIter *i, const char *property, void *data) { \ const char *value; \ @@ -152,7 +163,7 @@ int bus_property_append_long(DBusMessageIter *i, const char *property, void *dat assert(i); \ assert(property); \ \ - value = name##_to_string(*field); \ + value = strempty(name##_to_string(*field)); \ \ if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &value)) \ return -ENOMEM; \ @@ -163,28 +174,47 @@ int bus_property_append_long(DBusMessageIter *i, const char *property, void *dat #define DEFINE_BUS_PROPERTY_SET_ENUM(function,name,type) \ int function(DBusMessageIter *i, const char *property, void *data) { \ const char *value; \ - type *field = data; \ + type f, *field = data; \ \ assert(i); \ assert(property); \ \ dbus_message_iter_get_basic(i, &value); \ \ - *field = name##_from_string(value); \ + f = name##_from_string(value); \ + if (f < 0) \ + return f; \ \ + *field = f; \ return 0; \ } -const char *bus_errno_to_dbus(int error); +const char *bus_errno_to_dbus(int error) _const_; DBusMessage* bus_properties_changed_new(const char *path, const char *interface, const char *properties); DBusMessage* bus_properties_changed_one_new(const char *path, const char *interface, const char *property); -uint32_t bus_flags_to_events(DBusWatch *bus_watch); -unsigned bus_events_to_flags(uint32_t events); +uint32_t bus_flags_to_events(DBusWatch *bus_watch) _pure_; +unsigned bus_events_to_flags(uint32_t events) _const_; int bus_parse_strv(DBusMessage *m, char ***_l); int bus_parse_strv_iter(DBusMessageIter *iter, char ***_l); +int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l); + +struct unit_info { + const char *id; + const char *description; + const char *load_state; + const char *active_state; + const char *sub_state; + const char *following; + const char *unit_path; + uint32_t job_id; + const char *job_type; + const char *job_path; +}; + +int bus_parse_unit_info(DBusMessageIter *iter, struct unit_info *u); int bus_append_strv_iter(DBusMessageIter *iter, char **l); @@ -196,4 +226,21 @@ void bus_async_unregister_and_exit(DBusConnection *bus, const char *name); DBusHandlerResult bus_exit_idle_filter(DBusConnection *bus, DBusMessage *m, void *userdata); -#endif +pid_t bus_get_unix_process_id(DBusConnection *connection, const char *name, DBusError *error); + +bool bus_error_is_no_service(const DBusError *error); +int bus_method_call_with_reply(DBusConnection *bus, + const char *destination, + const char *path, + const char *interface, + const char *method, + DBusMessage **return_reply, + DBusError *return_error, + int first_arg_type, ...); + +const char *bus_message_get_sender_with_fallback(DBusMessage *m); + +void bus_message_unrefp(DBusMessage **reply); + +#define _cleanup_dbus_message_unref_ __attribute__((cleanup(bus_message_unrefp))) +#define _cleanup_dbus_error_free_ __attribute__((cleanup(dbus_error_free)))