📄 btserviceadvertiser.cpp
字号:
/* Copyright (c) 2004, Nokia. All rights reserved */
// INCLUDE FILES
#include <bt_sock.h>
#include "BTServiceAdvertiser.h"
#include "BTPointToPoint.pan"
// ============================ MEMBER FUNCTIONS ==============================
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::CBTServiceAdvertiser()
// Constructor.
// ----------------------------------------------------------------------------
//
CBTServiceAdvertiser::CBTServiceAdvertiser():iRecord( 0 ),
iIsConnected( EFalse )
{
// no implementation required
}
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::~CBTServiceAdvertiser()
// Destructor.
// ----------------------------------------------------------------------------
//
CBTServiceAdvertiser::~CBTServiceAdvertiser()
{
if ( IsAdvertising() )
{
TRAPD( err,StopAdvertisingL() );
if ( err != KErrNone )
{
User::Panic( KPanicBTServiceAdvertiser, err );
}
}
iSdpDatabase.Close();
iSdpSession.Close();
}
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::ConnectL()
// Connect to the SDP database.
// ----------------------------------------------------------------------------
//
void CBTServiceAdvertiser::ConnectL()
{
if ( !iIsConnected )
{
User::LeaveIfError( iSdpSession.Connect() );
User::LeaveIfError( iSdpDatabase.Open( iSdpSession ) );
iIsConnected = ETrue;
}
}
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::StartAdvertisingL()
// Start the advertising of this service.
// ----------------------------------------------------------------------------
//
void CBTServiceAdvertiser::StartAdvertisingL( TInt aPort )
{
if ( IsAdvertising() )
{
// could be advertising on a different port
StopAdvertisingL();
}
if ( ! iIsConnected )
{
ConnectL();
}
iSdpDatabase.CreateServiceRecordL( ServiceClass(), iRecord );
// add a Protocol to the record
CSdpAttrValueDES* vProtocolDescriptor = CSdpAttrValueDES::NewDESL( NULL );
CleanupStack::PushL( vProtocolDescriptor );
BuildProtocolDescriptionL( vProtocolDescriptor,aPort );
iSdpDatabase.UpdateAttributeL( iRecord, KSdpAttrIdProtocolDescriptorList,
*vProtocolDescriptor );
CleanupStack::PopAndDestroy( vProtocolDescriptor );
// Add a name to the record
iSdpDatabase.UpdateAttributeL( iRecord,
KSdpAttrIdBasePrimaryLanguage +
KSdpAttrIdOffsetServiceName,
ServiceName() );
// Add a description to the record
iSdpDatabase.UpdateAttributeL( iRecord,
KSdpAttrIdBasePrimaryLanguage +
KSdpAttrIdOffsetServiceDescription,
ServiceDescription() );
}
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::UpdateAvailabilityL()
// Update the service availability field of the service record.
// ----------------------------------------------------------------------------
//
void CBTServiceAdvertiser::UpdateAvailabilityL( TBool aIsAvailable )
{
TUint state;
if ( aIsAvailable )
{
state = 0xFF; // Fully unused
}
else
{
state = 0x00; // Fully used -> can't connect
}
// Update the availibility attribute field
iSdpDatabase.UpdateAttributeL( iRecord,
KSdpAttrIdServiceAvailability,
state );
// Mark the record as changed - by increasing its state number (version)
iSdpDatabase.UpdateAttributeL( iRecord, KSdpAttrIdServiceRecordState,
++iRecordState );
}
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::StopAdvertisingL()
// Stop advertising this service. Remove the record from the sdp database.
// ----------------------------------------------------------------------------
//
void CBTServiceAdvertiser::StopAdvertisingL()
{
if ( IsAdvertising() )
{
iSdpDatabase.DeleteRecordL( iRecord );
iRecord = 0;
}
}
// ----------------------------------------------------------------------------
// CBTServiceAdvertiser::IsAdvertising()
// Does the SDP database contain a record for this service.
// ----------------------------------------------------------------------------
//
TBool CBTServiceAdvertiser::IsAdvertising()
{
return iRecord != 0;
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -