diff -r 02103bf20ee5 -r 90dbfc0435e3 bluetoothengine/headsetsimulator/core/src/ProfileManager/hsprofilemanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/headsetsimulator/core/src/ProfileManager/hsprofilemanager.cpp Wed Sep 15 15:59:44 2010 +0200 @@ -0,0 +1,317 @@ +/* + * Component Name: Headset Simulator + * Author: Comarch S.A. + * Version: 1.0 + * Copyright (c) 2010 Comarch S.A. + * + * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on + * the basis of the Member Contribution Agreement entered between Comarch S.A. + * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be + * used only in accordance with the terms and conditions of the Agreement. + * Any other usage, duplication or redistribution of this Software is not + * allowed without written permission of Comarch S.A. + * + */ + +#include "hsprofilemanager.h" +#include "debug.h" + +CHsProfileManager::CHsProfileManager() + { + } + +CHsProfileManager::~CHsProfileManager() + { + TRACE_FUNC_ENTRY + DestroyProfile(); + DestroyCodL(); + DestroySdpL(); + REComSession::FinalClose(); + + TRACE_FUNC_EXIT + } + +CHsProfileManager* CHsProfileManager::NewLC() + { + CHsProfileManager* self = new ( ELeave ) CHsProfileManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CHsProfileManager* CHsProfileManager::NewL() + { + CHsProfileManager* self = CHsProfileManager::NewLC(); + CleanupStack::Pop( self ); // self; + return self; + } + +void CHsProfileManager::ConstructL() + { + + } + +void CHsProfileManager::LookupAndManageProfileL( const TUid aProfileUid ) + { + TRACE_FUNC_ENTRY + + DestroyProfile(); + iProfilePlugin = CHsProfileBase::NewL( aProfileUid ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LookupAndManageProfileL( const TDesC8 &aProfileName ) + { + TRACE_FUNC_ENTRY + + DestroyProfile(); + iProfilePlugin = CHsProfileBase::NewL( aProfileName ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::UnloadProfile() + { + TRACE_FUNC_ENTRY + + if ( iProfilePlugin ) + { + delete iProfilePlugin; + iProfilePlugin = NULL; + } + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LookupAndManageSdpL( const TUid aSdpUid ) + { + TRACE_FUNC_ENTRY + + DestroySdpL(); + + iSdpPlugin = CHsSdpBase::NewL( aSdpUid ); + iSdpPlugin->SetServicePort( iSdpServicePort ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LookupAndManageSdpL( const TDesC8 &aSdpName ) + { + TRACE_FUNC_ENTRY + + DestroySdpL(); + + iSdpPlugin = CHsSdpBase::NewL( aSdpName ); + iSdpPlugin->SetServicePort( iSdpServicePort ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LoadSdpL() + { + TRACE_FUNC_ENTRY + + User::LeaveIfNull( iSdpPlugin ); + if ( iSdpSet ) + { + TRAP_IGNORE( iSdpPlugin->DeleteSdpRecordL() ); + iSdpSet = EFalse; + } + iSdpPlugin->SetServicePort( iSdpServicePort ); + iSdpPlugin->CreateSdpRecordL(); + iSdpSet = ETrue; + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::UnloadSdpL() + { + TRACE_FUNC_ENTRY + + User::LeaveIfNull( iSdpPlugin ); + if ( iSdpSet ) + { + iSdpPlugin->DeleteSdpRecordL(); + iSdpSet = EFalse; + } + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::SetSdpServicePort( TInt aPort ) + { + TRACE_FUNC_ENTRY + if ( iSdpPlugin ) + { + iSdpPlugin->SetServicePort( aPort ); + } + iSdpServicePort = aPort; + TRACE_FUNC_EXIT + } + +void CHsProfileManager::RefreshSdp() + { + TRACE_FUNC_ENTRY + if ( iSdpPlugin ) + { + TRAP_IGNORE( iSdpPlugin->DeleteSdpRecordL() ); + iSdpSet = EFalse; + TRAPD( err, iSdpPlugin->CreateSdpRecordL() ); + if ( KErrNone == err ) + { + iSdpSet = ETrue; + } + } + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LookupAndManageCodL( const TUid aCoDUid ) + { + TRACE_FUNC_ENTRY + + DestroyCodL(); + iCoDPlugin = CHsCoDBase::NewL( aCoDUid ); + User::LeaveIfError( iCoDPlugin->SaveOldCod() ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LookupAndManageCodL( const TDesC8 &aCoDName ) + { + TRACE_FUNC_ENTRY + + DestroyCodL(); + iCoDPlugin = CHsCoDBase::NewL( aCoDName ); + User::LeaveIfError( iCoDPlugin->SaveOldCod() ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::LoadCodL() + { + TRACE_FUNC_ENTRY + if ( iCoDPlugin ) + { + iCoDPlugin->SetNewCodL(); + } + TRACE_FUNC_EXIT + } + +void CHsProfileManager::UnloadCodL() + { + TRACE_FUNC_ENTRY + if ( iCoDPlugin ) + { + User::LeaveIfError( iCoDPlugin->RestoreOldCod() ); + } + TRACE_FUNC_EXIT + } + +void CHsProfileManager::DestroyProfile() + { + TRACE_FUNC_ENTRY + if ( iProfilePlugin ) + { + delete iProfilePlugin; + iProfilePlugin = NULL; + } + TRACE_FUNC_EXIT + } + +void CHsProfileManager::DestroySdpL() + { + TRACE_FUNC_ENTRY + if ( iSdpPlugin ) + { + iSdpPlugin->DeleteSdpRecordL(); + delete iSdpPlugin; + iSdpPlugin = NULL; + } + TRACE_FUNC_EXIT + } + +void CHsProfileManager::DestroyCodL() + { + TRACE_FUNC_ENTRY + TInt err; + if ( iCoDPlugin ) + { + err = iCoDPlugin->RestoreOldCod(); + TRACE_INFO((_L("RestoreOldCoD method returned value %d"), err)) + delete iCoDPlugin; + iCoDPlugin = NULL; + User::LeaveIfError( err ); + } + TRACE_FUNC_EXIT + } + +TBool CHsProfileManager::IsSdpPluginLoaded() + { + return iSdpPlugin ? ETrue : EFalse; + } + +TBool CHsProfileManager::IsProfilePluginLoaded() + { + return iProfilePlugin ? ETrue : EFalse; + } + +TBool CHsProfileManager::IsCoDPluginLoaded() + { + return iCoDPlugin ? ETrue : EFalse; + } + +void CHsProfileManager::HandleCommandL( const TDesC8 &aCommandsIn, + TDes8 &aCommandOut, TBool aFromAG ) + { + TRACE_FUNC_ENTRY + User::LeaveIfNull( iProfilePlugin ); + + iProfilePlugin->HandleCommandL( aCommandsIn, aCommandOut, aFromAG ); + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::HandleClientDisconnected( TInt aErr ) + { + TRACE_FUNC_ENTRY + if ( iProfilePlugin ) + { + iProfilePlugin->HandleClientDisconnected( aErr ); + } + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::HandleClientConnected( TDes8& aCommandOut ) + { + TRACE_FUNC_ENTRY + if ( iProfilePlugin ) + { + iProfilePlugin->HandleClientConnected( aCommandOut ); + } + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::AcceptIncomingCallL( TDes8& aProfileResponse ) + { + TRACE_FUNC_ENTRY + if ( iProfilePlugin ) + { + iProfilePlugin->HandleAcceptCallL( aProfileResponse ); + } + + TRACE_FUNC_EXIT + } + +void CHsProfileManager::ReleaseOngoingCallL( TDes8& aProfileResponse ) + { + TRACE_FUNC_ENTRY + if ( iProfilePlugin ) + { + iProfilePlugin->HandleReleaseCallL( aProfileResponse ); + } + TRACE_FUNC_EXIT + } +