Bluetooth: Fix IPSP connection callback event issue. 22/88322/5
authorh.sandeep <h.sandeep@samsung.com>
Fri, 16 Sep 2016 09:15:24 +0000 (14:45 +0530)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Thu, 29 Sep 2016 10:47:10 +0000 (19:47 +0900)
This patch fixes the IPSP connection callback event issue
between kernel and bluez layer.

Change-Id: Ia4d625aa8a6dbc9da89a7d9f12308af9c90d0594
Signed-off-by: h.sandeep <h.sandeep@samsung.com>
Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
net/bluetooth/l2cap_core.c

index dad419782a1280bbff079c4978578f0be54e37a3..e39da6127b25334b7eaee5d8a0efdd123435103a 100644 (file)
@@ -1248,8 +1248,23 @@ static void l2cap_chan_ready(struct l2cap_chan *chan)
         * case of receiving data before the L2CAP info req/rsp
         * procedure is complete.
         */
+#ifndef TIZEN_BT
        if (chan->state == BT_CONNECTED)
                return;
+#else
+       if (chan->state == BT_CONNECTED) {
+               if (chan->psm == L2CAP_PSM_IPSP) {
+                       struct l2cap_conn *conn = chan->conn;
+
+                       if (conn->hcon->out)
+                               return;
+                       else if (conn->hcon->type != LE_LINK)
+                               return;
+               } else {
+                       return;
+               }
+       }
+#endif
 
        /* This clears all conf flags, including CONF_NOT_COMPLETE */
        chan->conf_state = 0;
@@ -6796,8 +6811,23 @@ static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
         * procdure is done simply assume that the channel is supported
         * and mark it as ready.
         */
+#ifndef TIZEN_BT
        if (chan->chan_type == L2CAP_CHAN_FIXED)
                l2cap_chan_ready(chan);
+#else
+       if (chan->chan_type == L2CAP_CHAN_FIXED) {
+               if (chan->psm == L2CAP_PSM_IPSP) {
+                       struct l2cap_conn *conn = chan->conn;
+
+                       if (conn->hcon->out)
+                               l2cap_chan_ready(chan);
+                       else if (conn->hcon->type != LE_LINK)
+                               l2cap_chan_ready(chan);
+               } else {
+                       l2cap_chan_ready(chan);
+               }
+       }
+#endif
 
        if (chan->state != BT_CONNECTED)
                goto drop;