From bd93dea3f7c8fa0ca477d49dd5a2d598026db974 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 19 Mar 2014 10:58:42 +0000 Subject: [PATCH] Add DBus helper methods for creating reply messages The test suites often have to create DBus method reply messages with payloads. Create two helpers for simplifying the process of creating replies with payloads. Signed-off-by: Daniel P. Berrange --- src/libvirt_private.syms | 2 ++ src/util/virdbus.c | 60 ++++++++++++++++++++++++++++++++++++++++ src/util/virdbus.h | 5 ++++ 3 files changed, 67 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 1f70e0e474..fe8461f7a0 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1165,6 +1165,8 @@ virDBusCallMethod; virDBusCloseSystemBus; virDBusCreateMethod; virDBusCreateMethodV; +virDBusCreateReply; +virDBusCreateReplyV; virDBusGetSessionBus; virDBusGetSystemBus; virDBusHasSystemBus; diff --git a/src/util/virdbus.c b/src/util/virdbus.c index 2576208eb0..ecfe9f6364 100644 --- a/src/util/virdbus.c +++ b/src/util/virdbus.c @@ -1228,6 +1228,66 @@ int virDBusCreateMethod(DBusMessage **call, } +/** + * virDBusCreateReplyV: + * @reply: pointer to be filled with a method reply message + * @types: type signature for following method arguments + * @args: method arguments + * + * This creates a DBus method reply message and saves a + * pointer to it in @reply. + * + * The @types parameter is a DBus signature describing + * the method call parameters which will be provided + * as variadic args. See virDBusCreateMethodV for a + * description of this parameter. + */ +int virDBusCreateReplyV(DBusMessage **reply, + const char *types, + va_list args) +{ + int ret = -1; + + if (!(*reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN))) { + virReportOOMError(); + goto cleanup; + } + + if (virDBusMessageEncodeArgs(*reply, types, args) < 0) { + dbus_message_unref(*reply); + *reply = NULL; + goto cleanup; + } + + ret = 0; + cleanup: + return ret; +} + + +/** + * virDBusCreateReply: + * @reply: pointer to be filled with a method reply message + * @types: type signature for following method arguments + * @...: method arguments + * + * See virDBusCreateReplyV for a description of the + * behaviour of this method. + */ +int virDBusCreateReply(DBusMessage **reply, + const char *types, ...) +{ + va_list args; + int ret; + + va_start(args, types); + ret = virDBusCreateReplyV(reply, types, args); + va_end(args); + + return ret; +} + + /** * virDBusCall: * @conn: a DBus connection diff --git a/src/util/virdbus.h b/src/util/virdbus.h index e191a28535..4fbda8799b 100644 --- a/src/util/virdbus.h +++ b/src/util/virdbus.h @@ -53,6 +53,11 @@ int virDBusCreateMethodV(DBusMessage **call, const char *member, const char *types, va_list args); +int virDBusCreateReply(DBusMessage **reply, + const char *types, ...); +int virDBusCreateReplyV(DBusMessage **reply, + const char *types, + va_list args); int virDBusCallMethod(DBusConnection *conn, DBusMessage **reply, -- GitLab