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

📄 sdptool.c

📁 这是Linux环境下的蓝牙源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &u8);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	sdp_set_info_attr(&record, "LAN Access over PPP", 0, 0);	if (sdp_device_record_register(session, &interface, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("LAN Access service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_headset(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid, l2cap_uuid, rfcomm_uuid;	sdp_profile_desc_t profile;	sdp_list_t *aproto, *proto[2];	sdp_record_t record;	uint8_t u8 = si->channel ? si->channel : 5;	sdp_data_t *channel;	int ret = 0;	memset(&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&svclass_uuid, HEADSET_SVCLASS_ID);	svclass_id = sdp_list_append(0, &svclass_uuid);	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);	sdp_set_service_classes(&record, svclass_id);	sdp_uuid16_create(&profile.uuid, HEADSET_PROFILE_ID);	profile.version = 0x0100;	pfseq = sdp_list_append(0, &profile);	sdp_set_profile_descs(&record, pfseq);	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);	proto[0] = sdp_list_append(0, &l2cap_uuid);	apseq = sdp_list_append(0, proto[0]);	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &u8);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	sdp_set_info_attr(&record, "Headset", 0, 0);	if (sdp_device_record_register(session, &interface, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("Headset service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_headset_ag(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid, l2cap_uuid, rfcomm_uuid;	sdp_profile_desc_t profile;	sdp_list_t *aproto, *proto[2];	sdp_record_t record;	uint8_t u8 = si->channel ? si->channel : 7;	uint16_t u16 = 0x17;	sdp_data_t *channel, *features;	uint8_t netid = si->network ? si->network : 0x01; // ???? profile document	sdp_data_t *network = sdp_data_alloc(SDP_UINT8, &netid);	int ret = 0;	memset(&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&svclass_uuid, HEADSET_AGW_SVCLASS_ID);	svclass_id = sdp_list_append(0, &svclass_uuid);	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);	sdp_set_service_classes(&record, svclass_id);	sdp_uuid16_create(&profile.uuid, HEADSET_PROFILE_ID);	profile.version = 0x0100;	pfseq = sdp_list_append(0, &profile);	sdp_set_profile_descs(&record, pfseq);	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);	proto[0] = sdp_list_append(0, &l2cap_uuid);	apseq = sdp_list_append(0, proto[0]);	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &u8);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	features = sdp_data_alloc(SDP_UINT16, &u16);	sdp_attr_add(&record, SDP_ATTR_SUPPORTED_FEATURES, features);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	sdp_set_info_attr(&record, "Voice Gateway", 0, 0);	sdp_attr_add(&record, SDP_ATTR_EXTERNAL_NETWORK, network);	if (sdp_record_register(session, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("Headset AG service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_handsfree(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid, l2cap_uuid, rfcomm_uuid;	sdp_profile_desc_t profile;	sdp_list_t *aproto, *proto[2];	sdp_record_t record;	uint8_t u8 = si->channel ? si->channel : 6;	uint16_t u16 = 0x31;	sdp_data_t *channel, *features;	int ret = 0;	memset(&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&svclass_uuid, HANDSFREE_SVCLASS_ID);	svclass_id = sdp_list_append(0, &svclass_uuid);	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);	sdp_set_service_classes(&record, svclass_id);	sdp_uuid16_create(&profile.uuid, HANDSFREE_PROFILE_ID);	profile.version = 0x0101;	pfseq = sdp_list_append(0, &profile);	sdp_set_profile_descs(&record, pfseq);	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);	proto[0] = sdp_list_append(0, &l2cap_uuid);	apseq = sdp_list_append(0, proto[0]);	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &u8);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	features = sdp_data_alloc(SDP_UINT16, &u16);	sdp_attr_add(&record, SDP_ATTR_SUPPORTED_FEATURES, features);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	sdp_set_info_attr(&record, "Handsfree", 0, 0);	if (sdp_device_record_register(session, &interface, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("Handsfree service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_handsfree_ag(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid, l2cap_uuid, rfcomm_uuid;	sdp_profile_desc_t profile;	sdp_list_t *aproto, *proto[2];	sdp_record_t record;	uint8_t u8 = si->channel ? si->channel : 7;	uint16_t u16 = 0x17;	sdp_data_t *channel, *features;	uint8_t netid = si->network ? si->network : 0x01; // ???? profile document	sdp_data_t *network = sdp_data_alloc(SDP_UINT8, &netid);	int ret = 0;	memset(&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&svclass_uuid, HANDSFREE_AGW_SVCLASS_ID);	svclass_id = sdp_list_append(0, &svclass_uuid);	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);	sdp_set_service_classes(&record, svclass_id);	sdp_uuid16_create(&profile.uuid, HANDSFREE_PROFILE_ID);	profile.version = 0x0105;	pfseq = sdp_list_append(0, &profile);	sdp_set_profile_descs(&record, pfseq);	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);	proto[0] = sdp_list_append(0, &l2cap_uuid);	apseq = sdp_list_append(0, proto[0]);	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &u8);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	features = sdp_data_alloc(SDP_UINT16, &u16);	sdp_attr_add(&record, SDP_ATTR_SUPPORTED_FEATURES, features);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	sdp_set_info_attr(&record, "Voice Gateway", 0, 0);	sdp_attr_add(&record, SDP_ATTR_EXTERNAL_NETWORK, network);	if (sdp_record_register(session, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("Handsfree AG service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_simaccess(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid, l2cap_uuid, rfcomm_uuid;	sdp_profile_desc_t profile;	sdp_list_t *aproto, *proto[2];	sdp_record_t record;	uint8_t u8 = si->channel? si->channel : 8;	uint16_t u16 = 0x31;	sdp_data_t *channel, *features;		int ret = 0;	memset((void *)&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&svclass_uuid, SAP_SVCLASS_ID);	svclass_id = sdp_list_append(0, &svclass_uuid);	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_TELEPHONY_SVCLASS_ID);	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);	sdp_set_service_classes(&record, svclass_id);	sdp_uuid16_create(&profile.uuid, SAP_PROFILE_ID);	profile.version = 0x0101;	pfseq = sdp_list_append(0, &profile);	sdp_set_profile_descs(&record, pfseq);	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);	proto[0] = sdp_list_append(0, &l2cap_uuid);	apseq = sdp_list_append(0, proto[0]);	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &u8);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	features = sdp_data_alloc(SDP_UINT16, &u16);	sdp_attr_add(&record, SDP_ATTR_SUPPORTED_FEATURES, features);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	sdp_set_info_attr(&record, "SIM Access", 0, 0);	if (sdp_device_record_register(session, &interface, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("SIM Access service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_opush(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, opush_uuid, l2cap_uuid, rfcomm_uuid, obex_uuid;	sdp_profile_desc_t profile[1];	sdp_list_t *aproto, *proto[3];	sdp_record_t record;	uint8_t chan = si->channel ? si->channel : 9;	sdp_data_t *channel;	uint8_t formats[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };	//uint8_t formats[] = { 0xff };	void *dtds[sizeof(formats)], *values[sizeof(formats)];	int i;	uint8_t dtd = SDP_UINT8;	sdp_data_t *sflist;	int ret = 0;	memset(&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&opush_uuid, OBEX_OBJPUSH_SVCLASS_ID);	svclass_id = sdp_list_append(0, &opush_uuid);	sdp_set_service_classes(&record, svclass_id);	sdp_uuid16_create(&profile[0].uuid, OBEX_OBJPUSH_PROFILE_ID);	profile[0].version = 0x0100;	pfseq = sdp_list_append(0, profile);	sdp_set_profile_descs(&record, pfseq);	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);	proto[0] = sdp_list_append(0, &l2cap_uuid);	apseq = sdp_list_append(0, proto[0]);	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);	proto[1] = sdp_list_append(0, &rfcomm_uuid);	channel = sdp_data_alloc(SDP_UINT8, &chan);	proto[1] = sdp_list_append(proto[1], channel);	apseq = sdp_list_append(apseq, proto[1]);	sdp_uuid16_create(&obex_uuid, OBEX_UUID);	proto[2] = sdp_list_append(0, &obex_uuid);	apseq = sdp_list_append(apseq, proto[2]);	aproto = sdp_list_append(0, apseq);	sdp_set_access_protos(&record, aproto);	for (i = 0; i < sizeof(formats); i++) {		dtds[i] = &dtd;		values[i] = &formats[i];	}	sflist = sdp_seq_alloc(dtds, values, sizeof(formats));	sdp_attr_add(&record, SDP_ATTR_SUPPORTED_FORMATS_LIST, sflist);	sdp_set_info_attr(&record, "OBEX Object Push", 0, 0);	if (sdp_device_record_register(session, &interface, &record, SDP_RECORD_PERSIST) < 0) {		printf("Service Record registration failed\n");		ret = -1;		goto end;	}	printf("OBEX Object Push service registered\n");end:	sdp_data_free(channel);	sdp_list_free(proto[0], 0);	sdp_list_free(proto[1], 0);	sdp_list_free(proto[2], 0);	sdp_list_free(apseq, 0);	sdp_list_free(aproto, 0);	return ret;}static int add_ftp(sdp_session_t *session, svc_info_t *si){	sdp_list_t *svclass_id, *pfseq, *apseq, *root;	uuid_t root_uuid, ftrn_uuid, l2cap_uuid, rfcomm_uuid, obex_uuid;	sdp_profile_desc_t profile[1];	sdp_list_t *aproto, *proto[3];	sdp_record_t record;	uint8_t u8 = si->channel ? si->channel: 10;	sdp_data_t *channel;	int ret = 0;	memset(&record, 0, sizeof(sdp_record_t));	record.handle = si->handle;	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(0, &root_uuid);	sdp_set_browse_groups(&record, root);

⌨️ 快捷键说明

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