mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-01 09:07:58 +02:00
* 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:
parent
e4f3d0ca17
commit
61316dd897
4 changed files with 136 additions and 84 deletions
13
ChangeLog
13
ChangeLog
|
|
@ -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.
|
||||
|
|
|
|||
175
bus/driver.c
175
bus/driver.c
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
29
bus/main.c
29
bus/main.c
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue