diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | bus/driver.c | 82 | ||||
-rw-r--r-- | doc/dbus-specification.xml | 5 |
3 files changed, 92 insertions, 0 deletions
@@ -1,5 +1,10 @@ 2005-02-12 Havoc Pennington <hp@redhat.com> + * bus/driver.c (bus_driver_handle_introspect): add introspection + for bus driver + +2005-02-12 Havoc Pennington <hp@redhat.com> + * bus/driver.c: put the signature of each bus driver method in the table of handlers and check it on incoming calls; this isn't really useful, but going to add introspect support in a minute. diff --git a/bus/driver.c b/bus/driver.c index 2eb505c1..7a716824 100644 --- a/bus/driver.c +++ b/bus/driver.c @@ -1094,6 +1094,7 @@ bus_driver_handle_introspect (DBusConnection *connection, DBusString xml; DBusMessage *reply; const char *v_STRING; + int i; _dbus_verbose ("Introspect() on bus driver\n"); @@ -1128,6 +1129,87 @@ bus_driver_handle_introspect (DBusConnection *connection, goto oom; if (!_dbus_string_append (&xml, " </interface>\n")) goto oom; + + if (!_dbus_string_append_printf (&xml, " <interface name=\"%s\">\n", + DBUS_INTERFACE_ORG_FREEDESKTOP_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; + + /* This hacky mess can probably get mopped up eventually when the + * introspection format is related to the signature format + */ + + if (strcmp (message_handlers[i].in_args, "") == 0) + ; + else if (strcmp (message_handlers[i].in_args, + DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING) == 0) + { + if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"string\"/>\n")) + goto oom; + if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"uint32\"/>\n")) + goto oom; + } + else if (strcmp (message_handlers[i].in_args, + DBUS_TYPE_STRING_AS_STRING) == 0) + { + if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"string\"/>\n")) + goto oom; + } + else + { + _dbus_warn ("Lack introspection code for in sig '%s'\n", + message_handlers[i].in_args); + _dbus_assert_not_reached ("FIXME introspection missing"); + } + + if (strcmp (message_handlers[i].out_args, "") == 0) + ; + else if (strcmp (message_handlers[i].out_args, + DBUS_TYPE_STRING_AS_STRING) == 0) + { + if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"string\"/>\n")) + goto oom; + } + else if (strcmp (message_handlers[i].out_args, + DBUS_TYPE_BOOLEAN_AS_STRING) == 0) + { + if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"boolean\"/>\n")) + goto oom; + } + else if (strcmp (message_handlers[i].out_args, + DBUS_TYPE_UINT32_AS_STRING) == 0) + { + if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"uint32\"/>\n")) + goto oom; + } + else if (strcmp (message_handlers[i].out_args, + DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING) == 0) + { + /* FIXME introspection format doesn't handle arrays yet */ + if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"string\"/>\n")) + goto oom; + } + else + { + _dbus_warn ("Lack introspection code for out sig '%s'\n", + message_handlers[i].out_args); + _dbus_assert_not_reached ("FIXME introspection missing"); + } + + if (!_dbus_string_append (&xml, " </method>\n")) + goto oom; + + ++i; + } + + if (!_dbus_string_append (&xml, " </interface>\n")) + goto oom; if (!_dbus_string_append (&xml, "</node>\n")) goto oom; diff --git a/doc/dbus-specification.xml b/doc/dbus-specification.xml index a9492b96..3d6a207f 100644 --- a/doc/dbus-specification.xml +++ b/doc/dbus-specification.xml @@ -2374,6 +2374,11 @@ the deprecation status of the interface. </para> </listitem> + <listitem> + <para> + The "name" attribute on arguments is optional. + </para> + </listitem> </itemizedlist> </para> |