TwentySix
TwentySix

Reputation: 83

How to iterate over Dict of {String, Variant} with dbus_message_get_args?

I'm getting D-Bus message with sa{sv}as signature.

More details about message from bustle - D-Bus visualiser:

But can't iterate over a{sv} part using dbus_message_get_args command.

Here's my code:

static DBusHandlerResult filter_function(DBusConnection * connection, DBusMessage * message, void * user_data) {

    // Message argument preview from bustle - ('org.bluez.obex.Transfer1', {'Status': <'complete'>}, @as [])

    char * arg_one;
    DBusMessageIter arg_two;

    dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &arg_one, DBUS_TYPE_ARRAY, &arg_two);

    printf("arg one - %s\n", arg_one); // Print 'org.bluez.obex.Transfer1'

    DBusMessageIter dict;
    dbus_message_iter_recurse(&arg_two, &dict);

    // I need to iterate over second argument DBUS_TYPE_ARRAY arg_two and get 'Status' value <'complete'>

    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}

Code compiles fine, but execution give me Segmentation fault error. Already search on GitHub for examples and ask GPT, Copilot etc.

In current project I can use only #include <dbus/dbus.h>.

Upvotes: 1

Views: 84

Answers (0)

Related Questions