l2cap_sock.c (9149761ad74f618371b58fd37141d4c3706d88fc) l2cap_sock.c (3831971355d901ccfb76533a422b4395072849a3)
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc.
6 Copyright (C) 2011 ProFUSION Embedded Systems
7
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>

--- 116 unchanged lines hidden (view full) ---

125 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
126 chan->sec_level = BT_SECURITY_SDP;
127 break;
128 }
129
130 bacpy(&chan->src, &la.l2_bdaddr);
131 chan->src_type = la.l2_bdaddr_type;
132
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc.
6 Copyright (C) 2011 ProFUSION Embedded Systems
7
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>

--- 116 unchanged lines hidden (view full) ---

125 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
126 chan->sec_level = BT_SECURITY_SDP;
127 break;
128 }
129
130 bacpy(&chan->src, &la.l2_bdaddr);
131 chan->src_type = la.l2_bdaddr_type;
132
133 if (chan->psm && bdaddr_type_is_le(chan->src_type))
134 l2cap_le_flowctl_init(chan);
135
133 chan->state = BT_BOUND;
134 sk->sk_state = BT_BOUND;
135
136done:
137 release_sock(sk);
138 return err;
139}
140

--- 54 unchanged lines hidden (view full) ---

195 if (!enable_lecoc && la.l2_psm)
196 return -EINVAL;
197 /* We only allow ATT user space socket */
198 if (la.l2_cid &&
199 la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
200 return -EINVAL;
201 }
202
136 chan->state = BT_BOUND;
137 sk->sk_state = BT_BOUND;
138
139done:
140 release_sock(sk);
141 return err;
142}
143

--- 54 unchanged lines hidden (view full) ---

198 if (!enable_lecoc && la.l2_psm)
199 return -EINVAL;
200 /* We only allow ATT user space socket */
201 if (la.l2_cid &&
202 la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
203 return -EINVAL;
204 }
205
206 if (chan->psm && bdaddr_type_is_le(chan->src_type))
207 l2cap_le_flowctl_init(chan);
208
203 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
204 &la.l2_bdaddr, la.l2_bdaddr_type);
205 if (err)
206 return err;
207
208 lock_sock(sk);
209
210 err = bt_sock_wait_state(sk, BT_CONNECTED,

--- 21 unchanged lines hidden (view full) ---

232
233 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
234 err = -EINVAL;
235 goto done;
236 }
237
238 switch (chan->mode) {
239 case L2CAP_MODE_BASIC:
209 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
210 &la.l2_bdaddr, la.l2_bdaddr_type);
211 if (err)
212 return err;
213
214 lock_sock(sk);
215
216 err = bt_sock_wait_state(sk, BT_CONNECTED,

--- 21 unchanged lines hidden (view full) ---

238
239 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
240 err = -EINVAL;
241 goto done;
242 }
243
244 switch (chan->mode) {
245 case L2CAP_MODE_BASIC:
246 case L2CAP_MODE_LE_FLOWCTL:
240 break;
241 case L2CAP_MODE_ERTM:
242 case L2CAP_MODE_STREAMING:
243 if (!disable_ertm)
244 break;
245 /* fall through */
246 default:
247 err = -ENOTSUPP;

--- 335 unchanged lines hidden (view full) ---

583
584 if (!l2cap_valid_mtu(chan, opts.imtu)) {
585 err = -EINVAL;
586 break;
587 }
588
589 chan->mode = opts.mode;
590 switch (chan->mode) {
247 break;
248 case L2CAP_MODE_ERTM:
249 case L2CAP_MODE_STREAMING:
250 if (!disable_ertm)
251 break;
252 /* fall through */
253 default:
254 err = -ENOTSUPP;

--- 335 unchanged lines hidden (view full) ---

590
591 if (!l2cap_valid_mtu(chan, opts.imtu)) {
592 err = -EINVAL;
593 break;
594 }
595
596 chan->mode = opts.mode;
597 switch (chan->mode) {
598 case L2CAP_MODE_LE_FLOWCTL:
599 break;
591 case L2CAP_MODE_BASIC:
592 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
593 break;
594 case L2CAP_MODE_ERTM:
595 case L2CAP_MODE_STREAMING:
596 if (!disable_ertm)
597 break;
598 /* fall through */

--- 258 unchanged lines hidden (view full) ---

857 struct sock *sk = sock->sk;
858 struct l2cap_pinfo *pi = l2cap_pi(sk);
859 int err;
860
861 lock_sock(sk);
862
863 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
864 &bt_sk(sk)->flags)) {
600 case L2CAP_MODE_BASIC:
601 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
602 break;
603 case L2CAP_MODE_ERTM:
604 case L2CAP_MODE_STREAMING:
605 if (!disable_ertm)
606 break;
607 /* fall through */

--- 258 unchanged lines hidden (view full) ---

866 struct sock *sk = sock->sk;
867 struct l2cap_pinfo *pi = l2cap_pi(sk);
868 int err;
869
870 lock_sock(sk);
871
872 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
873 &bt_sk(sk)->flags)) {
865 sk->sk_state = BT_CONFIG;
866 pi->chan->state = BT_CONFIG;
874 if (bdaddr_type_is_le(pi->chan->src_type)) {
875 sk->sk_state = BT_CONNECTED;
876 pi->chan->state = BT_CONNECTED;
877 __l2cap_le_connect_rsp_defer(pi->chan);
878 } else {
879 sk->sk_state = BT_CONFIG;
880 pi->chan->state = BT_CONFIG;
881 __l2cap_connect_rsp_defer(pi->chan);
882 }
867
883
868 __l2cap_connect_rsp_defer(pi->chan);
869 err = 0;
870 goto done;
871 }
872
873 release_sock(sk);
874
875 if (sock->type == SOCK_STREAM)
876 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);

--- 601 unchanged lines hidden ---
884 err = 0;
885 goto done;
886 }
887
888 release_sock(sk);
889
890 if (sock->type == SOCK_STREAM)
891 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);

--- 601 unchanged lines hidden ---