<div dir="ltr"><div>Hi,</div><div><br></div><div>I am playing with libdbus and want to call a specific method with this signature:</div><div>'ssa(sv)a(sa(sv))'.</div><div><br></div><div>Specifically this method is StartTransientUnit from systemd1.manager.</div><div>I want to do it with libdbus, not sd-dbus. I think I filled in the arguments of the message but when I call it I cannot see anything in 'dbus-monitor --system'.</div><div><br></div><div>My code seems to end with no error, except that when I check for the reply it says:</div><div></div><div>"Connection was disconnected before a reply was received".</div><div><br></div><div>I am looking for some guidance on what I am doing wrong, and specifically how to debug my message composition.</div><div>Am I filling up the message correctly? I got inspired from dbus-asv-util.[c|h] for _dbus_asv_add_fixed_array call.<br></div><div></div><div><br></div><div>Here is the sequence of operations, but not the real code.</div><div>For the real code please check <a href="https://pastebin.com/raw/Ev73xzMJ">https://pastebin.com/raw/Ev73xzMJ</a></div><div><br></div><div>        printf("Calling remote method with %d\n", param);<br>   dbus_error_init(&err);<br>    conn = dbus_bus_get(DBUS_BUS_SESSION, &err);<br>      ret = dbus_bus_request_name(conn, "my.test.caller", DBUS_NAME_FLAG_REPLACE_EXISTING , &err);<br>    msg = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartTransientUnit");<br>        dbus_message_iter_init_append(msg, &args_itr);<br>    dbus_message_iter_append_basic(&args_itr, DBUS_TYPE_STRING, &name);<br>   dbus_message_iter_append_basic(&args_itr, DBUS_TYPE_STRING, &mode);<br>   _dbus_asv_add_fixed_array(&args_itr, pid_str, DBUS_TYPE_UINT32,                               &pids, npids);<br> dbus_message_iter_open_container(&args_itr, DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32_AS_STRING, &cont_itr);<br>  dbus_message_iter_append_basic(&cont_itr, DBUS_TYPE_UINT32, &zero);<br>   dbus_message_iter_close_container(&args_itr, &cont_itr);<br>      dbus_connection_send_with_reply(conn, msg, &pending, -1);<br> dbus_connection_flush(conn);<br>  printf("Request Sent... blocking for reply.\n");<br>    dbus_message_unref(msg);<br>      dbus_pending_call_block(pending);<br>     msg = dbus_pending_call_steal_reply(pending);<br> printf("\n-- Reply received --\n");<br> dbus_pending_call_unref(pending);<br>     dbus_message_iter_init(msg, &args_itr);<br>   dbus_message_iter_get_basic(&args_itr, &rcstr);<br>       printf("Test: ret. arg is type string: %s\n", rcstr);<br>       dbus_message_unref(msg);</div><div><br></div><div>Thanks and note this is a test code.<br></div></div>