<div dir="ltr"><div dir="ltr">On Fri, Jun 7, 2019 at 9:08 PM Salman Ahmed <<a href="mailto:salman.isd@gmail.com">salman.isd@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hello,</div><div><br></div><div>I am trying to communicate with connman using sdbus from my application. Basically I want to replicate the following cmd line procedure to get values for "object path" and string "Host" (underlined below)<br></div><div>I do<br></div><div><i>dbus-send --system        --dest=net.connman.vpn  --type=method_call       --print-reply         /     net.connman.vpn.Manager.GetConnections</i></div><div><br></div><div>and I get</div><div><i>  array [<br>   struct {<br>     <u>object path "/net/connman/vpn/connection</u>/uk_london_privateinternetaccess_com_privateinternetaccess_com"<br>     array [<br>      dict entry(<br>        string "State"<br>        variant          string "idle"<br>      )<br>      dict entry(<br>        string "Type"<br>        variant          string "openvpn"<br>      )<br>      dict entry(<br>        string "Name"<br>        variant          string "PIA VPN"<br>      )<br>      dict entry(<br>        string "Host"<br>        <u>variant          string "<a href="http://uk-london.privateinternetaccess.com" target="_blank">uk-london.privateinternetaccess.com</a>"</u><br>      )<br>      dict entry(<br>        string "Index"<br>        variant          int32 0<br>      )<br>      dict entry(<br>        string "Domain"<br>        variant          string "<a href="http://privateinternetaccess.com" target="_blank">privateinternetaccess.com</a>"<br>      )<br>      dict entry(<br>        string "Immutable"<br>        variant          boolean true<br>      )<br>      dict entry(<br>        string "Nameservers"<br>        variant          array [<br>         ]<br>      )<br>      dict entry(<br>        string "UserRoutes"<br>        variant          array [<br>         ]<br>      )<br>      dict entry(<br>        string "ServerRoutes"<br>        variant          array [<br>         ]<br>      )<br>     ]<br>   }<br>  ]</i></div><div><i><br></i></div><div><br></div><div>In my application I am doing</div><div>    r = sd_bus_call_method( bus,<br>                      "net.connman.vpn",<br>                      "/",<br>                      "net.connman.vpn.Manager",<br>                      "GetConnections",<br>                      &error,<br>                      &m,  NULL, NULL);<i><br></i></div><div><i><br></i></div><div>Which succeeds. <br></div><div>Afterwards I want to do sd_bus_message_read(m, "a(oa{sv})") but I have no idea what kind of arguments should I pass in what order to get object path and host string. I think I got the a(oa{sv}) part right?<br></div></div></blockquote><div><br></div><div>Use sd_bus_message_enter_container() first. Here's a very similar example:</div><div><br></div><div><a href="https://github.com/systemd/systemd/blob/master/src/core/dbus-manager.c#L802">https://github.com/systemd/systemd/blob/master/src/core/dbus-manager.c#L802</a>   </div><div><br></div></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mantas Mikulėnas</div></div></div>