dbus-send.c revision 5fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41
17c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington/* -*- mode: C; c-file-style: "gnu" -*- */
27c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington/* dbus-send.c  Utility program to send messages from the command line
37c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington *
47c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * Copyright (C) 2003 Philip Blundell <philb@gnu.org>
57c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington *
67c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * This program is free software; you can redistribute it and/or modify
77c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * it under the terms of the GNU General Public License as published by
87c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * the Free Software Foundation; either version 2 of the License, or
97c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * (at your option) any later version.
107c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington *
117c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * This program is distributed in the hope that it will be useful,
127c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of
137c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
147c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * GNU General Public License for more details.
157c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington *
167c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * You should have received a copy of the GNU General Public License
177c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * along with this program; if not, write to the Free Software
187c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
197c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington *
207c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington */
217c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
227c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington#include <stdio.h>
237c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington#include <stdlib.h>
247c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington#include <string.h>
257c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
267c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington#include <dbus/dbus.h>
277c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
28306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington#include "dbus-print-message.h"
29306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington
307c434a849a161c4514f3759659ac7af9ecddc721Havoc Penningtonstatic void
31fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Waltersusage (char *name, int ecode)
327c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington{
335fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington  fprintf (stderr, "Usage: %s [--help] [--system | --session] [--dest=SERVICE] [--type=TYPE] [--print-reply] <destination object path> <message name> [contents ...]\n", name);
34fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters  exit (ecode);
357c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington}
367c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
377c434a849a161c4514f3759659ac7af9ecddc721Havoc Penningtonint
387c434a849a161c4514f3759659ac7af9ecddc721Havoc Penningtonmain (int argc, char *argv[])
397c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington{
407c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  DBusConnection *connection;
417c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  DBusError error;
427c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  DBusMessage *message;
43306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington  int print_reply;
447c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  DBusMessageIter iter;
457c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  int i;
46fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters  DBusBusType type = DBUS_BUS_SESSION;
4768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington  const char *dest = DBUS_SERVICE_ORG_FREEDESKTOP_BROADCAST;
485fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington  const char *name = NULL;
495fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington  const char *path = NULL;
50b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  int message_type = DBUS_MESSAGE_TYPE_SIGNAL;
51b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  const char *type_str = NULL;
52b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington
535fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington  if (argc < 3)
54fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters    usage (argv[0], 1);
557c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
56306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington  print_reply = FALSE;
57306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington
587c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  for (i = 1; i < argc && name == NULL; i++)
597c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    {
607c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      char *arg = argv[i];
617c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
62fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters      if (strcmp (arg, "--system") == 0)
63fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters	type = DBUS_BUS_SYSTEM;
64e94493fc116955bbf72a8896c48f2c119efacf7fAnders Carlsson      else if (strcmp (arg, "--session") == 0)
65e94493fc116955bbf72a8896c48f2c119efacf7fAnders Carlsson	type = DBUS_BUS_SESSION;
66306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      else if (strcmp (arg, "--print-reply") == 0)
67306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington        print_reply = TRUE;
687c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (strstr (arg, "--dest=") == arg)
697c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	dest = strchr (arg, '=') + 1;
70b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      else if (strstr (arg, "--type=") == arg)
71b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington	type_str = strchr (arg, '=') + 1;
72fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters      else if (!strcmp(arg, "--help"))
73fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters	usage (argv[0], 0);
747c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (arg[0] == '-')
75fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters	usage (argv[0], 1);
765fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington      else if (path == NULL)
775fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington        path = arg;
785fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington      else if (name == NULL)
795fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington        name = arg;
807c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else
815fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington        usage (argv[0], 1);
827c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    }
837c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
847c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  if (name == NULL)
85fc5e3a06cf4876fb10d0205a626e51109f29eb82Colin Walters    usage (argv[0], 1);
867c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
87b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  if (type_str != NULL)
88b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    {
89b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      if (strcmp (type_str, "method_call") == 0)
90b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington        message_type = DBUS_MESSAGE_TYPE_METHOD_CALL;
91b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      else if (strcmp (type_str, "signal") == 0)
92b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington        message_type = DBUS_MESSAGE_TYPE_SIGNAL;
93b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      else
94b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington        {
95b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington          fprintf (stderr, "Message type \"%s\" is not supported\n",
96b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington                   type_str);
97b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington          exit (1);
98b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington        }
99b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    }
100b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington
1017c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  dbus_error_init (&error);
1027c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  connection = dbus_bus_get (type, &error);
1037c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  if (connection == NULL)
1047c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    {
1057c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      fprintf (stderr, "Failed to open connection to %s message bus: %s\n",
1067c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	       (type == DBUS_BUS_SYSTEM) ? "system" : "session",
1077c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington               error.message);
1087c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      dbus_error_free (&error);
1097c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      exit (1);
1107c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    }
1117c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
112b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  if (message_type == DBUS_MESSAGE_TYPE_METHOD_CALL)
113b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    {
11468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      char *last_dot;
11568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington
11668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      last_dot = strrchr (name, '.');
11768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      if (last_dot == NULL)
11868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington        {
11968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington          fprintf (stderr, "Must use org.mydomain.Interface.Method notation, no dot in \"%s\"\n",
12068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington                   name);
12168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington          exit (1);
12268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington        }
12368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      *last_dot = '\0';
12468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington
1255fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington      message = dbus_message_new_method_call (NULL,
1265fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington                                              path,
1275fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington                                              name,
1285fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington                                              last_dot + 1);
129b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    }
130b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  else if (message_type == DBUS_MESSAGE_TYPE_SIGNAL)
131b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    {
13268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      char *last_dot;
13368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington
13468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      last_dot = strrchr (name, '.');
13568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      if (last_dot == NULL)
13668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington        {
13768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington          fprintf (stderr, "Must use org.mydomain.Interface.Signal notation, no dot in \"%s\"\n",
13868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington                   name);
13968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington          exit (1);
14068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington        }
14168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington      *last_dot = '\0';
14268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington
1435fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington      message = dbus_message_new_signal (path, name, last_dot + 1);
144b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    }
145b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  else
146b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    {
147b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      fprintf (stderr, "Internal error, unknown message type\n");
148b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      exit (1);
149b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    }
150b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington
1517c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  if (message == NULL)
1527c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    {
1537c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      fprintf (stderr, "Couldn't allocate D-BUS message\n");
1547c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      exit (1);
1557c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    }
1567c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
157b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  if (dest && !dbus_message_set_destination (message, dest))
158b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    {
159b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      fprintf (stderr, "Not enough memory\n");
160b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      exit (1);
161b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington    }
162b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington
1637c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  dbus_message_append_iter_init (message, &iter);
1647c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
1657c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  while (i < argc)
1667c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    {
1677c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      char *arg;
1687c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      char *c;
1697c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      int type;
1707c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      dbus_uint32_t uint32;
1717c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      dbus_int32_t int32;
1727c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      double d;
1737c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      unsigned char byte;
1747c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
1757c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      type = DBUS_TYPE_INVALID;
1767c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      arg = argv[i++];
1777c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      c = strchr (arg, ':');
1787c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
1797c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      if (c == NULL)
1807c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	{
1817c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
1827c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  exit (1);
1837c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	}
1847c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
1857c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      *(c++) = 0;
1867c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
1877c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      if (arg[0] == 0 || !strcmp (arg, "string"))
1887c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	type = DBUS_TYPE_STRING;
1897c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (!strcmp (arg, "int32"))
1907c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	type = DBUS_TYPE_INT32;
1917c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (!strcmp (arg, "uint32"))
1927c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	type = DBUS_TYPE_UINT32;
1937c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (!strcmp (arg, "double"))
1947c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	type = DBUS_TYPE_DOUBLE;
1957c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (!strcmp (arg, "byte"))
1967c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	type = DBUS_TYPE_BYTE;
1977c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else if (!strcmp (arg, "boolean"))
1987c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	type = DBUS_TYPE_BOOLEAN;
1997c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      else
2007c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	{
2017c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg);
2027c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  exit (1);
2037c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	}
2047c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
205b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      /* FIXME - we are ignoring OOM returns on all these functions */
2067c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington      switch (type)
2077c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	{
2087c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	case DBUS_TYPE_BYTE:
2097c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  byte = strtoul (c, NULL, 0);
2107c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  dbus_message_iter_append_byte (&iter, byte);
2117c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  break;
2127c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2137c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	case DBUS_TYPE_DOUBLE:
2147c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  d = strtod (c, NULL);
2157c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  dbus_message_iter_append_double (&iter, d);
2167c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  break;
2177c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2187c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	case DBUS_TYPE_INT32:
2197c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  int32 = strtol (c, NULL, 0);
2207c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  dbus_message_iter_append_int32 (&iter, int32);
2217c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  break;
2227c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2237c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	case DBUS_TYPE_UINT32:
2247c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  uint32 = strtoul (c, NULL, 0);
2257c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  dbus_message_iter_append_uint32 (&iter, uint32);
2267c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  break;
2277c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2287c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	case DBUS_TYPE_STRING:
2297c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  dbus_message_iter_append_string (&iter, c);
2307c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  break;
2317c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2327c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	default:
2337c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  fprintf (stderr, "%s: Unsupported data type\n", argv[0]);
2347c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	  exit (1);
2357c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington	}
2367c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington    }
2377c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
238306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington  if (print_reply)
239306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington    {
240306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      DBusMessage *reply;
241306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington
242306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      dbus_error_init (&error);
243306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      reply = dbus_connection_send_with_reply_and_block (connection,
244306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington                                                         message, -1,
245306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington                                                         &error);
246306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      if (dbus_error_is_set (&error))
247306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington        {
248306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington          fprintf (stderr, "Error: %s\n",
249306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington                   error.message);
250306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington          exit (1);
251306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington        }
252306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington
253306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      if (reply)
254306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington        {
255306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington          print_message (reply);
256306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington          dbus_message_unref (reply);
257306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington        }
258306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington    }
259306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington  else
260306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington    {
261306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      dbus_connection_send (connection, message, NULL);
262306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington      dbus_connection_flush (connection);
263306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington    }
2647c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2657c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  dbus_message_unref (message);
2667c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2677c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  dbus_connection_disconnect (connection);
2687c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington
2697c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington  exit (0);
2707c434a849a161c4514f3759659ac7af9ecddc721Havoc Pennington}
271