www.pudn.com > S60_Platform_Bluetooth_OBEX_Example.rar > btserviceadvertiser.cpp
/* Copyright (c) 2004, Nokia. All rights reserved */ // INCLUDE FILES #include#include #include #include "BTServiceSearcher.pan" #include "BTServiceAdvertiser.h" // ============================ 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 ) { /** Panic Category */ User::Panic( KPanicServiceAdvertiser, 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