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