Linux bluetooth development
 help / color / mirror / Atom feed
From: Vinicius Costa Gomes <vinicius.gomes@openbossa.org>
To: linux-bluetooth@vger.kernel.org
Cc: Vinicius Costa Gomes <vinicius.gomes@openbossa.org>
Subject: [PATCH BlueZ 6/8] Fix connecting to the local adapter when receiving new keys
Date: Fri, 19 Aug 2011 21:09:27 -0300	[thread overview]
Message-ID: <1313798969-8772-7-git-send-email-vinicius.gomes@openbossa.org> (raw)
In-Reply-To: <1313798969-8772-1-git-send-email-vinicius.gomes@openbossa.org>

In some cases, we receive a key for when the local adapter is
the responder and one key for when the local adapter is
the initiator of the connection, so one key might have both address
equal to the local adapter.
---
 src/event.c |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/event.c b/src/event.c
index 6d276f4..fb7d102 100644
--- a/src/event.c
+++ b/src/event.c
@@ -215,6 +215,9 @@ void btd_event_bonding_complete(bdaddr_t *local, bdaddr_t *peer,
 
 	create = status ? FALSE : TRUE;
 
+	if (bacmp(local, peer) == 0)
+		return;
+
 	if (!get_adapter_and_device(local, peer, &adapter, &device, create))
 		return;
 
@@ -430,9 +433,17 @@ int btd_event_link_key_notify(bdaddr_t *local, bdaddr_t *peer, uint8_t *key,
 {
 	struct btd_adapter *adapter;
 	struct btd_device *device;
-	int ret;
+	int ret, diff;
 
-	if (!get_adapter_and_device(local, peer, &adapter, &device, TRUE))
+	diff = bacmp(local, peer);
+
+	/*
+	 * If local and peer addresses are equal it means that this key is a
+	 * "slave" key, and it should be stored, but the device must not be
+	 * created.
+	 */
+	if (diff && !get_adapter_and_device(local, peer,
+						&adapter, &device, TRUE))
 		return -ENODEV;
 
 	DBG("storing link key of type 0x%02x", key_type);
@@ -456,7 +467,7 @@ int btd_event_link_key_notify(bdaddr_t *local, bdaddr_t *peer, uint8_t *key,
 		break;
 	}
 
-	if (ret == 0) {
+	if (ret == 0 && diff) {
 		device_set_bonded(device, TRUE);
 
 		if (device_is_temporary(device))
-- 
1.7.6


  parent reply	other threads:[~2011-08-20  0:09 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-20  0:09 [PATCH BlueZ 0/8] Proper support for pairing LE devices Vinicius Costa Gomes
2011-08-20  0:09 ` [PATCH BlueZ 1/8] Add link_type information to the mgmt "Device Connected" event Vinicius Costa Gomes
2011-08-31  7:51   ` Johan Hedberg
2011-08-31 11:25     ` Luiz Augusto von Dentz
2011-08-31 12:27       ` Johan Hedberg
2011-08-20  0:09 ` [PATCH BlueZ 2/8] Fix doing SDP service discovery for LE devices Vinicius Costa Gomes
2011-08-20  0:09 ` [PATCH BlueZ 3/8] Set the Paired property of a device when restoring from storage Vinicius Costa Gomes
2011-08-20  0:09 ` [PATCH BlueZ 4/8] Fix not using the same way for pairing LE devices Vinicius Costa Gomes
2011-08-20  0:09 ` [PATCH BlueZ 5/8] Fix not using the "bonded" property for new bondings Vinicius Costa Gomes
2011-08-20  0:09 ` Vinicius Costa Gomes [this message]
2011-08-20  0:09 ` [PATCH BlueZ 7/8] Remove the default security level from btio Vinicius Costa Gomes
2011-08-20  0:09 ` [PATCH BlueZ 8/8] Fix btio users to not expect a default security level Vinicius Costa Gomes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1313798969-8772-7-git-send-email-vinicius.gomes@openbossa.org \
    --to=vinicius.gomes@openbossa.org \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox