1dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h>
21617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington#include "test-utils.h"
31617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
41617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtontypedef struct
51617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
61617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  DBusLoop *loop;
71617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  DBusConnection *connection;
81617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
91617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington} CData;
101617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
111617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic dbus_bool_t
121617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonadd_watch (DBusWatch *watch,
131617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington	   void      *data)
141617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
151617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
161617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
174299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  return _dbus_loop_add_watch (cd->loop, watch);
181617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
191617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
201617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
211617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonremove_watch (DBusWatch *watch,
221617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington	      void      *data)
231617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
241617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
251617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
264299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  _dbus_loop_remove_watch (cd->loop, watch);
271617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
281617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
291617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
304299eb3c0907100fe95d2986984b48d40cc52841Daniel Erattoggle_watch (DBusWatch  *watch,
314299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat              void       *data)
321617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
334299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  CData *cd = data;
344299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat
354299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  _dbus_loop_toggle_watch (cd->loop, watch);
361617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
371617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
381617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic dbus_bool_t
391617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonadd_timeout (DBusTimeout *timeout,
401617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington	     void        *data)
411617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
421617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
431617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
444299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  return _dbus_loop_add_timeout (cd->loop, timeout);
451617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
461617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
471617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
481617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonremove_timeout (DBusTimeout *timeout,
491617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington		void        *data)
501617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
511617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
521617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
534299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  _dbus_loop_remove_timeout (cd->loop, timeout);
541617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
551617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
561617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
577caf646fdf595946eb28202e2df3f847d28c7151Havoc Penningtondispatch_status_function (DBusConnection    *connection,
587caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington                          DBusDispatchStatus new_status,
597caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington                          void              *data)
607caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington{
617caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  DBusLoop *loop = data;
627caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
637caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  if (new_status != DBUS_DISPATCH_COMPLETE)
647caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington    {
657caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington      while (!_dbus_loop_queue_dispatch (loop, connection))
667caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington        _dbus_wait_for_memory ();
677caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington    }
687caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington}
697caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
707caf646fdf595946eb28202e2df3f847d28c7151Havoc Penningtonstatic void
711617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtoncdata_free (void *data)
721617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
731617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
741617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
751617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_connection_unref (cd->connection);
761617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  _dbus_loop_unref (cd->loop);
771617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
781617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_free (cd);
791617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
801617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
811617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic CData*
821617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtoncdata_new (DBusLoop       *loop,
831617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington           DBusConnection *connection)
841617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
851617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd;
861617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
871617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd = dbus_new0 (CData, 1);
881617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd == NULL)
891617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    return NULL;
901617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
911617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd->loop = loop;
921617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd->connection = connection;
931617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
941617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_connection_ref (cd->connection);
951617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  _dbus_loop_ref (cd->loop);
961617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
971617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return cd;
981617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
991617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1001617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtondbus_bool_t
1011617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtontest_connection_setup (DBusLoop       *loop,
1021617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                       DBusConnection *connection)
1031617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
1041617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd;
1051617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1067caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  cd = NULL;
1077caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1087caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_dispatch_status_function (connection, dispatch_status_function,
1097caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington                                                loop, NULL);
1107caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1111617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd = cdata_new (loop, connection);
1121617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd == NULL)
1131617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    goto nomem;
1141617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1151617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (!dbus_connection_set_watch_functions (connection,
1161617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            add_watch,
1171617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            remove_watch,
1184299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat                                            toggle_watch,
1191617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            cd, cdata_free))
1201617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    goto nomem;
1211617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1221617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1231617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd = cdata_new (loop, connection);
1241617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd == NULL)
1251617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    goto nomem;
1261617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1271617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (!dbus_connection_set_timeout_functions (connection,
1281617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              add_timeout,
1291617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              remove_timeout,
1301617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              NULL,
1311617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              cd, cdata_free))
1327caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington    goto nomem;
1337caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1347caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  if (dbus_connection_get_dispatch_status (connection) != DBUS_DISPATCH_COMPLETE)
1351617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    {
1367caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington      if (!_dbus_loop_queue_dispatch (loop, connection))
1377caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington        goto nomem;
1381617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    }
1397caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1401617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return TRUE;
1411617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1421617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington nomem:
1431617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd)
1441617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    cdata_free (cd);
1457caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1467caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
1477caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_watch_functions (connection, NULL, NULL, NULL, NULL, NULL);
1487caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_timeout_functions (connection, NULL, NULL, NULL, NULL, NULL);
1497caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1501617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return FALSE;
1511617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
152fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
153fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonvoid
154fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtontest_connection_shutdown (DBusLoop       *loop,
155fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                          DBusConnection *connection)
156fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington{
157fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington  if (!dbus_connection_set_watch_functions (connection,
158fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL,
159fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL,
160fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL,
161fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL, NULL))
162fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington    _dbus_assert_not_reached ("setting watch functions to NULL failed");
163fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
164fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington  if (!dbus_connection_set_timeout_functions (connection,
165fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL,
166fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL,
167fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL,
168fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL, NULL))
169fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington    _dbus_assert_not_reached ("setting timeout functions to NULL failed");
170fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
1717caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
172fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington}
1739d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
1749d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walterstypedef struct
1759d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
1769d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  DBusLoop *loop;
1779d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  DBusServer *server;
1789d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters} ServerData;
1799d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
1809d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic void
1819d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersserverdata_free (void *data)
1829d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
1839d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *sd = data;
1849d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
1859d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  dbus_server_unref (sd->server);
1869d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  _dbus_loop_unref (sd->loop);
1879d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
1889d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  dbus_free (sd);
1899d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
1909d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
1919d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic ServerData*
1929d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersserverdata_new (DBusLoop       *loop,
1939d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                DBusServer     *server)
1949d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
1959d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *sd;
1969d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
1979d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  sd = dbus_new0 (ServerData, 1);
1989d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (sd == NULL)
1999d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    return NULL;
2009d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2019d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  sd->loop = loop;
2029d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  sd->server = server;
2039d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2049d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  dbus_server_ref (sd->server);
2059d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  _dbus_loop_ref (sd->loop);
2069d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2079d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  return sd;
2089d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2099d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2109d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic dbus_bool_t
2119d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersadd_server_watch (DBusWatch  *watch,
2129d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                  void       *data)
2139d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
2149d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *context = data;
2159d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2164299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  return _dbus_loop_add_watch (context->loop, watch);
2179d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2189d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2199d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic void
2204299eb3c0907100fe95d2986984b48d40cc52841Daniel Erattoggle_server_watch (DBusWatch  *watch,
2219d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                     void       *data)
2229d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
2239d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *context = data;
2244299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat
2254299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  _dbus_loop_toggle_watch (context->loop, watch);
2269d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2279d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2289d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic void
2294299eb3c0907100fe95d2986984b48d40cc52841Daniel Eratremove_server_watch (DBusWatch  *watch,
2304299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat                     void       *data)
2319d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
2324299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  ServerData *context = data;
2334299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat
2344299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  _dbus_loop_remove_watch (context->loop, watch);
2359d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2369d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2379d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic dbus_bool_t
2389d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersadd_server_timeout (DBusTimeout *timeout,
2399d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                    void        *data)
2409d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
2419d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *context = data;
2429d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2434299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  return _dbus_loop_add_timeout (context->loop, timeout);
2449d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2459d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2469d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersstatic void
2479d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersremove_server_timeout (DBusTimeout *timeout,
2489d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                       void        *data)
2499d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
2509d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *context = data;
2519d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2524299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  _dbus_loop_remove_timeout (context->loop, timeout);
2539d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2549d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2559d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersdbus_bool_t
2569d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walterstest_server_setup (DBusLoop      *loop,
2579d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                   DBusServer    *server)
2589d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
2599d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  ServerData *sd;
2609d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2619d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  sd = serverdata_new (loop, server);
2629d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (sd == NULL)
2639d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    goto nomem;
2649d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2659d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (!dbus_server_set_watch_functions (server,
2669d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        add_server_watch,
2679d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        remove_server_watch,
2684299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat                                        toggle_server_watch,
2699d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        sd,
2709d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        serverdata_free))
2719d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    {
2724299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat      goto nomem;
2739d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    }
2749d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2754299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  sd = serverdata_new (loop, server);
2764299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  if (sd == NULL)
2774299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat    goto nomem;
2784299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat
2799d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (!dbus_server_set_timeout_functions (server,
2809d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          add_server_timeout,
2819d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          remove_server_timeout,
2829d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          NULL,
2839d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          sd, serverdata_free))
2849d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    {
2854299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat      goto nomem;
2869d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    }
2879d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  return TRUE;
2889d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2899d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters nomem:
2909d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (sd)
2919d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    serverdata_free (sd);
2929d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2939d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  test_server_shutdown (loop, server);
2949d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2959d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  return FALSE;
2969d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
2979d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
2989d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Waltersvoid
2999d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walterstest_server_shutdown (DBusLoop         *loop,
3009d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                      DBusServer       *server)
3019d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters{
3024299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat  dbus_server_disconnect (server);
3034299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat
3049d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (!dbus_server_set_watch_functions (server,
3059d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        NULL, NULL, NULL,
3069d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        NULL,
3079d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                        NULL))
3089d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    _dbus_assert_not_reached ("setting watch functions to NULL failed");
3099d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters
3109d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters  if (!dbus_server_set_timeout_functions (server,
3119d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          NULL, NULL, NULL,
3129d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          NULL,
3139d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters                                          NULL))
3149d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters    _dbus_assert_not_reached ("setting timeout functions to NULL failed");
3159d8989cfec02e6ca41f8ffa0ccda16c93ddcb23cColin Walters}
316