From e4b271e2425a36884b5e3e70e6a32d440b41d145 Mon Sep 17 00:00:00 2001 From: Daniel Reed Date: Mon, 13 Jul 2009 14:06:26 -0400 Subject: [PATCH] Bug 2432 - Support --address option for dbus-monitor Signed-off-by: Colin Walters --- tools/dbus-monitor.1 | 5 ++++- tools/dbus-monitor.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/tools/dbus-monitor.1 b/tools/dbus-monitor.1 index f793e7e..c24c14d 100644 --- a/tools/dbus-monitor.1 +++ b/tools/dbus-monitor.1 @@ -8,7 +8,7 @@ dbus-monitor \- debug probe to print message bus messages .SH SYNOPSIS .PP .B dbus-monitor -[\-\-system | \-\-session] [\-\-profile | \-\-monitor] +[\-\-system | \-\-session | \-\-address ADDRESS] [\-\-profile | \-\-monitor] [watch expressions] .SH DESCRIPTION @@ -51,6 +51,9 @@ Monitor the system message bus. .I "--session" Monitor the session message bus. (This is the default.) .TP +.I "--address ADDRESS" +Monitor an arbitrary message bus given at ADDRESS. +.TP .I "--profile" Use the profiling output format. .TP diff --git a/tools/dbus-monitor.c b/tools/dbus-monitor.c index e7c7cf4..873108b 100644 --- a/tools/dbus-monitor.c +++ b/tools/dbus-monitor.c @@ -191,7 +191,7 @@ profile_filter_func (DBusConnection *connection, static void usage (char *name, int ecode) { - fprintf (stderr, "Usage: %s [--system | --session] [--monitor | --profile ] [watch expressions]\n", name); + fprintf (stderr, "Usage: %s [--system | --session | --address ADDRESS] [--monitor | --profile ] [watch expressions]\n", name); exit (ecode); } @@ -210,7 +210,8 @@ main (int argc, char *argv[]) DBusError error; DBusBusType type = DBUS_BUS_SESSION; DBusHandleMessageFunction filter_func = monitor_filter_func; - + char *address = NULL; + int i = 0, j = 0, numFilters = 0; char **filters = NULL; for (i = 1; i < argc; i++) @@ -221,6 +222,16 @@ main (int argc, char *argv[]) type = DBUS_BUS_SYSTEM; else if (!strcmp (arg, "--session")) type = DBUS_BUS_SESSION; + else if (!strcmp (arg, "--address")) + { + if (i+1 < argc) + { + address = argv[i+1]; + i++; + } + else + usage (argv[0], 1); + } else if (!strcmp (arg, "--help")) usage (argv[0], 0); else if (!strcmp (arg, "--monitor")) @@ -241,11 +252,44 @@ main (int argc, char *argv[]) } dbus_error_init (&error); - connection = dbus_bus_get (type, &error); + + if (address != NULL) + { + connection = dbus_connection_open (address, &error); + if (connection) + { + if (!dbus_bus_register (connection, &error)) + { + fprintf (stderr, "Failed to register connection to bus at %s: %s\n", + address, error.message); + dbus_error_free (&error); + exit (1); + } + } + } + else + connection = dbus_bus_get (type, &error); if (connection == NULL) { - fprintf (stderr, "Failed to open connection to %s message bus: %s\n", - (type == DBUS_BUS_SYSTEM) ? "system" : "session", + const char *where; + if (address != NULL) + where = address; + else + { + switch (type) + { + case DBUS_BUS_SYSTEM: + where = "system bus"; + break; + case DBUS_BUS_SESSION: + where = "session bus"; + break; + default: + where = ""; + } + } + fprintf (stderr, "Failed to open connection to %s: %s\n", + where, error.message); dbus_error_free (&error); exit (1); -- 2.7.4