summaryrefslogtreecommitdiff
path: root/test/test-service.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-service.c')
-rw-r--r--test/test-service.c84
1 files changed, 82 insertions, 2 deletions
diff --git a/test/test-service.c b/test/test-service.c
index a4dff0b3..49048f66 100644
--- a/test/test-service.c
+++ b/test/test-service.c
@@ -1,15 +1,74 @@
#include <dbus/dbus.h>
#include <stdio.h>
+#include <stdlib.h>
#include "watch.h"
+static void
+die (const char *message)
+{
+ fprintf (stderr, "%s", message);
+ exit (1);
+}
+
+static DBusHandlerResult
+echo_handler (DBusMessageHandler *handler,
+ DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ DBusError error;
+ DBusMessage *reply;
+ char *s;
+
+ dbus_error_init (&error);
+
+ if (!dbus_message_get_args (message,
+ &error,
+ DBUS_TYPE_STRING, &s,
+ DBUS_TYPE_INVALID))
+ {
+ reply = dbus_message_new_error_reply (message,
+ error.name,
+ error.message);
+
+ if (reply == NULL)
+ die ("No memory\n");
+
+ if (!dbus_connection_send (connection, reply, NULL))
+ die ("No memory\n");
+
+ dbus_message_unref (reply);
+
+ return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+ }
+
+ reply = dbus_message_new_reply (message);
+ if (reply == NULL)
+ die ("No memory\n");
+
+ if (!dbus_message_append_string (reply, s))
+ die ("No memory");
+
+ if (!dbus_connection_send (connection, reply, NULL))
+ die ("No memory\n");
+
+ dbus_free (s);
+
+ dbus_message_unref (reply);
+
+ return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+}
+
int
main (int argc,
char **argv)
{
DBusConnection *connection;
DBusError error;
- DBusMessage *message;
-
+ DBusMessageHandler *handler;
+ const char *to_handle[] = { "org.freedesktop.DBus.TestSuiteEcho" };
+ int result;
+
dbus_error_init (&error);
connection = dbus_bus_get (DBUS_BUS_ACTIVATION, &error);
if (connection == NULL)
@@ -21,10 +80,31 @@ main (int argc,
}
setup_connection (connection);
+
+ handler = dbus_message_handler_new (echo_handler, NULL, NULL);
+ if (handler == NULL)
+ die ("No memory");
+
+ if (!dbus_connection_register_handler (connection, handler, to_handle, 1))
+ die ("No memory");
+
+ result = dbus_bus_acquire_service (connection, "org.freedesktop.DBus.TestSuiteEchoService",
+ 0, &error);
+ if (dbus_error_is_set (&error))
+ {
+ fprintf (stderr, "Failed to acquire service: %s\n",
+ error.message);
+ dbus_error_free (&error);
+ return 1;
+ }
do_mainloop ();
dbus_connection_unref (connection);
+
+ dbus_message_handler_unref (handler);
+
+ dbus_shutdown ();
return 0;
}