diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-10-06 16:56:24 +0200 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-10-06 16:56:24 +0200 | 
| commit | 4e50b413d5237e3fcfa44780ab2207a871686bd2 (patch) | |
| tree | 85959fbbd8b0f8a64f8105a136102a295092b8e5 | |
| parent | 2e6dd6427406c6c255703f5998ef2bf9db14c68e (diff) | |
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.
| -rw-r--r-- | lib/sdp.c | 12 | 
1 files changed, 9 insertions, 3 deletions
@@ -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);  | 
