Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
8c473eea
Commit
8c473eea
authored
Jun 14, 2003
by
Maksim Krasnyanskiy
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux.bkbits.net/linux-2.5
into qualcomm.com:/home/kernel/bt-2.5
parents
0f7923d7
34f14052
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
13 deletions
+28
-13
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+28
-13
No files found.
net/bluetooth/rfcomm/core.c
View file @
8c473eea
...
@@ -280,13 +280,13 @@ static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
...
@@ -280,13 +280,13 @@ static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
static
int
__rfcomm_dlc_open
(
struct
rfcomm_dlc
*
d
,
bdaddr_t
*
src
,
bdaddr_t
*
dst
,
u8
channel
)
static
int
__rfcomm_dlc_open
(
struct
rfcomm_dlc
*
d
,
bdaddr_t
*
src
,
bdaddr_t
*
dst
,
u8
channel
)
{
{
struct
rfcomm_session
*
s
;
struct
rfcomm_session
*
s
;
u8
dlci
=
__dlci
(
0
,
channel
);
int
err
=
0
;
int
err
=
0
;
u8
dlci
;
BT_DBG
(
"dlc %p state %ld %s %s channel %d
dlci %d
"
,
BT_DBG
(
"dlc %p state %ld %s %s channel %d"
,
d
,
d
->
state
,
batostr
(
src
),
batostr
(
dst
),
channel
,
dlci
);
d
,
d
->
state
,
batostr
(
src
),
batostr
(
dst
),
channel
);
if
(
dlci
<
1
||
dlci
>
62
)
if
(
channel
<
1
||
channel
>
30
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
d
->
state
!=
BT_OPEN
&&
d
->
state
!=
BT_CLOSED
)
if
(
d
->
state
!=
BT_OPEN
&&
d
->
state
!=
BT_CLOSED
)
...
@@ -299,6 +299,8 @@ static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst,
...
@@ -299,6 +299,8 @@ static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst,
return
err
;
return
err
;
}
}
dlci
=
__dlci
(
!
s
->
initiator
,
channel
);
/* Check if DLCI already exists */
/* Check if DLCI already exists */
if
(
rfcomm_dlc_get
(
s
,
dlci
))
if
(
rfcomm_dlc_get
(
s
,
dlci
))
return
-
EBUSY
;
return
-
EBUSY
;
...
@@ -715,7 +717,7 @@ static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
...
@@ -715,7 +717,7 @@ static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
hdr
->
len
=
__len8
(
sizeof
(
*
mcc
)
+
1
);
hdr
->
len
=
__len8
(
sizeof
(
*
mcc
)
+
1
);
mcc
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
mcc
);
mcc
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
mcc
);
mcc
->
type
=
__mcc_type
(
s
->
initiato
r
,
RFCOMM_NSC
);
mcc
->
type
=
__mcc_type
(
c
r
,
RFCOMM_NSC
);
mcc
->
len
=
__len8
(
1
);
mcc
->
len
=
__len8
(
1
);
/* Type that we didn't like */
/* Type that we didn't like */
...
@@ -741,7 +743,7 @@ static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d
...
@@ -741,7 +743,7 @@ static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d
hdr
->
len
=
__len8
(
sizeof
(
*
mcc
)
+
sizeof
(
*
pn
));
hdr
->
len
=
__len8
(
sizeof
(
*
mcc
)
+
sizeof
(
*
pn
));
mcc
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
mcc
);
mcc
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
mcc
);
mcc
->
type
=
__mcc_type
(
s
->
initiato
r
,
RFCOMM_PN
);
mcc
->
type
=
__mcc_type
(
c
r
,
RFCOMM_PN
);
mcc
->
len
=
__len8
(
sizeof
(
*
pn
));
mcc
->
len
=
__len8
(
sizeof
(
*
pn
));
pn
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
pn
);
pn
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
pn
);
...
@@ -850,7 +852,7 @@ static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig
...
@@ -850,7 +852,7 @@ static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig
msc
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
msc
);
msc
=
(
void
*
)
ptr
;
ptr
+=
sizeof
(
*
msc
);
msc
->
dlci
=
__addr
(
1
,
dlci
);
msc
->
dlci
=
__addr
(
1
,
dlci
);
msc
->
v24_sig
=
v24_sig
;
msc
->
v24_sig
=
v24_sig
|
0x01
;
*
ptr
=
__fcs
(
buf
);
ptr
++
;
*
ptr
=
__fcs
(
buf
);
ptr
++
;
...
@@ -1085,6 +1087,8 @@ static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
...
@@ -1085,6 +1087,8 @@ static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
d
->
state
=
BT_CONNECTED
;
d
->
state
=
BT_CONNECTED
;
d
->
state_change
(
d
,
0
);
d
->
state_change
(
d
,
0
);
rfcomm_dlc_unlock
(
d
);
rfcomm_dlc_unlock
(
d
);
rfcomm_send_msc
(
s
,
1
,
dlci
,
d
->
v24_sig
);
}
else
{
}
else
{
rfcomm_send_dm
(
s
,
dlci
);
rfcomm_send_dm
(
s
,
dlci
);
}
}
...
@@ -1207,6 +1211,14 @@ static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_
...
@@ -1207,6 +1211,14 @@ static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_
}
}
/* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
/* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
no flow control lines, normal XON/XOFF chars */
no flow control lines, normal XON/XOFF chars */
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_BITRATE
)
{
bit_rate
=
rpn
->
bit_rate
;
if
(
bit_rate
!=
RFCOMM_RPN_BR_115200
)
{
BT_DBG
(
"RPN bit rate mismatch 0x%x"
,
bit_rate
);
bit_rate
=
RFCOMM_RPN_BR_115200
;
rpn_mask
^=
RFCOMM_RPN_PM_BITRATE
;
}
}
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_DATA
)
{
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_DATA
)
{
data_bits
=
__get_rpn_data_bits
(
rpn
->
line_settings
);
data_bits
=
__get_rpn_data_bits
(
rpn
->
line_settings
);
if
(
data_bits
!=
RFCOMM_RPN_DATA_8
)
{
if
(
data_bits
!=
RFCOMM_RPN_DATA_8
)
{
...
@@ -1232,22 +1244,25 @@ static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_
...
@@ -1232,22 +1244,25 @@ static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_
}
}
}
}
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_FLOW
)
{
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_FLOW
)
{
if
(
rpn
->
flow_ctrl
!=
RFCOMM_RPN_FLOW_NONE
)
{
flow_ctrl
=
rpn
->
flow_ctrl
;
BT_DBG
(
"RPN flow ctrl mismatch 0x%x"
,
rpn
->
flow_ctrl
);
if
(
flow_ctrl
!=
RFCOMM_RPN_FLOW_NONE
)
{
BT_DBG
(
"RPN flow ctrl mismatch 0x%x"
,
flow_ctrl
);
flow_ctrl
=
RFCOMM_RPN_FLOW_NONE
;
flow_ctrl
=
RFCOMM_RPN_FLOW_NONE
;
rpn_mask
^=
RFCOMM_RPN_PM_FLOW
;
rpn_mask
^=
RFCOMM_RPN_PM_FLOW
;
}
}
}
}
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_XON
)
{
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_XON
)
{
if
(
rpn
->
xon_char
!=
RFCOMM_RPN_XON_CHAR
)
{
xon_char
=
rpn
->
xon_char
;
BT_DBG
(
"RPN XON char mismatch 0x%x"
,
rpn
->
xon_char
);
if
(
xon_char
!=
RFCOMM_RPN_XON_CHAR
)
{
BT_DBG
(
"RPN XON char mismatch 0x%x"
,
xon_char
);
xon_char
=
RFCOMM_RPN_XON_CHAR
;
xon_char
=
RFCOMM_RPN_XON_CHAR
;
rpn_mask
^=
RFCOMM_RPN_PM_XON
;
rpn_mask
^=
RFCOMM_RPN_PM_XON
;
}
}
}
}
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_XOFF
)
{
if
(
rpn
->
param_mask
&
RFCOMM_RPN_PM_XOFF
)
{
if
(
rpn
->
xoff_char
!=
RFCOMM_RPN_XOFF_CHAR
)
{
xoff_char
=
rpn
->
xoff_char
;
BT_DBG
(
"RPN XOFF char mismatch 0x%x"
,
rpn
->
xoff_char
);
if
(
xoff_char
!=
RFCOMM_RPN_XOFF_CHAR
)
{
BT_DBG
(
"RPN XOFF char mismatch 0x%x"
,
xoff_char
);
xoff_char
=
RFCOMM_RPN_XOFF_CHAR
;
xoff_char
=
RFCOMM_RPN_XOFF_CHAR
;
rpn_mask
^=
RFCOMM_RPN_PM_XOFF
;
rpn_mask
^=
RFCOMM_RPN_PM_XOFF
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment