[Bluez-devel] Re: Disconnections are not being detected.

Vlad
2004-08-27T00:17:08Z

Marcel and Xavier,

Thank you for such a prompt response to my post. Here are some
more details regarding this problem.

As Marcel pointed out:

actually that is not quite right. The server (phone) sends back a
connect response with PSM not supported error status. And we then send a
command reject for that. This is really stupid. What kernel version do
you use and what kind of hardware is this? Can you reproduce it with the
latest 2.4 or 2.6 kernel?

You right ... I didn't pay close attention to the direction where the
command reject packet is being sent. The above log came from the laptop
that was running kernel version 2.4.24, but I believe that such behavior
can be repeated on the more recent versions. [see below]

and as Xavier wrote:

I guess the command reject is due to scid and dcid being both set to 0 by
the remote device. So bluez doesn't know who it's to talking to (as we can
have several cid on one ACL link) ...

Marcel wrote:

you are right. It should fill in dcid and scid. The remote device is
broken. Blame SE about that. I still don't know where the command reject
came from :(

You are both right, about why is this happening. Here is a link to the
linux kernel source.

http://lxr.linux.no/source/net/bluetooth/l2cap.c?v=2.4.26#L1450

But the official L2CAP specification. (Version 1.1) says (page 288):

Result: 2 octets The result field indicates the outcome of
the connection request. The result value of 0x0000 indicates
success while a non-zero value indicates the connection request
failed or is pending. A logical channel is established on the
receipt of a successful result. Table 5.5 defines values for
this field. If the result field is not zero. The DCID and SCID
fields should be ignored when the result field indicates the
connection was refused.

So although the BlueZ behavior is correct from common sense perspective,
but it is not correct from the specification perspective. I am not sure
what does version 1.2 of the spec say about this subject.

So since my project requires this to be implemented corrected. I will
come up with some kind of patch for this and post in on this mailing
list. (Within next couple of weeks). Meanwhile I would appreciate any
suggestions on how this could be implemented with the least pain for
everybody.

Vlad