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, "*** test-service: %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);
70 dbus_message_unref (reply);
72 return DBUS_HANDLER_RESULT_HANDLED;
76 path_unregistered_func (DBusConnection *connection,
79 /* connection was finalized */
82 static DBusHandlerResult
83 path_message_func (DBusConnection *connection,
87 if (dbus_message_is_method_call (message,
88 "org.freedesktop.TestSuite",
90 return handle_echo (connection, message);
91 else if (dbus_message_is_method_call (message,
92 "org.freedesktop.TestSuite",
95 dbus_connection_disconnect (connection);
97 return DBUS_HANDLER_RESULT_HANDLED;
99 else if (dbus_message_is_method_call (message,
100 "org.freedesktop.TestSuite",
103 /* Emit the Foo signal */
107 _dbus_verbose ("emitting signal Foo\n");
109 signal = dbus_message_new_signal ("/org/freedesktop/TestSuite",
110 "org.freedesktop.TestSuite",
116 if (!dbus_message_append_args (signal,
117 DBUS_TYPE_DOUBLE, &v_DOUBLE,
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,
138 static const char* echo_path = "/org/freedesktop/TestSuite" ;
140 static DBusHandlerResult
141 filter_func (DBusConnection *connection,
142 DBusMessage *message,
145 if (dbus_message_is_signal (message,
146 DBUS_INTERFACE_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_STARTER, &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_request_name (connection, "org.freedesktop.DBus.TestSuiteEchoService",
196 if (dbus_error_is_set (&error))
198 fprintf (stderr, "Error %s\n", 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");