summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorAlex Deymo <deymo@chromium.org>2013-03-21 15:04:55 -0700
committerJohan Hedberg <johan.hedberg@intel.com>2013-03-25 12:57:03 +0200
commit4b3005226554596d0d515b5f8cb196848ab6f819 (patch)
tree4300b9a2a825f51fb7506d0d0087ba3b35283f1d /client
parentd52e8994b51631a7d10abea30924e3124e2de462 (diff)
client: Agent's DisplayPasskey implementation
Implements the DisplayPasskey(object device, uint32 passkey, uint16 entered) method.
Diffstat (limited to 'client')
-rw-r--r--client/agent.c29
-rw-r--r--client/display.h2
2 files changed, 31 insertions, 0 deletions
diff --git a/client/agent.c b/client/agent.c
index 71454cc7d..498f49771 100644
--- a/client/agent.c
+++ b/client/agent.c
@@ -189,6 +189,31 @@ static DBusMessage *display_pincode(DBusConnection *conn,
return dbus_message_new_method_return(msg);
}
+static DBusMessage *display_passkey(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ const char *device;
+ dbus_uint32_t passkey;
+ dbus_uint16_t entered;
+ char passkey_full[7];
+
+ dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &device,
+ DBUS_TYPE_UINT32, &passkey, DBUS_TYPE_UINT16, &entered,
+ DBUS_TYPE_INVALID);
+
+ snprintf(passkey_full, sizeof(passkey_full), "%.6u", passkey);
+ passkey_full[6] = '\0';
+
+ if (entered > strlen(passkey_full))
+ entered = strlen(passkey_full);
+
+ rl_printf(AGENT_PROMPT "Passkey: "
+ COLOR_BOLDGRAY "%.*s" COLOR_BOLDWHITE "%s\n" COLOR_OFF,
+ entered, passkey_full, passkey_full + entered);
+
+ return dbus_message_new_method_return(msg);
+}
+
static DBusMessage *request_confirmation(DBusConnection *conn,
DBusMessage *msg, void *user_data)
{
@@ -267,6 +292,10 @@ static const GDBusMethodTable methods[] = {
{ GDBUS_METHOD("DisplayPinCode",
GDBUS_ARGS({ "device", "o" }, { "pincode", "s" }),
NULL, display_pincode) },
+ { GDBUS_METHOD("DisplayPasskey",
+ GDBUS_ARGS({ "device", "o" }, { "passkey", "u" },
+ { "entered", "q" }),
+ NULL, display_passkey) },
{ GDBUS_ASYNC_METHOD("RequestConfirmation",
GDBUS_ARGS({ "device", "o" }, { "passkey", "u" }),
NULL, request_confirmation) },
diff --git a/client/display.h b/client/display.h
index 957bdc6d8..91a0be966 100644
--- a/client/display.h
+++ b/client/display.h
@@ -26,5 +26,7 @@
#define COLOR_GREEN "\x1B[0;92m"
#define COLOR_YELLOW "\x1B[0;93m"
#define COLOR_BLUE "\x1B[0;94m"
+#define COLOR_BOLDGRAY "\x1B[1;30m"
+#define COLOR_BOLDWHITE "\x1B[1;37m"
void rl_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2)));