<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
Hi there, <br>
<br>
sorry for not noticing that the reply-to would not direct my thanks via
the dbus-list, which I would like very much, giving the great help Mike
Gorse has given! Kudos to Mike!<br>
<br>
---rony<br>
<br>
<br>
-------- Original Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
 cellspacing="0">
  <tbody>
    <tr>
      <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Subject: </th>
      <td>Re: Request for pointers/hints for processing container
arguments ...</td>
    </tr>
    <tr>
      <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Date: </th>
      <td>Tue, 21 Jun 2011 21:52:07 +0200</td>
    </tr>
    <tr>
      <th align="RIGHT" nowrap="nowrap" valign="BASELINE">From: </th>
      <td>rony <a class="moz-txt-link-rfc2396E" href="mailto:rony@wu.ac.at">&lt;rony@wu.ac.at&gt;</a></td>
    </tr>
    <tr>
      <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Organization:
      </th>
      <td>WU Wien</td>
    </tr>
    <tr>
      <th align="RIGHT" nowrap="nowrap" valign="BASELINE">To: </th>
      <td>Mike Gorse <a class="moz-txt-link-rfc2396E" href="mailto:mgorse@novell.com">&lt;mgorse@novell.com&gt;</a></td>
    </tr>
  </tbody>
</table>
<br>
<br>
<pre>Mike:

super, thank you *very, very* much for your kind explanations, they
really help a *lot* !

This is more than enough "food for thoughts" helping really a lot to go
more systematically over the documentation once more!
(Your DBUS_TYPE_DICT example is really just extremely instructional!)

Best regards,

---rony



On 21.06.2011 20:42, Mike Gorse wrote:
&gt; Hi Rony,
&gt;
&gt; Basically you can use dbus_message_iter_open_container and
&gt; dbus_message_iter_close_container to write structs/dicts/arrays and
&gt; dbus_message_iter_recurse to read them.  Dictionaries have a
&gt; DBUS_TYPE_DICT (which wants a type that should look something like
&gt; {ss}) containing entries (which want a type of NULL).  To write a
&gt; struct, you can use something like
&gt;
&gt; dbus_message_iter_open_container (&amp;iter, DBUS_TYPE_STRUCT, NULL,
&gt; &amp;iter_struct);
&gt; // use dbus_message_iter_append_basic on iter_struct to write your data
&gt; dbus_message_iter_close_container (&amp;iter, &amp;iter_struct);
&gt;
&gt; where "iter" is a DBusMessageIter that you've initialized.  For a
&gt; dictionary with strings for the key and value, you'd have something like
&gt;
&gt; dbus_message_iter_open_container (&amp;iter, DBUS_TYPE_DICT&lt; "{ss}",
&gt; &amp;iter_dict);
&gt; while (more_entries_to_write) {
&gt;   dbus_message_iter_open_container (&amp;iter_dict, DBUS_TYPE_DICT_ENTRY,
&gt; NULL, &amp;iter_dict_entry);
&gt;   dbus_message_iter_append_basic (&amp;iter_dict_entry, DBUS_TYPE_STRING,
&gt; &amp;key);
&gt;   dbus_message_iter_append_basic (&amp;iter_dict_entry, DBUS_TYPE_STRING,
&gt; &amp;val);
&gt;   dbus_message_iter_close_container (&amp;iter_dict, &amp;iter_dict_entry);
&gt; }
&gt; dbus_message_iter_close_container (&amp;iter, &amp;iter_dict);
&gt;
&gt; Arrays can be handled similarly and want a type argument (ie, "i" for
&gt; integers), but they can also be handled with the functions you
&gt; mentioned. Variants are similar and also want the type to be specified
&gt; when opening the container.
&gt;
&gt; Also, these functions have return values to return errors if they run
&gt; out of memory.
&gt;
&gt; Hth,
&gt; -Mike
&gt;
&gt; On Tue, 21 Jun 2011, rony wrote:
&gt;
&gt;&gt; Hi there,
&gt;&gt;
&gt;&gt; my name is Rony and I have started to write a language binding for a
&gt;&gt; scripting language named ooRexx (<a class="moz-txt-link-freetext" href="http://www.ooRexx.org">http://www.ooRexx.org</a>). Hence, despite
&gt;&gt; all well-meant warnings, I have to delve into the C bindings in order to
&gt;&gt; successfully create the binding (starting out for Linux, but aiming also
&gt;&gt; on porting later to MacOSX and Windows).
&gt;&gt;
&gt;&gt; In the process of doing so I have studied the specs, tutorials and
&gt;&gt; Matthew Johnsons's *great tutorail* (however, the link on
&gt;&gt; <a class="moz-txt-link-rfc2396E" href="http://www.freedesktop.org/wiki/Software/dbus">&lt;http://www.freedesktop.org/wiki/Software/dbus&gt;</a> to his tutorial at
&gt;&gt; <a class="moz-txt-link-rfc2396E" href="http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html">&lt;http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html&gt;</a> is dead,
&gt;&gt; but I managed to get a version on his web site), which has helped me
&gt;&gt; a lot.
&gt;&gt;
&gt;&gt; Currently I am involved in writng the code for processing the ooRexx
&gt;&gt; arguments for DBus which now work for all simple types (using
&gt;&gt; dbus_message_iter_append_basic(...)).
&gt;&gt;
&gt;&gt; The next step is to deal with the container types variant, arrays,
&gt;&gt; structs and dicts. While studying the specification and the methods in
&gt;&gt; DBusMessage (like dbus_message_iter_get_array_len(*iter) or
&gt;&gt; dbus_message_iter_get_fixed_array(*iter, void *value, int *n_elements),
&gt;&gt; but also dbus_message_iter_append_fixed_array(*iter, int element_type,
&gt;&gt; const void *value, int n_elements) etc.) it is the case that I still am
&gt;&gt; not able to understand how exactly these types have to be processed.
&gt;&gt;
&gt;&gt; Any little program/snippet or pseudo code would help me a lot and hence
&gt;&gt; turning to this list of experts to ask for help!
&gt;&gt;
&gt;&gt; If you have pointers to any plain C code (glib's binding won't help me
&gt;&gt; unfortunately) or would be kind enough to simply sketch in scarce
&gt;&gt; pseudocode how to create those container values for message arguments, I
&gt;&gt; would *really* appreciate it a lot!
&gt;&gt;
&gt;&gt; TIA,
&gt;&gt;
&gt;&gt; ---rony
&gt;&gt;
&gt;&gt; P.S.: If anyone has anything comparable to Matthew Johnson's tutorial,
&gt;&gt; but demoing how to process container values, that would be a boon!
&gt;&gt;
&gt;&gt;
&gt;&gt; _______________________________________________
&gt;&gt; dbus mailing list
&gt;&gt; <a class="moz-txt-link-abbreviated" href="mailto:dbus@lists.freedesktop.org">dbus@lists.freedesktop.org</a>
&gt;&gt; <a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/dbus">http://lists.freedesktop.org/mailman/listinfo/dbus</a>
&gt;&gt;</pre>
<br>
</body>
</html>