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 <berrange@xxxxxxxxxx> --- 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 6091c67..6a89d1f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1160,6 +1160,8 @@ virDBusCallMethod; virDBusCloseSystemBus; virDBusCreateMethod; virDBusCreateMethodV; +virDBusCreateReply; +virDBusCreateReplyV; virDBusGetSessionBus; virDBusGetSystemBus; virDBusHasSystemBus; diff --git a/src/util/virdbus.c b/src/util/virdbus.c index d4e0381..d5d3e01 100644 --- a/src/util/virdbus.c +++ b/src/util/virdbus.c @@ -1227,6 +1227,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 * @call: pointer to a message to send diff --git a/src/util/virdbus.h b/src/util/virdbus.h index e191a28..4fbda87 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, -- 1.8.5.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list