-#include <dbus/dbus.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "watch.h"
+
+#include "test-utils.h"
+
+static DBusLoop *loop;
+static dbus_bool_t already_quit = FALSE;
+
+static void
+quit (void)
+{
+ if (!already_quit)
+ {
+ _dbus_loop_quit (loop);
+ already_quit = TRUE;
+ }
+}
static void
die (const char *message)
}
static DBusHandlerResult
-echo_handler (DBusMessageHandler *handler,
- DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
+handle_echo (DBusConnection *connection,
+ DBusMessage *message)
{
DBusError error;
DBusMessage *reply;
+ DBusMessageIter iter;
char *s;
dbus_error_init (&error);
if (reply == NULL)
die ("No memory\n");
- if (!dbus_message_append_string (reply, s))
+ dbus_message_append_iter_init (message, &iter);
+
+ if (!dbus_message_iter_append_string (&iter, s))
die ("No memory");
if (!dbus_connection_send (connection, reply, NULL))
return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
}
+static DBusHandlerResult
+filter_func (DBusMessageHandler *handler,
+ DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ if (dbus_message_name_is (message, "org.freedesktop.DBus.TestSuiteEcho"))
+ return handle_echo (connection, message);
+ else if (dbus_message_name_is (message, "org.freedesktop.DBus.TestSuiteExit") ||
+ dbus_message_name_is (message, DBUS_MESSAGE_LOCAL_DISCONNECT))
+ {
+ dbus_connection_disconnect (connection);
+ quit ();
+ return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+ }
+ else
+ {
+ return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+ }
+}
+
int
main (int argc,
char **argv)
DBusConnection *connection;
DBusError error;
DBusMessageHandler *handler;
- const char *to_handle[] = { "org.freedesktop.DBus.TestSuiteEcho" };
+ const char *to_handle[] = {
+ "org.freedesktop.DBus.TestSuiteEcho",
+ "org.freedesktop.DBus.TestSuiteExit",
+ DBUS_MESSAGE_LOCAL_DISCONNECT,
+ };
int result;
dbus_error_init (&error);
return 1;
}
- setup_connection (connection);
+ loop = _dbus_loop_new ();
+ if (loop == NULL)
+ die ("No memory\n");
+
+ if (!test_connection_setup (loop, connection))
+ die ("No memory\n");
- handler = dbus_message_handler_new (echo_handler, NULL, NULL);
+ handler = dbus_message_handler_new (filter_func, NULL, NULL);
if (handler == NULL)
die ("No memory");
- if (!dbus_connection_register_handler (connection, handler, to_handle, 1))
+ if (!dbus_connection_register_handler (connection, handler, to_handle,
+ _DBUS_N_ELEMENTS (to_handle)))
die ("No memory");
result = dbus_bus_acquire_service (connection, "org.freedesktop.DBus.TestSuiteEchoService",
fprintf (stderr, "Failed to acquire service: %s\n",
error.message);
dbus_error_free (&error);
- return 1;
+ exit (1);
}
-
- do_mainloop ();
- dbus_connection_unref (connection);
+ _dbus_verbose ("*** Test service entering main loop\n");
+ _dbus_loop_run (loop);
+ test_connection_shutdown (loop, connection);
+
+ dbus_connection_unref (connection);
+
dbus_message_handler_unref (handler);
+
+ _dbus_loop_unref (loop);
+ loop = NULL;
dbus_shutdown ();
+
+ _dbus_verbose ("*** Test service exiting\n");
return 0;
}