2003-04-03 Havoc Pennington <hp@redhat.com>
[platform/upstream/dbus.git] / test / test-service.c
1 #include <dbus/dbus.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "watch.h"
5
6 static void
7 die (const char *message)
8 {
9   fprintf (stderr, "%s", message);
10   exit (1);
11 }
12
13 static DBusHandlerResult
14 echo_handler (DBusMessageHandler *handler,
15               DBusConnection     *connection,
16               DBusMessage        *message,
17               void               *user_data)
18 {
19   DBusError error;
20   DBusMessage *reply;
21   char *s;
22   
23   dbus_error_init (&error);
24   
25   if (!dbus_message_get_args (message,
26                               &error,
27                               DBUS_TYPE_STRING, &s,
28                               DBUS_TYPE_INVALID))
29     {
30       reply = dbus_message_new_error_reply (message,
31                                             error.name,
32                                             error.message);
33
34       if (reply == NULL)
35         die ("No memory\n");
36
37       if (!dbus_connection_send (connection, reply, NULL))
38         die ("No memory\n");
39
40       dbus_message_unref (reply);
41
42       return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
43     }
44
45   reply = dbus_message_new_reply (message);
46   if (reply == NULL)
47     die ("No memory\n");
48
49   if (!dbus_message_append_string (reply, s))
50     die ("No memory");
51
52   if (!dbus_connection_send (connection, reply, NULL))
53     die ("No memory\n");
54   
55   dbus_free (s);
56   
57   dbus_message_unref (reply);
58     
59   return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
60 }
61
62 int
63 main (int    argc,
64       char **argv)
65 {
66   DBusConnection *connection;
67   DBusError error;
68   DBusMessageHandler *handler;
69   const char *to_handle[] = { "org.freedesktop.DBus.TestSuiteEcho" };
70   int result;
71   
72   dbus_error_init (&error);
73   connection = dbus_bus_get (DBUS_BUS_ACTIVATION, &error);
74   if (connection == NULL)
75     {
76       fprintf (stderr, "Failed to open connection to activating message bus: %s\n",
77                error.message);
78       dbus_error_free (&error);
79       return 1;
80     }
81
82   setup_connection (connection);
83
84   handler = dbus_message_handler_new (echo_handler, NULL, NULL);
85   if (handler == NULL)
86     die ("No memory");
87   
88   if (!dbus_connection_register_handler (connection, handler, to_handle, 1))
89     die ("No memory");
90
91   result = dbus_bus_acquire_service (connection, "org.freedesktop.DBus.TestSuiteEchoService",
92                                      0, &error);
93   if (dbus_error_is_set (&error))
94     {
95       fprintf (stderr, "Failed to acquire service: %s\n",
96                error.message);
97       dbus_error_free (&error);
98       return 1;
99     }
100   
101   do_mainloop ();
102
103   dbus_connection_unref (connection);
104
105   dbus_message_handler_unref (handler);
106   
107   dbus_shutdown ();
108   
109   return 0;
110 }