From dc3a5865012d3b70be6c123fdca422becc419db0 Mon Sep 17 00:00:00 2001 From: Alex Deymo Date: Wed, 8 May 2013 17:38:02 -0700 Subject: [PATCH] autopair: Try a fixed pincode for keyboards rejecting random codes This patch makes the autopair plugin try a fixed "0000" pincode for keyboards that reject the pincode too fast (less than 500ms). This too short delay rejecting the pincode means that the user didn't have time to type the random pincode in the bluetooth keyboard and was the keyboard who actually rejected it. --- plugins/autopair.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/autopair.c b/plugins/autopair.c index 4d5e7878b..24af8729a 100644 --- a/plugins/autopair.c +++ b/plugins/autopair.c @@ -87,8 +87,23 @@ static ssize_t autopair_pincb(struct btd_adapter *adapter, switch ((class & 0xc0) >> 6) { case 0x01: /* Keyboard */ case 0x03: /* Combo keyboard/pointing device */ - if (attempt > 1) + /* For keyboards rejecting the first random code + * in less than 500ms, try a fixed code. */ + if (attempt > 1 && + device_bonding_last_duration(device) < 500) { + /* Don't try more than one dumb code */ + if (attempt > 2) + return 0; + /* Try "0000" as the code for the second + * attempt. */ + memcpy(pinbuf, "0000", 4); + return 4; + } + + /* Never try more than 3 random pincodes. */ + if (attempt >= 4) return 0; + snprintf(pinstr, sizeof(pinstr), "%06d", rand() % 1000000); *display = TRUE; -- 2.47.3