2 #include "test-utils.h"
5 static dbus_bool_t already_quit = FALSE;
12 _dbus_loop_quit (loop);
18 die (const char *message)
20 fprintf (stderr, "*** %s", message);
24 static DBusHandlerResult
25 handle_echo (DBusConnection *connection,
32 _dbus_verbose ("sending reply to Echo method\n");
34 dbus_error_init (&error);
36 if (!dbus_message_get_args (message,
41 reply = dbus_message_new_error (message,
48 if (!dbus_connection_send (connection, reply, NULL))
51 dbus_message_unref (reply);
53 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
56 reply = dbus_message_new_method_return (message);
60 if (!dbus_message_append_args (reply,
65 if (!dbus_connection_send (connection, reply, NULL))
68 fprintf (stderr, "Echo service echoed string: \"%s\"\n", s);
72 dbus_message_unref (reply);
74 return DBUS_HANDLER_RESULT_HANDLED;
78 path_unregistered_func (DBusConnection *connection,
81 /* connection was finalized */
84 static DBusHandlerResult
85 path_message_func (DBusConnection *connection,
89 if (dbus_message_is_method_call (message,
90 "org.freedesktop.TestSuite",
92 return handle_echo (connection, message);
93 else if (dbus_message_is_method_call (message,
94 "org.freedesktop.TestSuite",
97 dbus_connection_disconnect (connection);
99 return DBUS_HANDLER_RESULT_HANDLED;
101 else if (dbus_message_is_method_call (message,
102 "org.freedesktop.TestSuite",
105 /* Emit the Foo signal */
108 _dbus_verbose ("emitting signal Foo\n");
110 signal = dbus_message_new_signal ("/org/freedesktop/TestSuite",
111 "org.freedesktop.TestSuite",
116 if (!dbus_message_append_args (signal,
117 DBUS_TYPE_DOUBLE, 42.6,
121 if (!dbus_connection_send (connection, signal, NULL))
124 return DBUS_HANDLER_RESULT_HANDLED;
127 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
130 static DBusObjectPathVTable
132 path_unregistered_func,
137 /* Pre-exploded path, "/org/freedesktop/TestSuite" */
138 static const char* echo_path[] = { "org", "freedesktop", "TestSuite", NULL };
140 static DBusHandlerResult
141 filter_func (DBusConnection *connection,
142 DBusMessage *message,
145 if (dbus_message_is_signal (message,
146 DBUS_INTERFACE_ORG_FREEDESKTOP_LOCAL,
149 dbus_connection_disconnect (connection);
151 return DBUS_HANDLER_RESULT_HANDLED;
155 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
163 DBusConnection *connection;
167 dbus_error_init (&error);
168 connection = dbus_bus_get (DBUS_BUS_ACTIVATION, &error);
169 if (connection == NULL)
171 fprintf (stderr, "*** Failed to open connection to activating message bus: %s\n",
173 dbus_error_free (&error);
177 loop = _dbus_loop_new ();
181 if (!test_connection_setup (loop, connection))
184 if (!dbus_connection_add_filter (connection,
185 filter_func, NULL, NULL))
188 if (!dbus_connection_register_object_path (connection,
194 result = dbus_bus_acquire_service (connection, "org.freedesktop.DBus.TestSuiteEchoService",
196 if (dbus_error_is_set (&error))
198 fprintf (stderr, "Error %s", error.message);
199 _dbus_verbose ("*** Failed to acquire service: %s\n",
201 dbus_error_free (&error);
205 _dbus_verbose ("*** Test service entering main loop\n");
206 _dbus_loop_run (loop);
208 test_connection_shutdown (loop, connection);
210 dbus_connection_remove_filter (connection, filter_func, NULL);
212 dbus_connection_unref (connection);
214 _dbus_loop_unref (loop);
219 _dbus_verbose ("*** Test service exiting\n");