2005-02-12 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Sat, 12 Feb 2005 20:13:08 +0000 (20:13 +0000)
committerHavoc Pennington <hp@redhat.com>
Sat, 12 Feb 2005 20:13:08 +0000 (20:13 +0000)
* bus/driver.c (bus_driver_handle_introspect): add introspection
for bus driver

ChangeLog
bus/driver.c
doc/dbus-specification.xml

index ad384a7..d358180 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 2eb505c..7a71682 100644 (file)
@@ -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;
index a9492b9..3d6a207 100644 (file)
             the deprecation status of the interface.
           </para>
         </listitem>
+        <listitem>
+          <para>
+            The "name" attribute on arguments is optional.
+          </para>
+        </listitem>
       </itemizedlist>
     </para>