Hi Marcin, > diff --git a/android/adapter.c b/android/adapter.c > index 0470522..9fe7d7d 100644 > --- a/android/adapter.c > +++ b/android/adapter.c > @@ -1486,9 +1486,87 @@ static void browse_req_free(struct browse_req *req) > g_free(req); > } > > +static void fill_uuids(GSList *list, void *buf) > +{ > + for (; list; list = (GSList *)g_list_next(list)) { This should use g_slist_next(). > + memcpy(buf, list->data, sizeof(uint128_t)); > + buf += sizeof(uint128_t); > + } > +} > + > +static void remote_uuids_callback(struct browse_req *req) > +{ > + struct hal_ev_remote_device_props *ev; > + int len; > + > + len = sizeof(*ev) + sizeof(struct hal_property) + (sizeof(uint128_t) * > + g_slist_length(req->uuids)); > + ev = g_malloc(len); > + > + ev->status = HAL_STATUS_SUCCESS; > + bdaddr2android(req->bdaddr, &ev->bdaddr); > + ev->num_props = 1; > + ev->props[0].type = HAL_PROP_DEVICE_UUIDS; > + ev->props[0].len = sizeof(uint128_t) * g_slist_length(req->uuids); > + fill_uuids(req->uuids, ev->props[0].val); > + > + ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH, > + HAL_EV_REMOTE_DEVICE_PROPS, len, ev, -1); > + > + g_free(ev); > +} > + > +static int uuid_128_cmp(gconstpointer a, gconstpointer b) > +{ > + return memcmp(a, b, sizeof(uint128_t)); > +} > + > static void update_records(struct browse_req *req, sdp_list_t *recs) > { > - /* TODO cache found uuids */ > + for (; recs; recs = recs->next) { > + sdp_record_t *rec = (sdp_record_t *) recs->data; > + sdp_list_t *svcclass = NULL; > + uuid_t uuid128; > + uuid_t *temp; > + uint8_t *u; > + > + if (!rec) > + break; > + > + if (sdp_get_service_classes(rec, &svcclass) < 0) > + continue; > + > + if (svcclass == NULL) > + continue; > + > + temp = svcclass->data; > + > + switch (temp->type) { > + case SDP_UUID16: > + sdp_uuid16_to_uuid128(&uuid128, temp); > + break; > + case SDP_UUID32: > + sdp_uuid32_to_uuid128(&uuid128, temp); > + break; > + case SDP_UUID128: > + memcpy(&uuid128, temp, sizeof(uuid_t)); > + break; > + default: > + continue; > + } > + > + u = g_malloc(16);/* size of 128 bit uuid */ > + memcpy(u, &uuid128.value.uuid128, > + sizeof(uuid128.value.uuid128)); > + > + /* Check if uuid is already added */ > + if (g_slist_find_custom(req->uuids, u, uuid_128_cmp)) > + g_free(u); > + else > + req->uuids = g_slist_append(req->uuids, u); > + > + sdp_list_free(svcclass, free); > + } > } > > static void browse_cb(sdp_list_t *recs, int err, gpointer user_data) > @@ -1518,6 +1596,7 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data) > } > > done: > + remote_uuids_callback(req); > sdp_req_list = g_list_remove(sdp_req_list, req->bdaddr); > browse_req_free(req); > } > -- BR Szymon Janc -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html