|
@@ -883,6 +883,7 @@ static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *s
|
|
|
if (conn->type == ACL_LINK) {
|
|
|
conn->state = BT_CONFIG;
|
|
|
hci_conn_hold(conn);
|
|
|
+ conn->disc_timeout = HCI_DISCONN_TIMEOUT;
|
|
|
} else
|
|
|
conn->state = BT_CONNECTED;
|
|
|
|
|
@@ -1063,9 +1064,14 @@ static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *s
|
|
|
hci_proto_connect_cfm(conn, ev->status);
|
|
|
hci_conn_put(conn);
|
|
|
}
|
|
|
- } else
|
|
|
+ } else {
|
|
|
hci_auth_cfm(conn, ev->status);
|
|
|
|
|
|
+ hci_conn_hold(conn);
|
|
|
+ conn->disc_timeout = HCI_DISCONN_TIMEOUT;
|
|
|
+ hci_conn_put(conn);
|
|
|
+ }
|
|
|
+
|
|
|
if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
|
|
|
if (!ev->status) {
|
|
|
struct hci_cp_set_conn_encrypt cp;
|
|
@@ -1479,7 +1485,21 @@ static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb
|
|
|
|
|
|
static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
|
|
{
|
|
|
+ struct hci_ev_pin_code_req *ev = (void *) skb->data;
|
|
|
+ struct hci_conn *conn;
|
|
|
+
|
|
|
BT_DBG("%s", hdev->name);
|
|
|
+
|
|
|
+ hci_dev_lock(hdev);
|
|
|
+
|
|
|
+ conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
|
|
|
+ if (conn) {
|
|
|
+ hci_conn_hold(conn);
|
|
|
+ conn->disc_timeout = HCI_PAIRING_TIMEOUT;
|
|
|
+ hci_conn_put(conn);
|
|
|
+ }
|
|
|
+
|
|
|
+ hci_dev_unlock(hdev);
|
|
|
}
|
|
|
|
|
|
static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
|
@@ -1489,7 +1509,21 @@ static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff
|
|
|
|
|
|
static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
|
|
{
|
|
|
+ struct hci_ev_link_key_notify *ev = (void *) skb->data;
|
|
|
+ struct hci_conn *conn;
|
|
|
+
|
|
|
BT_DBG("%s", hdev->name);
|
|
|
+
|
|
|
+ hci_dev_lock(hdev);
|
|
|
+
|
|
|
+ conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
|
|
|
+ if (conn) {
|
|
|
+ hci_conn_hold(conn);
|
|
|
+ conn->disc_timeout = HCI_DISCONN_TIMEOUT;
|
|
|
+ hci_conn_put(conn);
|
|
|
+ }
|
|
|
+
|
|
|
+ hci_dev_unlock(hdev);
|
|
|
}
|
|
|
|
|
|
static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
|