summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-05-16 20:09:25 +0000
committerHavoc Pennington <hp@redhat.com>2003-05-16 20:09:25 +0000
commit306eab3e3d998472ad111146a12b7697ea96c9b9 (patch)
tree613b5918113060fb66b7122307d8a6d2c2c2344f /tools
parentce53bbd7af4488b8374aeccc2e80fb2f7eff0683 (diff)
2003-05-16 Havoc Pennington <hp@redhat.com>
* dbus/dbus-connection.c: disable verbose lock spew * tools/dbus-send.c: add --print-reply command line option * tools/dbus-print-message.h (print_message): new util function shared by dbus-send and dbus-monitor * tools/dbus-monitor.c (handler_func): exit on disconnect * dbus/dbus-transport-unix.c (do_reading): if the transport is disconnected, don't try to use the read_watch * dbus/dbus-watch.c (dbus_watch_get_enabled): assert watch != NULL so we can find this bug more easily
Diffstat (limited to 'tools')
-rw-r--r--tools/Makefile.am6
-rw-r--r--tools/dbus-monitor.c58
-rw-r--r--tools/dbus-print-message.c83
-rw-r--r--tools/dbus-print-message.h31
-rw-r--r--tools/dbus-send.111
-rw-r--r--tools/dbus-send.c40
6 files changed, 167 insertions, 62 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 60b9ddab..53f4be01 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -9,10 +9,14 @@ endif
bin_PROGRAMS=dbus-send $(GLIB_TOOLS) dbus-launch
dbus_send_SOURCES= \
+ dbus-print-message.c \
+ dbus-print-message.h \
dbus-send.c
dbus_monitor_SOURCES= \
- dbus-monitor.c
+ dbus-monitor.c \
+ dbus-print-message.c \
+ dbus-print-message.h
dbus_launch_SOURCES= \
dbus-launch.c
diff --git a/tools/dbus-monitor.c b/tools/dbus-monitor.c
index 441ead38..465515ba 100644
--- a/tools/dbus-monitor.c
+++ b/tools/dbus-monitor.c
@@ -27,6 +27,7 @@
#include <dbus/dbus.h>
/* Don't copy this, for programs outside the dbus tree it's dbus/dbus-glib.h */
#include <glib/dbus-glib.h>
+#include "dbus-print-message.h"
static DBusHandlerResult
handler_func (DBusMessageHandler *handler,
@@ -34,58 +35,11 @@ handler_func (DBusMessageHandler *handler,
DBusMessage *message,
void *user_data)
{
- DBusMessageIter iter;
-
- printf ("message name=%s; sender=%s\n", dbus_message_get_name (message),
- dbus_message_get_sender (message));
-
- dbus_message_iter_init (message, &iter);
-
- do
- {
- int type = dbus_message_iter_get_arg_type (&iter);
- char *str;
- dbus_uint32_t uint32;
- dbus_int32_t int32;
- double d;
- unsigned char byte;
-
- if (type == DBUS_TYPE_INVALID)
- break;
-
- switch (type)
- {
- case DBUS_TYPE_STRING:
- str = dbus_message_iter_get_string (&iter);
- printf ("string:%s\n", str);
- break;
-
- case DBUS_TYPE_INT32:
- int32 = dbus_message_iter_get_int32 (&iter);
- printf ("int32:%d\n", int32);
- break;
-
- case DBUS_TYPE_UINT32:
- uint32 = dbus_message_iter_get_uint32 (&iter);
- printf ("int32:%u\n", uint32);
- break;
-
- case DBUS_TYPE_DOUBLE:
- d = dbus_message_iter_get_double (&iter);
- printf ("double:%f\n", d);
- break;
-
- case DBUS_TYPE_BYTE:
- byte = dbus_message_iter_get_byte (&iter);
- printf ("byte:%d\n", byte);
- break;
-
- default:
- printf ("(unknown arg type %d)\n", type);
- break;
- }
- } while (dbus_message_iter_next (&iter));
-
+ print_message (message);
+
+ if (dbus_message_has_name (message, DBUS_MESSAGE_LOCAL_DISCONNECT))
+ exit (0);
+
return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
}
diff --git a/tools/dbus-print-message.c b/tools/dbus-print-message.c
new file mode 100644
index 00000000..fcf22b74
--- /dev/null
+++ b/tools/dbus-print-message.c
@@ -0,0 +1,83 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* dbus-print-message.h Utility function to print out a message
+ *
+ * Copyright (C) 2003 Philip Blundell <philb@gnu.org>
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+#include "dbus-print-message.h"
+
+void
+print_message (DBusMessage *message)
+{
+ DBusMessageIter iter;
+ const char *sender;
+
+ sender = dbus_message_get_sender (message);
+
+ printf ("message name=%s; sender=%s\n",
+ dbus_message_get_name (message),
+ sender ? sender : "(no sender)");
+
+ dbus_message_iter_init (message, &iter);
+
+ do
+ {
+ int type = dbus_message_iter_get_arg_type (&iter);
+ char *str;
+ dbus_uint32_t uint32;
+ dbus_int32_t int32;
+ double d;
+ unsigned char byte;
+
+ if (type == DBUS_TYPE_INVALID)
+ break;
+
+ switch (type)
+ {
+ case DBUS_TYPE_STRING:
+ str = dbus_message_iter_get_string (&iter);
+ printf ("string:%s\n", str);
+ break;
+
+ case DBUS_TYPE_INT32:
+ int32 = dbus_message_iter_get_int32 (&iter);
+ printf ("int32:%d\n", int32);
+ break;
+
+ case DBUS_TYPE_UINT32:
+ uint32 = dbus_message_iter_get_uint32 (&iter);
+ printf ("int32:%u\n", uint32);
+ break;
+
+ case DBUS_TYPE_DOUBLE:
+ d = dbus_message_iter_get_double (&iter);
+ printf ("double:%f\n", d);
+ break;
+
+ case DBUS_TYPE_BYTE:
+ byte = dbus_message_iter_get_byte (&iter);
+ printf ("byte:%d\n", byte);
+ break;
+
+ default:
+ printf ("(unknown arg type %d)\n", type);
+ break;
+ }
+ } while (dbus_message_iter_next (&iter));
+}
+
diff --git a/tools/dbus-print-message.h b/tools/dbus-print-message.h
new file mode 100644
index 00000000..c40e7667
--- /dev/null
+++ b/tools/dbus-print-message.h
@@ -0,0 +1,31 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* dbus-print-message.h Utility function to print out a message
+ *
+ * Copyright (C) 2003 Philip Blundell <philb@gnu.org>
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+#ifndef DBUS_PRINT_MESSAGE_H
+#define DBUS_PRINT_MESSAGE_H
+
+#include <stdio.h>
+#include <string.h>
+#include <dbus/dbus.h>
+
+void print_message (DBusMessage *message);
+
+#endif /* DBUS_PRINT_MESSAGE_H */
diff --git a/tools/dbus-send.1 b/tools/dbus-send.1
index 76358132..6f125c35 100644
--- a/tools/dbus-send.1
+++ b/tools/dbus-send.1
@@ -8,7 +8,7 @@ dbus-send \- Send a message to a message bus
.SH SYNOPSIS
.PP
.B dbus-send
-[\-\-session] [\-\-dest=SERVICE] <message name> [contents ...]
+[\-\-session] [\-\-dest=SERVICE] [\-\-print-reply] <message name> [contents ...]
.SH DESCRIPTION
@@ -50,11 +50,14 @@ Here is an example invocation:
.SH OPTIONS
The following options are supported:
.TP
-.I "--session"
-Use the per-login-session message bus instead of the systemwide bus.
-.TP
.I "--dest=SERVICE"
Specify the service to receive the message.
+.TP
+.I "--print-reply"
+Block for a reply to the message sent, and print any reply received.
+.TP
+.I "--session"
+Use the per-login-session message bus instead of the systemwide bus.
.SH AUTHOR
dbus-send was written by Philip Blundell.
diff --git a/tools/dbus-send.c b/tools/dbus-send.c
index a105f8b4..ea00a836 100644
--- a/tools/dbus-send.c
+++ b/tools/dbus-send.c
@@ -25,10 +25,12 @@
#include <dbus/dbus.h>
+#include "dbus-print-message.h"
+
static void
usage (char *name)
{
- fprintf (stderr, "Usage: %s [--session] [--dest=SERVICE] <message type> [contents ...]\n", name);
+ fprintf (stderr, "Usage: %s [--session] [--dest=SERVICE] [--print-reply] <message type> [contents ...]\n", name);
exit (1);
}
@@ -38,6 +40,7 @@ main (int argc, char *argv[])
DBusConnection *connection;
DBusError error;
DBusMessage *message;
+ int print_reply;
DBusMessageIter iter;
int i;
DBusBusType type = DBUS_BUS_SYSTEM;
@@ -47,12 +50,16 @@ main (int argc, char *argv[])
if (argc < 2)
usage (argv[0]);
+ print_reply = FALSE;
+
for (i = 1; i < argc && name == NULL; i++)
{
char *arg = argv[i];
- if (!strcmp (arg, "--session"))
+ if (strcmp (arg, "--session") == 0)
type = DBUS_BUS_SESSION;
+ else if (strcmp (arg, "--print-reply") == 0)
+ print_reply = TRUE;
else if (strstr (arg, "--dest=") == arg)
dest = strchr (arg, '=') + 1;
else if (arg[0] == '-')
@@ -156,9 +163,32 @@ main (int argc, char *argv[])
}
}
- dbus_connection_send (connection, message, NULL);
-
- dbus_connection_flush (connection);
+ if (print_reply)
+ {
+ DBusMessage *reply;
+
+ dbus_error_init (&error);
+ reply = dbus_connection_send_with_reply_and_block (connection,
+ message, -1,
+ &error);
+ if (dbus_error_is_set (&error))
+ {
+ fprintf (stderr, "Error: %s\n",
+ error.message);
+ exit (1);
+ }
+
+ if (reply)
+ {
+ print_message (reply);
+ dbus_message_unref (reply);
+ }
+ }
+ else
+ {
+ dbus_connection_send (connection, message, NULL);
+ dbus_connection_flush (connection);
+ }
dbus_message_unref (message);