diff options
author | Alex Deymo <deymo@chromium.org> | 2013-03-21 15:04:56 -0700 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2013-03-25 12:57:11 +0200 |
commit | 342f1aa194576f9f54f20fd8cc1856bcfb03c588 (patch) | |
tree | ea0b636d9d895cac369baa3e2bd055d43f248137 /client | |
parent | 4b3005226554596d0d515b5f8cb196848ab6f819 (diff) | |
download | bluez-342f1aa194576f9f54f20fd8cc1856bcfb03c588.tar.gz |
client: Agent's RequestPasskey implementation
Implements the uint32 RequestPasskey(object device) method.
Diffstat (limited to 'client')
-rw-r--r-- | client/agent.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/client/agent.c b/client/agent.c index 498f49771..2d9dffda3 100644 --- a/client/agent.c +++ b/client/agent.c @@ -97,6 +97,20 @@ static void pincode_response(DBusConnection *conn, const char *input) DBUS_TYPE_INVALID); } +static void passkey_response(DBusConnection *conn, const char *input) +{ + dbus_uint32_t passkey; + if (sscanf(input, "%u", &passkey) == 1) + g_dbus_send_reply(conn, pending_message, DBUS_TYPE_UINT32, + &passkey, DBUS_TYPE_INVALID); + else if (!strcmp(input, "no")) + g_dbus_send_error(conn, pending_message, + "org.bluez.Error.Rejected", NULL); + else + g_dbus_send_error(conn, pending_message, + "org.bluez.Error.Canceled", NULL); +} + static void confirm_response(DBusConnection *conn, const char *input) { if (!strcmp(input, "yes")) @@ -122,6 +136,8 @@ dbus_bool_t agent_input(DBusConnection *conn, const char *input) if (!strcmp(member, "RequestPinCode")) pincode_response(conn, input); + else if (!strcmp(member, "RequestPasskey")) + passkey_response(conn, input); else if (!strcmp(member, "RequestConfirmation")) confirm_response(conn, input); else if (!strcmp(member, "RequestAuthorization")) @@ -189,6 +205,23 @@ static DBusMessage *display_pincode(DBusConnection *conn, return dbus_message_new_method_return(msg); } +static DBusMessage *request_passkey(DBusConnection *conn, + DBusMessage *msg, void *user_data) +{ + const char *device; + + rl_printf("Request passkey\n"); + + dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &device, + DBUS_TYPE_INVALID); + + agent_prompt("Enter passkey (number in 0-999999): "); + + pending_message = dbus_message_ref(msg); + + return NULL; +} + static DBusMessage *display_passkey(DBusConnection *conn, DBusMessage *msg, void *user_data) { @@ -292,6 +325,9 @@ static const GDBusMethodTable methods[] = { { GDBUS_METHOD("DisplayPinCode", GDBUS_ARGS({ "device", "o" }, { "pincode", "s" }), NULL, display_pincode) }, + { GDBUS_ASYNC_METHOD("RequestPasskey", + GDBUS_ARGS({ "device", "o" }), + GDBUS_ARGS({ "passkey", "u" }), request_passkey) }, { GDBUS_METHOD("DisplayPasskey", GDBUS_ARGS({ "device", "o" }, { "passkey", "u" }, { "entered", "q" }), |