⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdpsrv.c

📁 Affix - Bluetooth Protocol Stack for Linux has been developed at Nokia Research Center in Helsinki
💻 C
📖 第 1 页 / 共 2 页
字号:
{	return sdp_append_attr(svc, SDP_ATTR_BROWSE_GROUP_LIST, sdp_create_seq());}sdpdata_t *sdp_add_subgroup(sdpdata_t *attr, uint16_t uuid){	return sdp_append_uuid16(attr, uuid);}sdpdata_t *sdp_set_proto_attr(sdpsvc_t *svc){	return sdp_append_attr(svc, SDP_ATTR_PROTO_DESC_LIST, sdp_create_seq());}/* returns alternate list */sdpdata_t *sdp_add_proto_list(sdpdata_t *attr){	sdpdata_t	*data;	/* change type to alternative */	attr->dtd = SDP_DTD_ALT8;	data = sdp_append_seq(attr);	return data;}sdpdata_t *sdp_add_proto(sdpdata_t *attr, uint16_t uuid, 		uint16_t portNumber, int portSize, uint16_t version){	sdpdata_t	*root, *data;	/* create root element */	root = sdp_append_seq(attr);	if (!root)		return NULL;	data = sdp_append_uuid16(root, uuid);	if (data == NULL)		goto err;	if (portNumber != 0xFFFF) {		if (portSize == 1) {			uint8_t	port = portNumber;			data = sdp_append_u8(root, port);		} else			data = sdp_append_u16(root, portNumber);		if (data == NULL)			goto err;	}	if (version != 0xffff) {		data = sdp_append_u16(root, version);		if (data == NULL)			goto err;	}	return root;err:	/* destroy root */	sdp_remove_data(attr, root);	return NULL;}sdpdata_t *sdp_set_lang_attr(sdpsvc_t *svcRec){	return sdp_append_attr(svcRec, SDP_ATTR_LANG_BASE_ATTRID_LIST, sdp_create_seq());}int sdp_add_lang(sdpdata_t *attr, uint16_t lang, uint16_t encoding, uint16_t offset){	sdpdata_t	*data;	data = sdp_append_u16(attr, lang);	if (data == NULL)		return -1;	data = sdp_append_u16(attr, encoding);	if (data == NULL)		return -1;	data = sdp_append_u16(attr, offset);	if (data == NULL)		return -1;	return 0;}sdpdata_t *sdp_set_ttl_attr(sdpsvc_t *svcRec, uint32_t svcTTL){	return sdp_append_attr(svcRec, SDP_ATTR_SERVICE_INFO_TTL, sdp_put_u32(svcTTL));}sdpdata_t *sdp_set_state_attr(sdpsvc_t *svcRec, uint32_t svcRecState){	return sdp_append_attr(svcRec, SDP_ATTR_SERVICE_RECORD_STATE, sdp_put_u32(svcRecState));}/*  * sets the "ServiceID" */sdpdata_t *sdp_set_service_attr(sdpsvc_t *svcRec, uint16_t svcUUID){	return sdp_append_attr(svcRec, SDP_ATTR_SERVICEID, sdp_put_uuid16(svcUUID));}/* * sets GroupID */sdpdata_t *sdp_set_group_attr(sdpsvc_t *svcRec, uint16_t groupUUID){	return sdp_append_attr(svcRec, SDP_ATTR_GROUPID, sdp_put_uuid16(groupUUID));}sdpdata_t *sdp_set_availability_attr(sdpsvc_t *svcRec, uint8_t svcAvail){	return sdp_append_attr(svcRec, SDP_ATTR_SERVICE_AVAILABILITY, sdp_put_u8(svcAvail));}sdpdata_t *sdp_set_profile_attr(sdpsvc_t *svc){	return sdp_append_attr(svc, SDP_ATTR_PROFILE_DESC_LIST, sdp_create_seq());}int sdp_add_profile(sdpdata_t *attr, uint16_t uuid, uint16_t version){	sdpdata_t	*root, *data;	root = sdp_append_seq(attr);	if (root == NULL)		return -1;	data = sdp_append_uuid16(root, uuid);	if (data == NULL)		goto err;	data = sdp_append_u16(root, version);	if (data == NULL)		goto err;	return 0;err:	sdp_remove_data(attr, root);	return -1;}int sdp_set_url_attr(sdpsvc_t *svcRec, char *clientExecURL, char *docURL, char *iconURL){	if (!svcRec || (svcRec->state == SDP_STATE_NOT_EXIST))		return -1;	sdp_append_attr(svcRec, SDP_ATTR_EXEC_URL, sdp_put_url(clientExecURL));	sdp_append_attr(svcRec, SDP_ATTR_DOC_URL, sdp_put_url(docURL));	sdp_append_attr(svcRec, SDP_ATTR_ICON_URL, sdp_put_url(iconURL));	sdp_set_state(svcRec);	return 0;}/* Supported format list attribute 	*//* for OBEX Push profile. 		*/sdpdata_t *sdp_set_supported_format_attr(sdpsvc_t *svc){	return sdp_append_attr(svc, SDP_ATTR_SUPPORTED_FORMATS_LIST, sdp_create_seq());}int sdp_add_format(sdpdata_t *attr,uint8_t type){	sdpdata_t	*data;	data = sdp_append_u8(attr,type);	if (data == NULL)		return -1;	return 0;}/* -------------------------------- */sdpsvc_t *sdp_create_rfcomm_svc(uint16_t svc_class, uint16_t generic_class, uint16_t profile, 		char *name, char *prov, char *desc, int port){	sdpsvc_t	*svcRec;	sdpdata_t	*attr, *param;	//va_list		ap;	//va_start(ap, port);	//va_end(ap);		svcRec = sdp_create_svc();	if (svcRec == NULL) {		BTERROR("sdp_create_svc failed");		return NULL;	}	/* set service class list*/	attr = sdp_set_class_attr(svcRec);	if (attr == NULL) {		BTERROR("sdp_set_class_attr failed");		sdp_free_svc(svcRec);		return NULL;	}	sdp_add_class(attr, svc_class);	if (generic_class)		sdp_add_class(attr, generic_class);	/* set profiles list */	attr = sdp_set_profile_attr(svcRec);	if (attr == NULL) {		BTERROR("sdp_set_profile_attr() failed");		sdp_free_svc(svcRec);		return NULL;	}	sdp_add_profile(attr, profile, 0x0100);	/* set group */	attr = sdp_set_subgroup_attr(svcRec);	if (attr == NULL) {		BTERROR("sdp_set_subgroup_attr failed");		sdp_free_svc(svcRec);		return NULL;	}	sdp_add_subgroup(attr, SDP_UUID_PUBLIC_BROWSE_GROUP);	attr = sdp_set_proto_attr(svcRec);	if (attr == NULL) {		BTERROR("sdp_set_proto_attr failed");		sdp_free_svc(svcRec);		return NULL;	}	param = sdp_add_proto(attr, SDP_UUID_L2CAP, 0xffff, 0, 0xffff);	param = sdp_add_proto(attr, SDP_UUID_RFCOMM, port, 1, 0xffff);	if (svc_class == SDP_UUID_OBEX_FTP 		|| svc_class == SDP_UUID_OBEX_PUSH) {		param = sdp_add_proto(attr, SDP_UUID_OBEX, 0xffff, 0, 0xffff);	}	if (svc_class == SDP_UUID_OBEX_PUSH){		attr = sdp_set_supported_format_attr(svcRec);		if (attr == NULL) {			BTERROR("sdp_set_proto_attr failed");			sdp_free_svc(svcRec);			return NULL;		}		sdp_add_format(attr,0xFF);	}		if (sdp_set_info_attr(svcRec, name, prov, desc)) {		BTERROR("sdp_set_info_attr failed");		sdp_free_svc(svcRec);		return NULL;	}	return svcRec;}sdpsvc_t *sdp_create_pan_svc(uint16_t svcClass, slist_t *ptype, uint16_t security, 						uint16_t type, uint32_t rate){	int		status;	sdpsvc_t	*svcRec;	sdpdata_t	*attr, *param, *dataSeq;	slist_t		*pSeq;	svcRec = sdp_create_svc();	if (svcRec == NULL) {		BTERROR("sdp_create_svc failed");		return NULL;	}	attr = sdp_set_subgroup_attr(svcRec);	if (attr == NULL) {		BTERROR("sdp_set_subgroup_attr failed");		sdp_free_svc(svcRec);		return NULL;	}	sdp_add_subgroup(attr, SDP_UUID_PUBLIC_BROWSE_GROUP);	attr = sdp_set_proto_attr(svcRec);	if (attr == NULL) {		BTERROR("sdp_set_proto_attr failed");		sdp_free_svc(svcRec);		return NULL;	}	sdp_add_proto(attr, SDP_UUID_L2CAP, BNEP_PSM, 2, 0xffff);	param = sdp_add_proto(attr, SDP_UUID_BNEP, 0xffff, 0, 0x0100);	/* add supported Network Packet Type */	if (ptype) {		/* create root parameter */		dataSeq = sdp_append_seq(param);		/* fill data */		for (pSeq = ptype; pSeq; pSeq = s_list_next(pSeq))			sdp_append_u16(dataSeq, s_list_uint(pSeq));	}	/* set service class list*/	attr = sdp_set_class_attr(svcRec);	if (attr == NULL) {		BTERROR("setServiceClassID failed");		sdp_free_svc(svcRec);		return NULL;	}	sdp_add_class(attr, svcClass);	/* set profiles list */	attr = sdp_set_profile_attr(svcRec);	if (attr == NULL) {		BTERROR("No memory for ProfileDescriptor");		sdp_free_svc(svcRec);		return NULL;	}	status = sdp_add_profile(attr, svcClass, 0x0100);	if (status) {		sdp_free_svc(svcRec);		return NULL;	}		sdp_append_attr(svcRec, SDP_ATTR_SECURITY_DESC, sdp_put_u16(security));	/* NAP only */	if (svcClass == SDP_UUID_NAP) {		sdp_append_attr(svcRec, SDP_ATTR_NET_ACCESS_TYPE, sdp_put_u16(type));		sdp_append_attr(svcRec, SDP_ATTR_MAX_NET_ACCESS_RATE, sdp_put_u32(rate));	}	/* NAP & GN IPv4/6 subnet info - sequence of strings */	if (svcClass == SDP_UUID_NAP || svcClass == SDP_UUID_GN) {	}	return svcRec;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -