* bus/driver.c:
authorJohn (J5) Palmieri <johnp@redhat.com>
Wed, 6 Sep 2006 21:16:12 +0000 (21:16 +0000)
committerJohn (J5) Palmieri <johnp@redhat.com>
Wed, 6 Sep 2006 21:16:12 +0000 (21:16 +0000)
  (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

ChangeLog
bus/driver.c
bus/driver.h
bus/main.c

index 5f49078..247f3c9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 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.  
        It seems the dtd has already been added at
        http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd
index 1a2c050..6908433 100644 (file)
@@ -1493,125 +1493,134 @@ write_args_for_direction (DBusString *xml,
   return FALSE;
 }
 
-static dbus_bool_t
-bus_driver_handle_introspect (DBusConnection *connection,
-                              BusTransaction *transaction,
-                              DBusMessage    *message,
-                              DBusError      *error)
+dbus_bool_t
+bus_driver_generate_introspect_string (DBusString *xml)
 {
-  DBusString xml;
-  DBusMessage *reply;
-  const char *v_STRING;
   int i;
 
-  _dbus_verbose ("Introspect() on bus driver\n");
-  
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-
-  reply = NULL;
-
-  if (! dbus_message_get_args (message, error,
-                              DBUS_TYPE_INVALID))
-    {
-      _DBUS_ASSERT_ERROR_IS_SET (error);
-      return FALSE;
-    }
-
-  if (!_dbus_string_init (&xml))
-    {
-      BUS_SET_OOM (error);
-      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"))
-    goto oom;
+  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",
+  if (!_dbus_string_append_printf (xml, "  <interface name=\"%s\">\n",
                                    DBUS_INTERFACE_DBUS))
-    goto oom;
+    return FALSE;
 
   i = 0;
   while (i < _DBUS_N_ELEMENTS (message_handlers))
     {
          
-      if (!_dbus_string_append_printf (&xml, "    <method name=\"%s\">\n",
+      if (!_dbus_string_append_printf (xml, "    <method name=\"%s\">\n",
                                        message_handlers[i].name))
-        goto oom;
+        return FALSE;
 
-      if (!write_args_for_direction (&xml, message_handlers[i].in_args, TRUE))
-       goto oom;
+      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))
-       goto oom;
+      if (!write_args_for_direction (xml, message_handlers[i].out_args, FALSE))
+       return FALSE;
 
-      if (!_dbus_string_append (&xml, "    </method>\n"))
-       goto oom;
+      if (!_dbus_string_append (xml, "    </method>\n"))
+       return FALSE;
       
       ++i;
     }
 
-  if (!_dbus_string_append_printf (&xml, "    <signal name=\"NameOwnerChanged\">\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "    <signal name=\"NameOwnerChanged\">\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "      <arg type=\"s\"/>\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "      <arg type=\"s\"/>\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "      <arg type=\"s\"/>\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "    </signal>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "    </signal>\n"))
+    return FALSE;
 
 
 
-  if (!_dbus_string_append_printf (&xml, "    <signal name=\"NameLost\">\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "    <signal name=\"NameLost\">\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "      <arg type=\"s\"/>\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "    </signal>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "    </signal>\n"))
+    return FALSE;
 
 
 
-  if (!_dbus_string_append_printf (&xml, "    <signal name=\"NameAcquired\">\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "    <signal name=\"NameAcquired\">\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
-    goto oom;
+  if (!_dbus_string_append_printf (xml, "      <arg type=\"s\"/>\n"))
+    return FALSE;
   
-  if (!_dbus_string_append_printf (&xml, "    </signal>\n"))
-    goto oom;
-
+  if (!_dbus_string_append_printf (xml, "    </signal>\n"))
+    return FALSE;
 
+  if (!_dbus_string_append (xml, "  </interface>\n"))
+    return FALSE;
   
-  if (!_dbus_string_append (&xml, "  </interface>\n"))
-    goto oom;
+  if (!_dbus_string_append (xml, "</node>\n"))
+    return FALSE;
+
+  return TRUE;
+}
+
+static dbus_bool_t
+bus_driver_handle_introspect (DBusConnection *connection,
+                              BusTransaction *transaction,
+                              DBusMessage    *message,
+                              DBusError      *error)
+{
+  DBusString xml;
+  DBusMessage *reply;
+  const char *v_STRING;
+
+  _dbus_verbose ("Introspect() on bus driver\n");
   
-  if (!_dbus_string_append (&xml, "</node>\n"))
+  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
+  reply = NULL;
+
+  if (! dbus_message_get_args (message, error,
+                              DBUS_TYPE_INVALID))
+    {
+      _DBUS_ASSERT_ERROR_IS_SET (error);
+      return FALSE;
+    }
+
+  if (!_dbus_string_init (&xml))
+    {
+      BUS_SET_OOM (error);
+      return FALSE;
+    }
+
+  if (!bus_driver_generate_introspect_string (&xml))
     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))
index bc43052..39bff67 100644 (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 */
index ba13983..b4ace1e 100644 (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);
 }
 
@@ -82,6 +83,30 @@ version (void)
 }
 
 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)