|
@@ -1014,6 +1014,26 @@ static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
|
|
|
return skb;
|
|
|
}
|
|
|
|
|
|
+static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
|
|
|
+{
|
|
|
+ struct sock *sk = chan->data;
|
|
|
+ struct sock *parent;
|
|
|
+
|
|
|
+ lock_sock(sk);
|
|
|
+
|
|
|
+ parent = bt_sk(sk)->parent;
|
|
|
+
|
|
|
+ BT_DBG("sk %p, parent %p", sk, parent);
|
|
|
+
|
|
|
+ sk->sk_state = BT_CONNECTED;
|
|
|
+ sk->sk_state_change(sk);
|
|
|
+
|
|
|
+ if (parent)
|
|
|
+ parent->sk_data_ready(parent, 0);
|
|
|
+
|
|
|
+ release_sock(sk);
|
|
|
+}
|
|
|
+
|
|
|
static struct l2cap_ops l2cap_chan_ops = {
|
|
|
.name = "L2CAP Socket Interface",
|
|
|
.new_connection = l2cap_sock_new_connection_cb,
|
|
@@ -1021,6 +1041,7 @@ static struct l2cap_ops l2cap_chan_ops = {
|
|
|
.close = l2cap_sock_close_cb,
|
|
|
.teardown = l2cap_sock_teardown_cb,
|
|
|
.state_change = l2cap_sock_state_change_cb,
|
|
|
+ .ready = l2cap_sock_ready_cb,
|
|
|
.alloc_skb = l2cap_sock_alloc_skb_cb,
|
|
|
};
|
|
|
|