diff options
author | Steven Luo <steven@steven676.net> | 2011-06-19 21:11:03 -0700 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2011-06-28 10:42:23 +0300 |
commit | 9edfc88f77cf83204e0a9cbdc407a14616a56f15 (patch) | |
tree | 37bea57cc766586363a820b5dd688d10eca66006 /test | |
parent | 7822123d08b176ef8b3e8aaecbc3c8ff25a33483 (diff) |
test/agent.c: Wait for reply from CreatePairedDevice before exiting
This matches the behavior of the Python sample agent, and is needed to
get my Bluetooth keyboard to pair.
Diffstat (limited to 'test')
-rw-r--r-- | test/agent.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/test/agent.c b/test/agent.c index a40039ed..ae74074b 100644 --- a/test/agent.c +++ b/test/agent.c @@ -41,6 +41,7 @@ static int do_reject = 0; static volatile sig_atomic_t __io_canceled = 0; static volatile sig_atomic_t __io_terminated = 0; +static volatile sig_atomic_t exit_on_release = 1; static void sig_term(int sig) { @@ -286,7 +287,8 @@ static DBusHandlerResult release_message(DBusConnection *conn, if (!__io_canceled) fprintf(stderr, "Agent has been released\n"); - __io_terminated = 1; + if (exit_on_release) + __io_terminated = 1; reply = dbus_message_new_method_return(msg); if (!reply) { @@ -414,6 +416,13 @@ static int unregister_agent(DBusConnection *conn, const char *adapter_path, return 0; } +static void create_paired_device_reply(DBusPendingCall *pending, + void *user_data) +{ + __io_terminated = 1; + return; +} + static int create_paired_device(DBusConnection *conn, const char *adapter_path, const char *agent_path, const char *capabilities, @@ -421,6 +430,7 @@ static int create_paired_device(DBusConnection *conn, const char *adapter_path, { dbus_bool_t success; DBusMessage *msg; + DBusPendingCall *pending; msg = dbus_message_new_method_call("org.bluez", adapter_path, "org.bluez.Adapter", @@ -435,7 +445,12 @@ static int create_paired_device(DBusConnection *conn, const char *adapter_path, DBUS_TYPE_STRING, &capabilities, DBUS_TYPE_INVALID); - success = dbus_connection_send(conn, msg, NULL); + exit_on_release = 0; + success = dbus_connection_send_with_reply(conn, msg, &pending, -1); + if (pending) + dbus_pending_call_set_notify(pending, + create_paired_device_reply, + NULL, NULL); dbus_message_unref(msg); |