* bus/driver.c:

(bus_driver_generate_introspect_string): New method for populating
  a DBusString with the introspect data
  (bus_driver_handle_introspect): Move introspect generation code to
  bus_driver_generate_introspect_string

* bus/main.c:
  (introspect): New function which prints out the intropect data and
  exits
  (main): Add a --introspect switch
This commit is contained in:
John (J5) Palmieri 2006-09-06 21:16:12 +00:00
parent e4f3d0ca17
commit 61316dd897
4 changed files with 136 additions and 84 deletions

View file

@ -1,3 +1,16 @@
2006-09-06 John (J5) Palmieri <johnp@redhat.com>
* bus/driver.c:
(bus_driver_generate_introspect_string): New method for populating
a DBusString with the introspect data
(bus_driver_handle_introspect): Move introspect generation code to
bus_driver_generate_introspect_string
* bus/main.c:
(introspect): New function which prints out the intropect data and
exits
(main): Add a --introspect switch
2006-09-06 John (J5) Palmieri <johnp@redhat.com>
* doc/TODO: Removed dtd publishing item.

View file

@ -1493,6 +1493,96 @@ write_args_for_direction (DBusString *xml,
return FALSE;
}
dbus_bool_t
bus_driver_generate_introspect_string (DBusString *xml)
{
int i;
if (!_dbus_string_append (xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE))
return FALSE;
if (!_dbus_string_append (xml, "<node>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_INTROSPECTABLE))
return FALSE;
if (!_dbus_string_append (xml, " <method name=\"Introspect\">\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
return FALSE;
if (!_dbus_string_append (xml, " </method>\n"))
return FALSE;
if (!_dbus_string_append (xml, " </interface>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <interface name=\"%s\">\n",
DBUS_INTERFACE_DBUS))
return FALSE;
i = 0;
while (i < _DBUS_N_ELEMENTS (message_handlers))
{
if (!_dbus_string_append_printf (xml, " <method name=\"%s\">\n",
message_handlers[i].name))
return FALSE;
if (!write_args_for_direction (xml, message_handlers[i].in_args, TRUE))
return FALSE;
if (!write_args_for_direction (xml, message_handlers[i].out_args, FALSE))
return FALSE;
if (!_dbus_string_append (xml, " </method>\n"))
return FALSE;
++i;
}
if (!_dbus_string_append_printf (xml, " <signal name=\"NameOwnerChanged\">\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " </signal>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <signal name=\"NameLost\">\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " </signal>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <signal name=\"NameAcquired\">\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " <arg type=\"s\"/>\n"))
return FALSE;
if (!_dbus_string_append_printf (xml, " </signal>\n"))
return FALSE;
if (!_dbus_string_append (xml, " </interface>\n"))
return FALSE;
if (!_dbus_string_append (xml, "</node>\n"))
return FALSE;
return TRUE;
}
static dbus_bool_t
bus_driver_handle_introspect (DBusConnection *connection,
BusTransaction *transaction,
@ -1502,7 +1592,6 @@ bus_driver_handle_introspect (DBusConnection *connection,
DBusString xml;
DBusMessage *reply;
const char *v_STRING;
int i;
_dbus_verbose ("Introspect() on bus driver\n");
@ -1523,95 +1612,15 @@ bus_driver_handle_introspect (DBusConnection *connection,
return FALSE;
}
if (!_dbus_string_append (&xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE))
goto oom;
if (!_dbus_string_append (&xml, "<node>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_INTROSPECTABLE))
goto oom;
if (!_dbus_string_append (&xml, " <method name=\"Introspect\">\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
goto oom;
if (!_dbus_string_append (&xml, " </method>\n"))
goto oom;
if (!_dbus_string_append (&xml, " </interface>\n"))
if (!bus_driver_generate_introspect_string (&xml))
goto oom;
if (!_dbus_string_append_printf (&xml, " <interface name=\"%s\">\n",
DBUS_INTERFACE_DBUS))
goto oom;
i = 0;
while (i < _DBUS_N_ELEMENTS (message_handlers))
{
if (!_dbus_string_append_printf (&xml, " <method name=\"%s\">\n",
message_handlers[i].name))
goto oom;
if (!write_args_for_direction (&xml, message_handlers[i].in_args, TRUE))
goto oom;
if (!write_args_for_direction (&xml, message_handlers[i].out_args, FALSE))
goto oom;
if (!_dbus_string_append (&xml, " </method>\n"))
goto oom;
++i;
}
if (!_dbus_string_append_printf (&xml, " <signal name=\"NameOwnerChanged\">\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " </signal>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <signal name=\"NameLost\">\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " </signal>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <signal name=\"NameAcquired\">\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
goto oom;
if (!_dbus_string_append_printf (&xml, " </signal>\n"))
goto oom;
if (!_dbus_string_append (&xml, " </interface>\n"))
goto oom;
if (!_dbus_string_append (&xml, "</node>\n"))
goto oom;
v_STRING = _dbus_string_get_const_data (&xml);
reply = dbus_message_new_method_return (message);
if (reply == NULL)
goto oom;
v_STRING = _dbus_string_get_const_data (&xml);
if (! dbus_message_append_args (reply,
DBUS_TYPE_STRING, &v_STRING,
DBUS_TYPE_INVALID))

View file

@ -45,5 +45,8 @@ dbus_bool_t bus_driver_send_service_owner_changed (const char *service_name
const char *new_owner,
BusTransaction *transaction,
DBusError *error);
dbus_bool_t bus_driver_generate_introspect_string (DBusString *xml);
#endif /* BUS_DRIVER_H */

View file

@ -21,6 +21,7 @@
*
*/
#include "bus.h"
#include "driver.h"
#include <dbus/dbus-internals.h>
#include <dbus/dbus-watch.h>
#include <stdio.h>
@ -66,7 +67,7 @@ signal_handler (int sig)
static void
usage (void)
{
fprintf (stderr, DAEMON_NAME " [--version] [--session] [--system] [--config-file=FILE] [--print-address[=DESCRIPTOR]] [--print-pid[=DESCRIPTOR]] [--fork] [--nofork]\n");
fprintf (stderr, DAEMON_NAME " [--version] [--session] [--system] [--config-file=FILE] [--print-address[=DESCRIPTOR]] [--print-pid[=DESCRIPTOR]] [--fork] [--nofork] [--introspect]\n");
exit (1);
}
@ -81,6 +82,30 @@ version (void)
exit (0);
}
static void
introspect (void)
{
DBusString xml;
const char *v_STRING;
if (!_dbus_string_init (&xml))
goto oom;
if (!bus_driver_generate_introspect_string (&xml))
{
_dbus_string_free (&xml);
goto oom;
}
v_STRING = _dbus_string_get_const_data (&xml);
printf ("%s\n", v_STRING);
exit (0);
oom:
_dbus_warn ("Can not introspect - Out of memory\n");
exit (1);
}
static void
check_two_config_files (const DBusString *config_file,
const char *extra_arg)
@ -231,6 +256,8 @@ main (int argc, char **argv)
usage ();
else if (strcmp (arg, "--version") == 0)
version ();
else if (strcmp (arg, "--introspect") == 0)
introspect ();
else if (strcmp (arg, "--nofork") == 0)
force_fork = FORK_NEVER;
else if (strcmp (arg, "--fork") == 0)