summaryrefslogtreecommitdiffstats
path: root/src/common/dbus.h
diff options
context:
space:
mode:
authorsumuel <samuel@yakubos.org>2026-08-17 20:44:55 +0000
committersumuel <samuel@yakubos.org>2026-08-17 20:44:55 +0000
commit76424950e373d3b04ac3dd13019151bfba3e8423 (patch)
tree4c3cfdbda039e592b9186be3e28f8d7cfd439e8a /src/common/dbus.h
Add the files
Diffstat (limited to 'src/common/dbus.h')
-rw-r--r--src/common/dbus.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/common/dbus.h b/src/common/dbus.h
new file mode 100644
index 0000000..e0689c3
--- /dev/null
+++ b/src/common/dbus.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#ifdef FF_HAVE_DBUS
+ #include <dbus/dbus.h>
+
+ #include "common/FFstrbuf.h"
+ #include "common/library.h"
+
+typedef struct FFDBusLibrary {
+ FF_LIBRARY_SYMBOL(dbus_bus_get)
+ FF_LIBRARY_SYMBOL(dbus_message_new_method_call)
+ FF_LIBRARY_SYMBOL(dbus_message_append_args)
+ FF_LIBRARY_SYMBOL(dbus_message_iter_init)
+ FF_LIBRARY_SYMBOL(dbus_message_iter_get_arg_type)
+ FF_LIBRARY_SYMBOL(dbus_message_iter_get_basic)
+ FF_LIBRARY_SYMBOL(dbus_message_iter_recurse)
+ FF_LIBRARY_SYMBOL(dbus_message_iter_has_next)
+ FF_LIBRARY_SYMBOL(dbus_message_iter_next)
+ FF_LIBRARY_SYMBOL(dbus_message_unref)
+ FF_LIBRARY_SYMBOL(dbus_connection_send_with_reply_and_block)
+ FF_LIBRARY_SYMBOL(dbus_connection_unref)
+} FFDBusLibrary;
+
+typedef struct FFDBusData {
+ const FFDBusLibrary* lib;
+ DBusConnection* connection;
+} FFDBusData;
+
+const char* ffDBusLoadData(DBusBusType busType, FFDBusData* data); // Returns an error message or NULL on success
+bool ffDBusGetString(FFDBusData* dbus, DBusMessageIter* iter, FFstrbuf* result);
+bool ffDBusGetBool(FFDBusData* dbus, DBusMessageIter* iter, bool* result);
+bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint64_t* result);
+DBusMessage* ffDBusGetMethodReply(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* method, const char* arg1, const char* arg2);
+DBusMessage* ffDBusGetProperty(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property);
+bool ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, FFstrbuf* result);
+bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int64_t* result);
+bool ffDBusGetPropertyUint(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, uint64_t* result);
+void ffDBusDestroyData(FFDBusData* data);
+
+static inline DBusMessage* ffDBusGetAllProperties(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface) {
+ return ffDBusGetMethodReply(dbus, busName, objectPath, "org.freedesktop.DBus.Properties", "GetAll", interface, NULL);
+}
+
+ #define FF_DBUS_AUTO_DESTROY_DATA FF_A_CLEANUP(ffDBusDestroyData)
+
+#endif // FF_HAVE_DBUS