summaryrefslogtreecommitdiffstats
path: root/sdpd/service.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2005-08-03 07:57:12 +0000
committerMarcel Holtmann <marcel@holtmann.org>2005-08-03 07:57:12 +0000
commitb0ba2fc57a3da851aa0bb7ff6bbf78347c838221 (patch)
treeff84628ee1cb8130f304773f5120bb0637640439 /sdpd/service.c
parent489f776973a6b46016edc0cd978918018a93b9a1 (diff)
Add device specific register functionality
Diffstat (limited to 'sdpd/service.c')
-rw-r--r--sdpd/service.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/sdpd/service.c b/sdpd/service.c
index 843371ea..437bcd69 100644
--- a/sdpd/service.c
+++ b/sdpd/service.c
@@ -46,7 +46,7 @@
extern void update_db_timestamp(void);
// FIXME: refactor for server-side
-static sdp_record_t *extract_pdu_server(uint8_t *p, uint32_t handleExpected, int *scanned)
+static sdp_record_t *extract_pdu_server(bdaddr_t *device, uint8_t *p, uint32_t handleExpected, int *scanned)
{
int extractStatus = -1, localExtractedLength = 0;
uint8_t dtd;
@@ -71,15 +71,15 @@ static sdp_record_t *extract_pdu_server(uint8_t *p, uint32_t handleExpected, int
} else if (handleExpected != 0xffffffff)
rec = sdp_record_find(handleExpected);
- if (rec == NULL) {
+ if (!rec) {
rec = sdp_record_alloc();
rec->attrlist = NULL;
if (lookAheadAttrId == SDP_ATTR_RECORD_HANDLE) {
rec->handle = handle;
- sdp_record_add(rec);
+ sdp_record_add(device, rec);
} else if (handleExpected != 0xffffffff) {
rec->handle = handleExpected;
- sdp_record_add(rec);
+ sdp_record_add(device, rec);
}
}
@@ -133,10 +133,14 @@ int service_register_req(sdp_req_t *req, sdp_buf_t *rsp)
sdp_record_t *rec;
req->flags = *p++;
+ if (req->flags & SDP_DEVICE_RECORD) {
+ bacpy(&req->device, (bdaddr_t *) p);
+ p += sizeof(bdaddr_t);
+ }
// save image of PDU: we need it when clients request this attribute
- rec = extract_pdu_server(p, 0xffffffff, &scanned);
- if (rec == NULL) {
+ rec = extract_pdu_server(&req->device, p, 0xffffffff, &scanned);
+ if (!rec) {
sdp_put_unaligned(htons(SDP_INVALID_SYNTAX), (uint16_t *)rsp->data);
rsp->data_size = sizeof(uint16_t);
return -1;
@@ -146,7 +150,7 @@ int service_register_req(sdp_req_t *req, sdp_buf_t *rsp)
if (rec->handle < 0x10000)
return -1;
- sdp_record_add(rec);
+ sdp_record_add(&req->device, rec);
if (!(req->flags & SDP_RECORD_PERSIST))
sdp_svcdb_set_collectable(rec, req->sock);
handle = sdp_data_alloc(SDP_UINT32, &rec->handle);
@@ -189,7 +193,7 @@ int service_update_req(sdp_req_t *req, sdp_buf_t *rsp)
SDPDBG("SvcRecOld: 0x%x\n", (uint32_t)orec);
if (orec) {
- sdp_record_t *nrec = extract_pdu_server(p, handle, &scanned);
+ sdp_record_t *nrec = extract_pdu_server(BDADDR_ANY, p, handle, &scanned);
if (nrec && handle == nrec->handle)
update_db_timestamp();
else {