1dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h>
298572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington
398572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington#include "test-utils.h"
4fd049c345564b36a2b5b83d00e6e3c675d04309fRalf Habacker#ifdef HAVE_UNISTD_H
5e5310abd6cbc4c2e1a9df54f097d6642ad0833c6Colin Walters#include <unistd.h>
6fd049c345564b36a2b5b83d00e6e3c675d04309fRalf Habacker#endif
798572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington
898572905e60cac7ea971aa0830e2a629bfff208dHavoc Penningtonstatic DBusLoop *loop;
951781f541094a4936d47119cd62682e0431c41e9Havoc Penningtonstatic dbus_bool_t already_quit = FALSE;
107020b573764bb86551d329e867c2e87172424c9bHavoc Penningtonstatic dbus_bool_t hello_from_self_reply_received = FALSE;
11fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
12fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonstatic void
13fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonquit (void)
14fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington{
15fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington  if (!already_quit)
16fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington    {
17fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington      _dbus_loop_quit (loop);
18fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington      already_quit = TRUE;
19fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington    }
20fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington}
21eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington
22f216e81432ddf04889202c33a6e68113f94d7611Havoc Penningtonstatic void
23f216e81432ddf04889202c33a6e68113f94d7611Havoc Penningtondie (const char *message)
24f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington{
25f7beca572b341c4cabf2f97a9f0d6d763e6acb40Havoc Pennington  fprintf (stderr, "*** test-service: %s", message);
26f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  exit (1);
27f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington}
28f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
29a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (Jstatic void
30a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (Jcheck_hello_from_self_reply (DBusPendingCall *pcall,
31a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                             void *user_data)
32a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J{
33a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusMessage *reply;
34c1091cbbd2477699dc16f8c8e3d15fea2f68d603John (J  DBusMessage *echo_message, *echo_reply = NULL;
35a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusError error;
36a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusConnection *connection;
37a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
38a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  int type;
39a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
40a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  dbus_error_init (&error);
41a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
42a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  connection = dbus_bus_get (DBUS_BUS_STARTER, &error);
43a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  if (connection == NULL)
44a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    {
45a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      fprintf (stderr, "*** Failed to open connection to activating message bus: %s\n",
46a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J               error.message);
47a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      dbus_error_free (&error);
48a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      die("no memory");
49a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    }
50a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
51a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
52a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  echo_message = (DBusMessage *)user_data;
53a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
54a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  reply = dbus_pending_call_steal_reply (pcall);
55a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
56a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  type = dbus_message_get_type (reply);
57a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
58a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  if (type == DBUS_MESSAGE_TYPE_METHOD_RETURN)
59a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    {
60a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      const char *s;
617020b573764bb86551d329e867c2e87172424c9bHavoc Pennington      printf ("Reply from HelloFromSelf received\n");
62a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
63a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      if (!dbus_message_get_args (echo_message,
64a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                              &error,
65a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                              DBUS_TYPE_STRING, &s,
66a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                              DBUS_TYPE_INVALID))
67a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        {
68a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            echo_reply = dbus_message_new_error (echo_message,
69a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                      error.name,
70a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                      error.message);
71a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
72a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            if (echo_reply == NULL)
73a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J              die ("No memory\n");
74a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
75a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        }
76a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      else
77a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        {
78a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J          echo_reply = dbus_message_new_method_return (echo_message);
79a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J          if (echo_reply == NULL)
80a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            die ("No memory\n");
81a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
82a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J          if (!dbus_message_append_args (echo_reply,
83a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                 DBUS_TYPE_STRING, &s,
84a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                 DBUS_TYPE_INVALID))
85a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            die ("No memory");
86a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        }
87a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
88a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      if (!dbus_connection_send (connection, echo_reply, NULL))
89a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        die ("No memory\n");
90a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
91a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      dbus_message_unref (echo_reply);
92a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    }
93a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  else if (type == DBUS_MESSAGE_TYPE_ERROR)
94a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    {
95a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      dbus_set_error_from_message (&error, reply);
96a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      printf ("Error type in reply: %s\n", error.message);
97a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
98a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      if (strcmp (error.name, DBUS_ERROR_NO_MEMORY) != 0)
99a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        {
100a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            echo_reply = dbus_message_new_error (echo_reply,
101a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                      error.name,
102a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                      error.message);
103a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
104a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            if (echo_reply == NULL)
105a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J              die ("No memory\n");
106a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
107a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            if (!dbus_connection_send (connection, echo_reply, NULL))
108a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J              die ("No memory\n");
109a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
110a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J            dbus_message_unref (echo_reply);
111a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        }
112a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      dbus_error_free (&error);
113a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    }
114a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  else
1157020b573764bb86551d329e867c2e87172424c9bHavoc Pennington     _dbus_assert_not_reached ("Unexpected message received\n");
116a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
1177020b573764bb86551d329e867c2e87172424c9bHavoc Pennington  hello_from_self_reply_received = TRUE;
118a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
119a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  dbus_message_unref (reply);
120a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  dbus_message_unref (echo_message);
121a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  dbus_pending_call_unref (pcall);
1221eae184450a585f10c8988613e0f7259e1d6066aJohn (J  dbus_connection_unref (connection);
123a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J}
124a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
125a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (Jstatic DBusHandlerResult
126a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (Jhandle_run_hello_from_self (DBusConnection     *connection,
127a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                               DBusMessage        *message)
128a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J{
129a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusError error;
130a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusMessage *reply, *self_message;
131a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusPendingCall *pcall;
132a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  char *s;
133a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
134a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  _dbus_verbose ("sending reply to Echo method\n");
135a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
136a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  dbus_error_init (&error);
137a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
138a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  if (!dbus_message_get_args (message,
139a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                              &error,
140a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                              DBUS_TYPE_STRING, &s,
141a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                              DBUS_TYPE_INVALID))
142a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    {
143a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      reply = dbus_message_new_error (message,
144a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                      error.name,
145a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                      error.message);
146a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
147a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      if (reply == NULL)
148a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        die ("No memory\n");
149a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
150a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      if (!dbus_connection_send (connection, reply, NULL))
151a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        die ("No memory\n");
152a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
153a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      dbus_message_unref (reply);
154a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
155a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
156a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    }
157a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    printf ("Sending HelloFromSelf\n");
158a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
159a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J _dbus_verbose ("*** Sending message to self\n");
160a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J self_message = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuiteEchoService",
161a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                          "/org/freedesktop/TestSuite",
162a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                          "org.freedesktop.TestSuite",
163a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                          "HelloFromSelf");
164a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
165a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  if (self_message == NULL)
166a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    die ("No memory");
167a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
168a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  if (!dbus_connection_send_with_reply (connection, self_message, &pcall, -1))
169a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    die("No memory");
170a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
171a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  dbus_message_ref (message);
172a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  if (!dbus_pending_call_set_notify (pcall, check_hello_from_self_reply, (void *)message, NULL))
173a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    die("No memory");
174a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
175a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  printf ("Sent HelloFromSelf\n");
176a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  return DBUS_HANDLER_RESULT_HANDLED;
177a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J}
178a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
179f216e81432ddf04889202c33a6e68113f94d7611Havoc Penningtonstatic DBusHandlerResult
180a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Penningtonhandle_echo (DBusConnection     *connection,
181a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington             DBusMessage        *message)
182f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington{
183f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  DBusError error;
184f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  DBusMessage *reply;
185f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  char *s;
18675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
18775742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  _dbus_verbose ("sending reply to Echo method\n");
188f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
189f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  dbus_error_init (&error);
190f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
191f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  if (!dbus_message_get_args (message,
192f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington                              &error,
193f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington                              DBUS_TYPE_STRING, &s,
194f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington                              DBUS_TYPE_INVALID))
195f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    {
196b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington      reply = dbus_message_new_error (message,
197b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington                                      error.name,
198b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington                                      error.message);
199f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
200f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington      if (reply == NULL)
201f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington        die ("No memory\n");
202f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
203f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington      if (!dbus_connection_send (connection, reply, NULL))
204f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington        die ("No memory\n");
205f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
206f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington      dbus_message_unref (reply);
207f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
2085c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington      return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
209f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    }
210f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
211b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington  reply = dbus_message_new_method_return (message);
212f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  if (reply == NULL)
213f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    die ("No memory\n");
214c5020ac870c5990a36c3576453cc23431213e8bfAlexander Larsson
215d6e1b2adb3d8e51ce1bb47295cef12d9fe1a15a8Havoc Pennington  if (!dbus_message_append_args (reply,
2169c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                 DBUS_TYPE_STRING, &s,
217d6e1b2adb3d8e51ce1bb47295cef12d9fe1a15a8Havoc Pennington                                 DBUS_TYPE_INVALID))
218f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    die ("No memory");
219d6e1b2adb3d8e51ce1bb47295cef12d9fe1a15a8Havoc Pennington
220f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  if (!dbus_connection_send (connection, reply, NULL))
221f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    die ("No memory\n");
222d6e1b2adb3d8e51ce1bb47295cef12d9fe1a15a8Havoc Pennington
223d6e1b2adb3d8e51ce1bb47295cef12d9fe1a15a8Havoc Pennington  fprintf (stderr, "Echo service echoed string: \"%s\"\n", s);
224f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
225f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  dbus_message_unref (reply);
226f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
227d6e1b2adb3d8e51ce1bb47295cef12d9fe1a15a8Havoc Pennington  return DBUS_HANDLER_RESULT_HANDLED;
228f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington}
229f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
230c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnantstatic DBusHandlerResult
231c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnanthandle_delay_echo (DBusConnection     *connection,
232c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                   DBusMessage        *message)
233c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant{
234c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  DBusError error;
235c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  DBusMessage *reply;
236c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  char *s;
237c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
238c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  _dbus_verbose ("sleeping for a short time\n");
239c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
240fd049c345564b36a2b5b83d00e6e3c675d04309fRalf Habacker  _dbus_sleep_milliseconds (50);
241c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
242c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  _dbus_verbose ("sending reply to DelayEcho method\n");
243c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
244c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  dbus_error_init (&error);
245c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
246c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  if (!dbus_message_get_args (message,
247c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                              &error,
248c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                              DBUS_TYPE_STRING, &s,
249c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                              DBUS_TYPE_INVALID))
250c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant    {
251c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant      reply = dbus_message_new_error (message,
252c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                                      error.name,
253c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                                      error.message);
254c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
255c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant      if (reply == NULL)
256c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant        die ("No memory\n");
257c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
258c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant      if (!dbus_connection_send (connection, reply, NULL))
259c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant        die ("No memory\n");
260c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
261c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant      dbus_message_unref (reply);
262c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
263c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant      return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
264c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant    }
265c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
266c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  reply = dbus_message_new_method_return (message);
267c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  if (reply == NULL)
268c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant    die ("No memory\n");
269c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
270c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  if (!dbus_message_append_args (reply,
271c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                                 DBUS_TYPE_STRING, &s,
272c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                                 DBUS_TYPE_INVALID))
273c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant    die ("No memory");
274c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
275c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  if (!dbus_connection_send (connection, reply, NULL))
276c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant    die ("No memory\n");
277c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
278c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  fprintf (stderr, "DelayEcho service echoed string: \"%s\"\n", s);
279c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
280c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  dbus_message_unref (reply);
281c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
282c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  return DBUS_HANDLER_RESULT_HANDLED;
283c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant}
284c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
285c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant
28675742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonstatic void
28775742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonpath_unregistered_func (DBusConnection  *connection,
28875742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                        void            *user_data)
28975742242000e782719bc1656f0a7da72b059e88eHavoc Pennington{
29075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  /* connection was finalized */
29175742242000e782719bc1656f0a7da72b059e88eHavoc Pennington}
29275742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
293a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Penningtonstatic DBusHandlerResult
29475742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonpath_message_func (DBusConnection  *connection,
29575742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                   DBusMessage     *message,
29675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                   void            *user_data)
29775742242000e782719bc1656f0a7da72b059e88eHavoc Pennington{
29868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington  if (dbus_message_is_method_call (message,
29968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington                                   "org.freedesktop.TestSuite",
30068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington                                   "Echo"))
301a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington    return handle_echo (connection, message);
30268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington  else if (dbus_message_is_method_call (message,
30368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington                                        "org.freedesktop.TestSuite",
304c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                                        "DelayEcho"))
305c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant    return handle_delay_echo (connection, message);
306c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant  else if (dbus_message_is_method_call (message,
307c1f165261afcc3bafa9b24ff916bb231628e3782Scott James Remnant                                        "org.freedesktop.TestSuite",
30875742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                        "Exit"))
30975742242000e782719bc1656f0a7da72b059e88eHavoc Pennington    {
31075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      quit ();
31175742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      return DBUS_HANDLER_RESULT_HANDLED;
31275742242000e782719bc1656f0a7da72b059e88eHavoc Pennington    }
31375742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  else if (dbus_message_is_method_call (message,
31475742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                        "org.freedesktop.TestSuite",
31575742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                        "EmitFoo"))
31675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington    {
31775742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      /* Emit the Foo signal */
31875742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      DBusMessage *signal;
3199c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington      double v_DOUBLE;
32075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
32175742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      _dbus_verbose ("emitting signal Foo\n");
32275742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
32375742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      signal = dbus_message_new_signal ("/org/freedesktop/TestSuite",
32475742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                        "org.freedesktop.TestSuite",
32575742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                        "Foo");
32675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      if (signal == NULL)
32775742242000e782719bc1656f0a7da72b059e88eHavoc Pennington        die ("No memory\n");
3289c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
3299c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington      v_DOUBLE = 42.6;
33075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      if (!dbus_message_append_args (signal,
3319c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                     DBUS_TYPE_DOUBLE, &v_DOUBLE,
33275742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                     DBUS_TYPE_INVALID))
33375742242000e782719bc1656f0a7da72b059e88eHavoc Pennington        die ("No memory");
33475742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
33575742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      if (!dbus_connection_send (connection, signal, NULL))
33675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington        die ("No memory\n");
33775742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
33875742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      return DBUS_HANDLER_RESULT_HANDLED;
33975742242000e782719bc1656f0a7da72b059e88eHavoc Pennington    }
340a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
341a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  else if (dbus_message_is_method_call (message,
342a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                   "org.freedesktop.TestSuite",
343a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                   "RunHelloFromSelf"))
344a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    {
345a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J      return handle_run_hello_from_self (connection, message);
346a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    }
347a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  else if (dbus_message_is_method_call (message,
348a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                        "org.freedesktop.TestSuite",
349a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J                                        "HelloFromSelf"))
350a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    {
351a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        DBusMessage *reply;
3527020b573764bb86551d329e867c2e87172424c9bHavoc Pennington        printf ("Received the HelloFromSelf message\n");
353a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
354a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        reply = dbus_message_new_method_return (message);
355a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        if (reply == NULL)
356a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J          die ("No memory");
357a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
358a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J        if (!dbus_connection_send (connection, reply, NULL))
359a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J          die ("No memory");
360afc2a6e56a65ff9154d4eb1b346157a7d625945dHavoc Pennington
361afc2a6e56a65ff9154d4eb1b346157a7d625945dHavoc Pennington        return DBUS_HANDLER_RESULT_HANDLED;
362a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J    }
36375742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  else
36475742242000e782719bc1656f0a7da72b059e88eHavoc Pennington    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
36575742242000e782719bc1656f0a7da72b059e88eHavoc Pennington}
36675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
36775742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonstatic DBusObjectPathVTable
36875742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonecho_vtable = {
36975742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  path_unregistered_func,
37075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  path_message_func,
37175742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  NULL,
37275742242000e782719bc1656f0a7da72b059e88eHavoc Pennington};
37375742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
37496f6740f2fbc16c7ee220d3d5abdc94e22da78f3Olivier Andrieu
37596f6740f2fbc16c7ee220d3d5abdc94e22da78f3Olivier Andrieustatic const char* echo_path = "/org/freedesktop/TestSuite" ;
37675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington
37775742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonstatic DBusHandlerResult
37875742242000e782719bc1656f0a7da72b059e88eHavoc Penningtonfilter_func (DBusConnection     *connection,
37975742242000e782719bc1656f0a7da72b059e88eHavoc Pennington             DBusMessage        *message,
38075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington             void               *user_data)
38175742242000e782719bc1656f0a7da72b059e88eHavoc Pennington{
38275742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  if (dbus_message_is_signal (message,
383248895207dc15914ac7970a6d1431308075dca1dColin Walters                              DBUS_INTERFACE_LOCAL,
38475742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                              "Disconnected"))
385a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington    {
386fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington      quit ();
3875c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington      return DBUS_HANDLER_RESULT_HANDLED;
388a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington    }
389a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington  else
390a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington    {
3915c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington      return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
392a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington    }
393a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington}
394a7f69a41d5b82eb00da20b661181b490039bb70fHavoc Pennington
395eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Penningtonint
396eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Penningtonmain (int    argc,
397eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington      char **argv)
398eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington{
399eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington  DBusError error;
400f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  int result;
401a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J  DBusConnection *connection;
402949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters  const char *name;
403949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters  dbus_bool_t do_fork;
404949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters
405949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters  if (argc != 3)
406949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters    {
407949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      name = "org.freedesktop.DBus.TestSuiteEchoService";
408949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      do_fork = FALSE;
409949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters    }
410949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters  else
411949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters    {
412949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      name = argv[1];
413be51ff7e5ef2e9370fd2417614781f688576d37aRalf Habacker#ifndef DBUS_WIN
414949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      do_fork = strcmp (argv[2], "fork") == 0;
4157a4cd46284dd634c165b5c4eb23606b7c0ff4adeColin Walters#else
4167a4cd46284dd634c165b5c4eb23606b7c0ff4adeColin Walters      do_fork = FALSE;
4177a4cd46284dd634c165b5c4eb23606b7c0ff4adeColin Walters#endif
418949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters    }
419949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters
420949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters  /* The bare minimum for simulating a program "daemonizing"; the intent
421949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters   * is to test services which move from being legacy init scripts to
422949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters   * activated services.
423949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters   * https://bugzilla.redhat.com/show_bug.cgi?id=545267
424949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters   */
425be51ff7e5ef2e9370fd2417614781f688576d37aRalf Habacker#ifndef DBUS_WIN
426be51ff7e5ef2e9370fd2417614781f688576d37aRalf Habacker   if (do_fork)
427949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters    {
428949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      pid_t pid = fork ();
429949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      if (pid != 0)
430949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters        exit (0);
431949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters      sleep (1);
432949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters    }
433be51ff7e5ef2e9370fd2417614781f688576d37aRalf Habacker#endif
434b7e77c6b035f634f372c1749e61c14bde18b5d95Colin Walters
435eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington  dbus_error_init (&error);
4368873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington  connection = dbus_bus_get (DBUS_BUS_STARTER, &error);
437eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington  if (connection == NULL)
438eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington    {
43975742242000e782719bc1656f0a7da72b059e88eHavoc Pennington      fprintf (stderr, "*** Failed to open connection to activating message bus: %s\n",
44075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington               error.message);
441eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington      dbus_error_free (&error);
442eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington      return 1;
443eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington    }
444eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington
44598572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington  loop = _dbus_loop_new ();
44698572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington  if (loop == NULL)
44798572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington    die ("No memory\n");
44898572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington
44998572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington  if (!test_connection_setup (loop, connection))
45098572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington    die ("No memory\n");
451f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
4521dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington  if (!dbus_connection_add_filter (connection,
4531dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington                                   filter_func, NULL, NULL))
454f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    die ("No memory");
455f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
45675742242000e782719bc1656f0a7da72b059e88eHavoc Pennington  if (!dbus_connection_register_object_path (connection,
45775742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                             echo_path,
45875742242000e782719bc1656f0a7da72b059e88eHavoc Pennington                                             &echo_vtable,
45964f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington                                             (void*) 0xdeadbeef))
46075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington    die ("No memory");
461f4cffc0e49d48a8dbf158230d7e816d8713566daSeth Nickell
46264f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington  {
46364f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington    void *d;
46464f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington    if (!dbus_connection_get_object_path_data (connection, echo_path, &d))
46564f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington      die ("No memory");
46664f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington    if (d != (void*) 0xdeadbeef)
46764f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington      die ("dbus_connection_get_object_path_data() doesn't seem to work right\n");
46864f3d8f67db09e0c84ed3ff009b86d0127fe82b4Havoc Pennington  }
469949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters
470949a64b127a32a3e5a4ce4278773f18e290c44c2Colin Walters  result = dbus_bus_request_name (connection, name,
4718873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington                                  0, &error);
472f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  if (dbus_error_is_set (&error))
473f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    {
47496f6740f2fbc16c7ee220d3d5abdc94e22da78f3Olivier Andrieu      fprintf (stderr, "Error %s\n", error.message);
47577eac31aee89346d1399193be6199b9b16fb77afHavoc Pennington      _dbus_verbose ("*** Failed to acquire service: %s\n",
47677eac31aee89346d1399193be6199b9b16fb77afHavoc Pennington                     error.message);
477f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington      dbus_error_free (&error);
478fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington      exit (1);
479f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington    }
480a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
48151781f541094a4936d47119cd62682e0431c41e9Havoc Pennington  _dbus_verbose ("*** Test service entering main loop\n");
48298572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington  _dbus_loop_run (loop);
483a7595655fb892b4ecab852aeb971cf53bdff09ccJohn (J
484fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington  test_connection_shutdown (loop, connection);
4851dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington
4861dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington  dbus_connection_remove_filter (connection, filter_func, NULL);
487fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
488eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington  dbus_connection_unref (connection);
48998572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington
49098572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington  _dbus_loop_unref (loop);
49198572905e60cac7ea971aa0830e2a629bfff208dHavoc Pennington  loop = NULL;
492f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington
493f216e81432ddf04889202c33a6e68113f94d7611Havoc Pennington  dbus_shutdown ();
494fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
4951708094c0e00ab433bb0a51981f8b77d24aee256Havoc Pennington  _dbus_verbose ("*** Test service exiting\n");
496eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington
497eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington  return 0;
498eeb88949d8d2ca84d9cbe54c07e73b9907d3163eHavoc Pennington}
499