2 ===================================================================
3 --- tools/dbus-send.1 (revision 691)
4 +++ tools/dbus-send.1 (working copy)
6 specified. Following arguments, if any, are the message contents
7 (message arguments). These are given as a type name, a colon, and
8 then the value of the argument. The possible type names are: string,
9 -int32, uint32, double, byte, boolean. (D-BUS supports more types than
10 -these, but \fIdbus-send\fP currently does not.)
11 +int32, uint32, double, byte, boolean, array. (D-BUS supports more types
12 +than these, but \fIdbus-send\fP currently does not.)
15 Here is an example invocation:
17 dbus-send \-\-dest='org.freedesktop.ExampleService' \\
18 /org/freedesktop/sample/object/name \\
19 org.freedesktop.ExampleInterface.ExampleMethod \\
20 - int32:47 string:'hello world' double:65.32
21 + int32:47 string:'hello world' double:65.32 \\
26 Index: dbus-print-message.c
27 ===================================================================
28 --- tools/dbus-print-message.c (revision 691)
29 +++ tools/dbus-print-message.c (working copy)
35 +iterate (DBusMessageIter* iter, int entry_type)
40 + dbus_uint32_t uint32;
44 + dbus_bool_t boolean;
45 + int type = dbus_message_iter_get_arg_type (iter);
47 + DBusMessageIter array_iter;
48 + int array_type = DBUS_TYPE_INVALID;
50 + if (type == DBUS_TYPE_INVALID)
52 + if (entry_type == DBUS_TYPE_INVALID)
60 + case DBUS_TYPE_STRING:
61 + str = dbus_message_iter_get_string (iter);
62 + printf ("string:%s\n", str);
65 + case DBUS_TYPE_INT32:
66 + int32 = dbus_message_iter_get_int32 (iter);
67 + printf ("int32:%d\n", int32);
70 + case DBUS_TYPE_UINT32:
71 + uint32 = dbus_message_iter_get_uint32 (iter);
72 + printf ("int32:%u\n", uint32);
75 + case DBUS_TYPE_DOUBLE:
76 + d = dbus_message_iter_get_double (iter);
77 + printf ("double:%f\n", d);
80 + case DBUS_TYPE_BYTE:
81 + byte = dbus_message_iter_get_byte (iter);
82 + printf ("byte:%d\n", byte);
85 + case DBUS_TYPE_BOOLEAN:
86 + boolean = dbus_message_iter_get_boolean (iter);
87 + printf ("boolean:%s\n", boolean ? "true" : "false");
90 + case DBUS_TYPE_ARRAY:
91 + dbus_message_iter_init_array_iterator (iter,
94 + printf ("array[\n");
95 + iterate (&array_iter, array_type);
100 + printf ("(unknown arg type %d)\n", type);
103 + } while (dbus_message_iter_next (iter));
107 print_message (DBusMessage *message)
111 dbus_message_iter_init (message, &iter);
115 - int type = dbus_message_iter_get_arg_type (&iter);
117 - dbus_uint32_t uint32;
118 - dbus_int32_t int32;
120 - unsigned char byte;
121 - dbus_bool_t boolean;
123 - if (type == DBUS_TYPE_INVALID)
128 - case DBUS_TYPE_STRING:
129 - str = dbus_message_iter_get_string (&iter);
130 - printf ("string:%s\n", str);
133 - case DBUS_TYPE_INT32:
134 - int32 = dbus_message_iter_get_int32 (&iter);
135 - printf ("int32:%d\n", int32);
138 - case DBUS_TYPE_UINT32:
139 - uint32 = dbus_message_iter_get_uint32 (&iter);
140 - printf ("int32:%u\n", uint32);
143 - case DBUS_TYPE_DOUBLE:
144 - d = dbus_message_iter_get_double (&iter);
145 - printf ("double:%f\n", d);
148 - case DBUS_TYPE_BYTE:
149 - byte = dbus_message_iter_get_byte (&iter);
150 - printf ("byte:%d\n", byte);
153 - case DBUS_TYPE_BOOLEAN:
154 - boolean = dbus_message_iter_get_boolean (&iter);
155 - printf ("boolean:%s\n", boolean ? "true" : "false");
159 - printf ("(unknown arg type %d)\n", type);
162 - } while (dbus_message_iter_next (&iter));
163 + iterate (&iter, DBUS_TYPE_INVALID);
167 ===================================================================
168 --- tools/dbus-send.c (revision 691)
169 +++ tools/dbus-send.c (working copy)
176 +get_type (char **argv, char *arg)
180 + if (arg[0] == 0 || !strcmp (arg, "string"))
181 + type = DBUS_TYPE_STRING;
182 + else if (!strcmp (arg, "int32"))
183 + type = DBUS_TYPE_INT32;
184 + else if (!strcmp (arg, "uint32"))
185 + type = DBUS_TYPE_UINT32;
186 + else if (!strcmp (arg, "double"))
187 + type = DBUS_TYPE_DOUBLE;
188 + else if (!strcmp (arg, "byte"))
189 + type = DBUS_TYPE_BYTE;
190 + else if (!strcmp (arg, "boolean"))
191 + type = DBUS_TYPE_BOOLEAN;
192 + else if (!strcmp (arg, "array"))
193 + type = DBUS_TYPE_ARRAY;
196 + fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg);
205 +append (char **argv, char *arg, char *c, DBusMessageIter *iter)
207 + int type, atype = 0;
208 + dbus_uint32_t uint32;
209 + dbus_int32_t int32;
211 + unsigned char byte;
212 + DBusMessageIter array_iter;
216 + /* FIXME - we are ignoring OOM returns on all these functions */
218 + type = get_type(argv, arg);
219 + if (type == DBUS_TYPE_ARRAY)
222 + c = strchr (c, '[');
225 + fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
229 + if (strchr(c, ']') == NULL)
231 + fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
237 + atype = get_type(argv, arg);
243 + case DBUS_TYPE_BYTE:
244 + byte = strtoul (c, NULL, 0);
245 + dbus_message_iter_append_byte (iter, byte);
248 + case DBUS_TYPE_DOUBLE:
249 + d = strtod (c, NULL);
250 + dbus_message_iter_append_double (iter, d);
253 + case DBUS_TYPE_INT32:
254 + int32 = strtol (c, NULL, 0);
255 + dbus_message_iter_append_int32 (iter, int32);
258 + case DBUS_TYPE_UINT32:
259 + uint32 = strtoul (c, NULL, 0);
260 + dbus_message_iter_append_uint32 (iter, uint32);
263 + case DBUS_TYPE_STRING:
264 + dbus_message_iter_append_string (iter, c);
267 + case DBUS_TYPE_BOOLEAN:
268 + if (strcmp(c, "true") == 0)
269 + dbus_message_iter_append_boolean (iter, TRUE);
270 + else if (strcmp(c, "false") == 0)
271 + dbus_message_iter_append_boolean (iter, FALSE);
274 + fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c);
279 + case DBUS_TYPE_ARRAY:
280 + /* Decompose parameters and put it as array */
281 + dbus_message_iter_append_array(iter, &array_iter, atype);
285 + next = strchr(c, ',');
288 + next = strchr(c, ']');
303 + append (argv, arg, c, &array_iter);
309 + fprintf (stderr, "%s: Unsupported data type\n", argv[0]);
315 main (int argc, char *argv[])
322 - dbus_uint32_t uint32;
323 - dbus_int32_t int32;
325 - unsigned char byte;
328 type = DBUS_TYPE_INVALID;
330 c = strchr (arg, ':');
335 - if (arg[0] == 0 || !strcmp (arg, "string"))
336 - type = DBUS_TYPE_STRING;
337 - else if (!strcmp (arg, "int32"))
338 - type = DBUS_TYPE_INT32;
339 - else if (!strcmp (arg, "uint32"))
340 - type = DBUS_TYPE_UINT32;
341 - else if (!strcmp (arg, "double"))
342 - type = DBUS_TYPE_DOUBLE;
343 - else if (!strcmp (arg, "byte"))
344 - type = DBUS_TYPE_BYTE;
345 - else if (!strcmp (arg, "boolean"))
346 - type = DBUS_TYPE_BOOLEAN;
349 - fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg);
353 - /* FIXME - we are ignoring OOM returns on all these functions */
356 - case DBUS_TYPE_BYTE:
357 - byte = strtoul (c, NULL, 0);
358 - dbus_message_iter_append_byte (&iter, byte);
361 - case DBUS_TYPE_DOUBLE:
362 - d = strtod (c, NULL);
363 - dbus_message_iter_append_double (&iter, d);
366 - case DBUS_TYPE_INT32:
367 - int32 = strtol (c, NULL, 0);
368 - dbus_message_iter_append_int32 (&iter, int32);
371 - case DBUS_TYPE_UINT32:
372 - uint32 = strtoul (c, NULL, 0);
373 - dbus_message_iter_append_uint32 (&iter, uint32);
376 - case DBUS_TYPE_STRING:
377 - dbus_message_iter_append_string (&iter, c);
380 - case DBUS_TYPE_BOOLEAN:
381 - if (strcmp(c, "true") == 0)
382 - dbus_message_iter_append_boolean (&iter, TRUE);
383 - else if (strcmp(c, "false") == 0)
384 - dbus_message_iter_append_boolean (&iter, FALSE);
387 - fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c);
393 - fprintf (stderr, "%s: Unsupported data type\n", argv[0]);
396 + append (argv, arg, c, &iter);