test-privserver-client.c revision dbecdeabb20e0ce11121819c63373f0afba57c58
1#include <config.h> 2#include "../test-utils.h" 3 4static void 5die (const char *message, ...) 6{ 7 va_list args; 8 va_start (args, message); 9 vfprintf (stderr, message, args); 10 va_end (args); 11 exit (1); 12} 13 14static DBusHandlerResult 15filter_private_message (DBusConnection *connection, 16 DBusMessage *message, 17 void *user_data) 18{ 19 if (dbus_message_is_signal (message, 20 DBUS_INTERFACE_LOCAL, 21 "Disconnected")) 22 { 23 DBusLoop *loop = user_data; 24 _dbus_loop_quit (loop); 25 return DBUS_HANDLER_RESULT_HANDLED; 26 } 27 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; 28} 29 30static void 31open_shutdown_private_connection (dbus_bool_t use_guid) 32{ 33 DBusError error; 34 DBusLoop *loop; 35 DBusConnection *session; 36 DBusMessage *msg; 37 DBusMessage *reply; 38 DBusConnection *privconn; 39 char *addr; 40 char *comma; 41 42 dbus_error_init (&error); 43 44 loop = _dbus_loop_new (); 45 46 session = dbus_bus_get (DBUS_BUS_SESSION, &error); 47 if (!session) 48 die ("couldn't access session bus\n"); 49 dbus_connection_set_exit_on_disconnect (session, FALSE); 50 msg = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuite.PrivServer", 51 "/", 52 "org.freedesktop.DBus.TestSuite.PrivServer", 53 "GetPrivateAddress"); 54 if (!(reply = dbus_connection_send_with_reply_and_block (session, msg, -1, &error))) 55 die ("couldn't send message: %s\n", error.message); 56 dbus_message_unref (msg); 57 if (!dbus_message_get_args (reply, &error, DBUS_TYPE_STRING, &addr, DBUS_TYPE_INVALID)) 58 die ("couldn't parse message replym\n"); 59 printf ("got private temp address %s\n", addr); 60 addr = strdup (addr); 61 if (!use_guid) 62 { 63 char *comma = strrchr (addr, ','); 64 if (comma) 65 *comma = '\0'; 66 } 67 privconn = dbus_connection_open (addr, &error); 68 free (addr); 69 if (!privconn) 70 die ("couldn't connect to server direct connection: %s\n", error.message); 71 dbus_message_unref (reply); 72 73 dbus_connection_set_exit_on_disconnect (privconn, FALSE); 74 dbus_connection_add_filter (privconn, filter_private_message, loop, NULL); 75 test_connection_setup (loop, privconn); 76 77 msg = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuite.PrivServer", 78 "/", 79 "org.freedesktop.DBus.TestSuite.PrivServer", 80 "Quit"); 81 if (!dbus_connection_send (session, msg, NULL)) 82 die ("couldn't send Quit message\n"); 83 dbus_message_unref (msg); 84 85 _dbus_loop_run (loop); 86 87 test_connection_shutdown (loop, session); 88 dbus_connection_unref (session); 89 90 test_connection_shutdown (loop, privconn); 91 dbus_connection_remove_filter (privconn, filter_private_message, loop); 92 dbus_connection_unref (privconn); 93 94 _dbus_loop_unref (loop); 95} 96 97int 98main (int argc, char *argv[]) 99{ 100 open_shutdown_private_connection (TRUE); 101 102 dbus_shutdown (); 103 104 open_shutdown_private_connection (TRUE); 105 106 dbus_shutdown (); 107 108 open_shutdown_private_connection (FALSE); 109 110 dbus_shutdown (); 111 112 open_shutdown_private_connection (FALSE); 113 114 dbus_shutdown (); 115 116 return 0; 117} 118