int CBtSvr::RegieterBlueToothServerL(const TDesC& KServiceName, TInt KSerialClassID)
{
// reg the sdp server database
RSdp sdp;
RSdpDatabase iSdpDatabase;
TSdpServRecordHandle iRecord;
// sdp服务器连接
if(sdp.Connect() != KErrNone) {
return -CNSE_SYS_ERR;
}
// 打开数据库
if(iSdpDatabase.Open(sdp) != KErrNone) {
return -CNSE_SYS_ERR;
}
// 创建一个服务
iSdpDatabase.CreateServiceRecordL(KSerialClassID, iRecord);
// add a Protocol to the record
CSdpAttrValueDES* vProtocolDescriptor = CSdpAttrValueDES::NewDESL(NULL);
CleanupStack::PushL(vProtocolDescriptor);
// 设置protocl相关信息
BuildProtocolDescriptionL(vProtocolDescriptor, channelNum);
iSdpDatabase.UpdateAttributeL(iRecord,
KSdpAttrIdProtocolDescriptorList,
*vProtocolDescriptor);
// Add 0x5 display 设置为可见
CSdpAttrValueDES* browseGroupList = CSdpAttrValueDES::NewDESL(NULL);
CleanupStack::PushL(browseGroupList);
browseGroupList
->StartListL() // List of protocols required for this method
->BuildUUIDL(TUUID(TUint16(0x1002)))
->EndListL();
iSdpDatabase.UpdateAttributeL(iRecord, KSdpAttrIdBrowseGroupList, *browseGroupList);
CleanupStack::PopAndDestroy(2);
// Add a name to the record,名字
iSdpDatabase.UpdateAttributeL(iRecord,
KSdpAttrIdBasePrimaryLanguage + \
KSdpAttrIdOffsetServiceName,
KServiceName);
// Add a description to the record,描述
iSdpDatabase.UpdateAttributeL(iRecord,
KSdpAttrIdBasePrimaryLanguage + \
KSdpAttrIdOffsetServiceDescription,
KServiceName);
iSdpDatabase.Close();
sdp.Close();
return 0;
}