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

📄 chatbtserviceadvertiser.cpp

📁 一个聊天的软件
💻 CPP
字号:
/*
* ==============================================================================
*  Name        : ChatBtServiceAdverticer.cpp
*  Part of     : Chat
*  Interface   : 
*  Description : 
*  Version     : 
*
*  Copyright (c) 2005-2006 Nokia Corporation.
*  This material, including documentation and any related 
*  computer programs, is protected by copyright controlled by 
*  Nokia Corporation.
* ==============================================================================
*/

// INCLUDE FILES
#include <bt_sock.h>
#include "ChatBtServiceAdvertiser.h"
#include "Chat.pan"

// ============================ MEMBER FUNCTIONS ==============================

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::CChatBtServiceAdvertiser()
// Constructor.
// ----------------------------------------------------------------------------
//
CChatBtServiceAdvertiser::CChatBtServiceAdvertiser() :
    iRecord( 0 ), 
    iIsConnected( EFalse )
    {
    // no implementation required
    }

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::~CChatBtServiceAdvertiser()
// Destructor.
// ----------------------------------------------------------------------------
//
CChatBtServiceAdvertiser::~CChatBtServiceAdvertiser()
    {
    if ( IsAdvertising() )
        {
        TRAPD( err,StopAdvertisingL() );
        if ( err != KErrNone )
            {
            User::Panic( KPanicBTServiceAdvertiser, err );
            }
        }

    iSdpDatabase.Close();
    iSdpSession.Close();
    }

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::ConnectL()
// Connect to the SDP database.
// ----------------------------------------------------------------------------
//
void CChatBtServiceAdvertiser::ConnectL()
    {
    if ( !iIsConnected )
        {
        User::LeaveIfError( iSdpSession.Connect() );
        User::LeaveIfError( iSdpDatabase.Open( iSdpSession ) );
        iIsConnected = ETrue;
        }
    }

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::StartAdvertisingL()
// Start the advertising of this service.
// ----------------------------------------------------------------------------
//
void CChatBtServiceAdvertiser::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() );

    }

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::UpdateAvailabilityL()
// Update the service availability field of the service record.
// ----------------------------------------------------------------------------
//
void CChatBtServiceAdvertiser::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 );
    }

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::StopAdvertisingL()
// Stop advertising this service. Remove the record from the sdp database.
// ----------------------------------------------------------------------------
//
void CChatBtServiceAdvertiser::StopAdvertisingL()
    {
    if ( IsAdvertising() )
        {
        iSdpDatabase.DeleteRecordL( iRecord );
        iRecord = 0;
        }
    }

// ----------------------------------------------------------------------------
// CChatBtServiceAdvertiser::IsAdvertising()
// Does the SDP database contain a record for this service.
// ----------------------------------------------------------------------------
//
TBool CChatBtServiceAdvertiser::IsAdvertising()
    {
    return iRecord != 0;
    }

// End of File

⌨️ 快捷键说明

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