From bb79b386c443ae308bbee16149930d42a2d80f3c Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 15 Jan 2009 21:57:02 +0100 Subject: [PATCH] --- yaml --- r: 134715 b: refs/heads/master c: 71aeeaa1fd88fe7446391e0553336f0e0c2cfe6a h: refs/heads/master i: 134713: abb80dbddcac269dfef883cf64b1eb4191d585b0 134711: 150fb322492f691f7d31aad065c8e553f6cc41d6 v: v3 --- [refs] | 2 +- trunk/net/bluetooth/sco.c | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index bf06b2ed84f7..c8580a78b621 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f66dc81f44d918ee1aa1a9d821bb2f25c7592bc0 +refs/heads/master: 71aeeaa1fd88fe7446391e0553336f0e0c2cfe6a diff --git a/trunk/net/bluetooth/sco.c b/trunk/net/bluetooth/sco.c index dea40d4bb6f5..71df982c09c9 100644 --- a/trunk/net/bluetooth/sco.c +++ b/trunk/net/bluetooth/sco.c @@ -857,10 +857,30 @@ static void sco_conn_ready(struct sco_conn *conn) /* ----- SCO interface with lower layer (HCI) ----- */ static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type) { + register struct sock *sk; + struct hlist_node *node; + int lm = 0; + + if (type != SCO_LINK && type != ESCO_LINK) + return 0; + BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr)); - /* Always accept connection */ - return HCI_LM_ACCEPT; + /* Find listening sockets */ + read_lock(&sco_sk_list.lock); + sk_for_each(sk, node, &sco_sk_list.head) { + if (sk->sk_state != BT_LISTEN) + continue; + + if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) || + !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) { + lm |= HCI_LM_ACCEPT; + break; + } + } + read_unlock(&sco_sk_list.lock); + + return lm; } static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)