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;
}
Esempio n. 2
0
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;
}