gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list) { sdp_record_t *sdp_record; bdaddr_t addr; if (adapter->sdp_handler) remove_record_from_server(adapter->sdp_handler); if (!app_list) { adapter->sdp_handler = 0; return TRUE; } sdp_record = sdp_record_alloc(); if (!sdp_record) return FALSE; if (adapter->sdp_handler) sdp_record->handle = adapter->sdp_handler; else sdp_record->handle = 0xffffffff; /* Set automatically */ if (is_app_role(app_list, HDP_SINK)) set_sdp_services_uuid(sdp_record, HDP_SINK); if (is_app_role(app_list, HDP_SOURCE)) set_sdp_services_uuid(sdp_record, HDP_SOURCE); if (!register_service_protocols(adapter, sdp_record)) goto fail; if (!register_service_profiles(sdp_record)) goto fail; if (!register_service_additional_protocols(adapter, sdp_record)) goto fail; sdp_set_info_attr(sdp_record, HDP_SERVICE_NAME, HDP_SERVICE_PROVIDER, HDP_SERVICE_DSC); if (!register_service_sup_features(app_list, sdp_record)) goto fail; if (!register_data_exchange_spec(sdp_record)) goto fail; register_mcap_features(sdp_record); if (sdp_set_record_state(sdp_record, adapter->record_state++)) goto fail; adapter_get_address(adapter->btd_adapter, &addr); if (add_record_to_server(&addr, sdp_record) < 0) goto fail; adapter->sdp_handler = sdp_record->handle; return TRUE; fail: if (sdp_record) sdp_record_free(sdp_record); return FALSE; }
static int update_sdp_record(struct health_app *app) { sdp_record_t *rec; uint8_t role; DBG(""); if (record_id > 0) { bt_adapter_remove_record(record_id); record_id = 0; } rec = sdp_record_alloc(); if (!rec) return -1; role = HAL_HEALTH_MDEP_ROLE_SOURCE; if (queue_find(app->mdeps, match_mdep_by_role, INT_TO_PTR(role))) set_sdp_services_uuid(rec, role); role = HAL_HEALTH_MDEP_ROLE_SINK; if (queue_find(app->mdeps, match_mdep_by_role, INT_TO_PTR(role))) set_sdp_services_uuid(rec, role); sdp_set_info_attr(rec, app->service_name, app->provider_name, app->service_descr); if (register_service_protocols(rec, app) < 0) goto fail; if (register_service_profiles(rec) < 0) goto fail; if (register_service_additional_protocols(rec, app) < 0) goto fail; if (register_service_sup_features(rec, app) < 0) goto fail; if (register_data_exchange_spec(rec) < 0) goto fail; if (register_mcap_features(rec) < 0) goto fail; if (sdp_set_record_state(rec, record_state++) < 0) goto fail; if (bt_adapter_add_record(rec, SVC_HINT_HEALTH) < 0) { error("health: Failed to register HEALTH record"); goto fail; } record_id = rec->handle; return 0; fail: sdp_record_free(rec); return -1; }
gboolean mcap_update_sdp_record(struct mcap_adapter *adapter, GSList *app_list) { DBG(""); DBG("1"); sdp_record_t *sdp_record; bdaddr_t addr; if (adapter->sdp_handler) remove_record_from_server(adapter->sdp_handler); if (!app_list) { adapter->sdp_handler = 0; return TRUE; } DBG("3"); sdp_record = sdp_record_alloc(); if (!sdp_record) return FALSE; if (adapter->sdp_handler) sdp_record->handle = adapter->sdp_handler; else sdp_record->handle = 0xffffffff; DBG("4"); if (is_app_role(app_list, MCAP_SINK)) set_sdp_services_uuid(sdp_record, MCAP_SINK); if (is_app_role(app_list, MCAP_SOURCE)) set_sdp_services_uuid(sdp_record, MCAP_SOURCE); DBG("52"); if (!register_service_protocols(adapter, sdp_record)) DBG("eq"); if (!register_service_profiles(sdp_record)) DBG("e2"); if (!register_service_additional_protocols(adapter, sdp_record)) DBG("e3"); DBG("5"); sdp_set_info_attr(sdp_record, MCAP_SERVICE_NAME, MCAP_SERVICE_PROVIDER, MCAP_SERVICE_DSC); if (!register_service_sup_features(app_list, sdp_record)) DBG("e4"); if (!register_data_exchange_spec(sdp_record)) DBG("45"); DBG("6"); register_mcap_features(sdp_record); if (sdp_set_record_state(sdp_record, adapter->record_state++)) DBG("5"); adapter_get_address(adapter->btd_adapter, &addr); DBG("8"); if (add_record_to_server(&addr, sdp_record) < 0) DBG("5"); DBG("7"); adapter->sdp_handler = sdp_record->handle; return TRUE; fail: if (sdp_record) sdp_record_free(sdp_record); return TRUE; }