From 4e50b413d5237e3fcfa44780ab2207a871686bd2 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 6 Oct 2008 16:56:24 +0200 Subject: Include protocol UUIDs in the pattern otherwise complex searches fail > ACL data: handle 11 flags 0x02 dlen 34 L2CAP(d): cid 0x0040 len 30 [psm 1] SDP SSA Req: tid 0x6c len 0x19 pat uuid-16 0x110a (AudioSource) uuid-16 0x0100 (L2CAP) uuid-16 0x0019 (AVDTP) max 100 aid(s) 0x0004 (ProtocolDescList) 0x0009 (BTProfileDescList) 0x0311 (SuppFeatures) cont 00 < ACL data: handle 11 flags 0x02 dlen 14 L2CAP(d): cid 0x0040 len 10 [psm 1] SDP SSA Rsp: tid 0x6c len 0x5 count 2 cont 00 Without this fix even searching for the L2CAP UUID fails. --- lib/sdp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/sdp.c b/lib/sdp.c index 705b03c1..14c08ad9 100644 --- a/lib/sdp.c +++ b/lib/sdp.c @@ -1956,19 +1956,23 @@ static sdp_data_t *access_proto_to_dataseq(sdp_record_t *rec, sdp_list_t *proto) for (i = 0, p = proto; p; p = p->next, i++) { sdp_list_t *elt = (sdp_list_t *)p->data; sdp_data_t *s; + uuid_t *uuid = NULL; int pslen = 0; for (; elt && pslen < sizeof(dtds); elt = elt->next, pslen++) { sdp_data_t *d = (sdp_data_t *)elt->data; dtds[pslen] = &d->dtd; switch (d->dtd) { case SDP_UUID16: - values[pslen] = &((uuid_t *)d)->value.uuid16; + uuid = (uuid_t *) d; + values[pslen] = &uuid->value.uuid16; break; case SDP_UUID32: - values[pslen] = &((uuid_t *)d)->value.uuid32; + uuid = (uuid_t *) d; + values[pslen] = &uuid->value.uuid32; break; case SDP_UUID128: - values[pslen] = &((uuid_t *)d)->value.uuid128; + uuid = (uuid_t *) d; + values[pslen] = &uuid->value.uuid128; break; case SDP_UINT8: values[pslen] = &d->val.uint8; @@ -1988,6 +1992,8 @@ static sdp_data_t *access_proto_to_dataseq(sdp_record_t *rec, sdp_list_t *proto) if (s) { seqDTDs[i] = &s->dtd; seqs[i] = s; + if (uuid) + sdp_pattern_add_uuid(rec, uuid); } } seq = sdp_seq_alloc(seqDTDs, seqs, seqlen); -- cgit