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

📄 btserviceadvertiser.cpp

📁 Symbian下的p2p工程
💻 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 + -