summaryrefslogtreecommitdiff
path: root/src/shared/bus-util.h
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-04-15 17:21:23 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-05-05 22:27:03 +0200
commit6a7e98aacada79e273ddcad7335a7be7c2add801 (patch)
tree91836f8c6941a478a7af4de631dc069b02a2991e /src/shared/bus-util.h
parentfc021a5bbf1b00a3ac21845f3102f1a6379a9357 (diff)
downloadsystemd-6a7e98aacada79e273ddcad7335a7be7c2add801.tar.gz
sd-bus: add helper struct for interface definitions
The idea is to have a static table that defines the dbus API. The vtable is defined right next to the interface name and path because they are logically connected.
Diffstat (limited to 'src/shared/bus-util.h')
-rw-r--r--src/shared/bus-util.h29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index fd1820ca7e..a985523cd0 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -23,11 +23,32 @@ typedef enum BusTransport {
} BusTransport;
typedef struct BusLocator {
- const char *destination;
- const char *path;
- const char *interface;
+ const char *destination;
+ const char *path;
+ const char *interface;
} BusLocator;
+typedef struct BusObjectImplementation BusObjectImplementation;
+
+typedef struct BusObjectVtablePair {
+ const sd_bus_vtable *vtable;
+ sd_bus_object_find_t object_find;
+} BusObjectVtablePair;
+
+struct BusObjectImplementation {
+ const char *path;
+ const char *interface;
+ const sd_bus_vtable **vtables;
+ const BusObjectVtablePair *fallback_vtables;
+ sd_bus_node_enumerator_t node_enumerator;
+ bool manager;
+ const BusObjectImplementation **children;
+};
+
+#define BUS_VTABLES(...) ((const sd_bus_vtable* []){ __VA_ARGS__, NULL })
+#define BUS_FALLBACK_VTABLES(...) ((const BusObjectVtablePair[]) { __VA_ARGS__, {} })
+#define BUS_IMPLEMENTATIONS(...) ((const BusObjectImplementation* []) { __VA_ARGS__, NULL })
+
typedef int (*bus_property_set_t) (sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
struct bus_properties_map {
@@ -199,3 +220,5 @@ int bus_set_property(sd_bus *bus, const BusLocator *locator, const char *member,
int bus_match_signal(sd_bus *bus, sd_bus_slot **ret, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, void *userdata);
int bus_match_signal_async(sd_bus *bus, sd_bus_slot **ret, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, sd_bus_message_handler_t install_callback, void *userdata);
int bus_message_new_method_call(sd_bus *bus, sd_bus_message **m, const BusLocator *locator, const char *member);
+
+int bus_add_implementation(sd_bus *bus, const BusObjectImplementation *impl, void *userdata);