diff -r f742655b05bf -r d38647835c2e convergedconnectionhandler/cchclientapi/src/cchuicchhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedconnectionhandler/cchclientapi/src/cchuicchhandler.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,345 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Provider access to CCH +* +*/ + + +#include "cchuilogger.h" +#include "cchuicchhandler.h" + + +// ======== MEMBER FUNCTIONS ======== + +CCchUiCchHandler::CCchUiCchHandler( CCch& aCch ): + iCchClientApi( aCch ) + { + } + +CCchUiCchHandler* CCchUiCchHandler::NewL( CCch& aCch ) + { + CCchUiCchHandler* self = + new ( ELeave ) CCchUiCchHandler( aCch ); + return self; + } + +CCchUiCchHandler::~CCchUiCchHandler() + { + CCHUIDEBUG( "CCchUiCchHandler::~CCchUiCchHandler - IN" ); + CCHUIDEBUG( "CCchUiCchHandler::~CCchUiCchHandler - OUT" ); + } + +// --------------------------------------------------------------------------- +// Gets snap that service uses. +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::GetConnectionSnapIdL( + TInt aServiceId, TInt& aSnapId, TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::GetConnectionSnapIdL - IN" ); + + CCchService* service = + iCchClientApi.GetService( aServiceId ); + + User::LeaveIfNull( service ); + + aErr = service->GetConnectionParameter( + ECCHUnknown, ECchSnapId, aSnapId ); + + CCHUIDEBUG( "CCchUiCchHandler::GetConnectionSnapIdL - OUT" ); + } + +// --------------------------------------------------------------------------- +// Sets snap for service. +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::SetConnectionSnapIdL( + TInt aServiceId, TInt aSnapId, TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::SetConnectionSnapIdL - IN" ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + aErr = service->SetConnectionParameter( + ECCHUnknown, ECchSnapId, aSnapId ); + + CCHUIDEBUG( "CCchUiCchHandler::SetConnectionSnapIdL - OUT" ); + } + +// --------------------------------------------------------------------------- +// Gets service username. +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::GetUsernameL( + TInt aServiceId, RBuf& aUserName, TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::GetUsernameL - IN" ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + aErr = service->GetConnectionParameter( + ECCHUnknown, ECchUsername, aUserName ); + + CCHUIDEBUG( "CCchUiCchHandler::GetUsernameL - OUT" ); + } + +// --------------------------------------------------------------------------- +// Sets username for service. +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::SetUsernameL( + TCCHUiNotifierParams aResultParams, TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::SetUsernameL - IN" ); + + CCchService* service = + iCchClientApi.GetService( aResultParams.iServiceId ); + User::LeaveIfNull( service ); + + aErr = service->SetConnectionParameter( + ECCHUnknown, ECchUsername, aResultParams.iUsername ); + + CCHUIDEBUG( "CCchUiCchHandler::SetUsernameL - OUT" ); + } + +// --------------------------------------------------------------------------- +// Sets password for service. +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::SetPasswordL( + TCCHUiNotifierParams aResultParams, TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::SetPasswordL - IN" ); + + CCchService* service = + iCchClientApi.GetService( aResultParams.iServiceId ); + User::LeaveIfNull( service ); + + aErr = service->SetConnectionParameter( + ECCHUnknown, ECchPassword, aResultParams.iPwd ); + + CCHUIDEBUG( "CCchUiCchHandler::SetPasswordL - OUT" ); + } + +// --------------------------------------------------------------------------- +// Starts observing for service events +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::StartObservingL( + TUint aServiceId, MCchServiceStatusObserver& aObserver ) + { + CCHUIDEBUG2( "CCchUiCchHandler::StartObservingL: service: %d", + aServiceId ); + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + TInt err = service->AddObserver( aObserver ); + + if ( KErrNone != err && KErrAlreadyExists != err ) + { + CCHUIDEBUG2( "CCchUiCchHandler::StartObservingL: ERR: %d", + err ); + + User::Leave( err ); + } + } + +// --------------------------------------------------------------------------- +// Enables service +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::EnableL( TUint aServiceId ) + { + CCHUIDEBUG( "CCchUiCchHandler::EnableL - IN" ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + service->Enable( ECCHUnknown ); + + CCHUIDEBUG( "CCchUiCchHandler::EnableL - OUT" ); + } + +// --------------------------------------------------------------------------- +// Disables service +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::DisableL( TUint aServiceId ) + { + CCHUIDEBUG( "CCchUiCchHandler::DisableL - IN" ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + service->Disable( ECCHUnknown ); + + CCHUIDEBUG( "CCchUiCchHandler::DisableL - OUT" ); + } + +// --------------------------------------------------------------------------- +// CCchUiCchHandler::AllSubservicesInStateL +// --------------------------------------------------------------------------- +// +TBool CCchUiCchHandler::AllSubservicesInStateL( + TUint aServiceId, + TCCHSubserviceState aState ) + { + CCHUIDEBUG( "CCchUiCchHandler::AllSubservicesInStateL - IN" ); + CCHUIDEBUG2( "CCchUiCchHandler::AllSubservicesInStateL : %d", aState ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + RArray types; + CleanupClosePushL( types ); + types.AppendL( ECCHVoIPSub ); + types.AppendL( ECCHPresenceSub ); + types.AppendL( ECCHIMSub ); + types.AppendL( ECCHVMBxSub ); + + TBool response( ETrue ); + + for ( TInt i( 0 ) ; i < types.Count() ; i++ ) + { + TBool supported( EFalse ); + TInt err = service->IsSupported( types[ i ], supported ); + + if ( supported && !err ) + { + TCCHSubserviceState state = + GetServiceStateL( aServiceId, types[ i ], err ); + + if ( aState != state && !err ) + { + response = EFalse; + i = types.Count(); // End loop + } + } + } + + CleanupStack::PopAndDestroy( &types ); + + CCHUIDEBUG2( "CCchUiCchHandler::AllSubservicesInStateL : %d", response ); + CCHUIDEBUG( "CCchUiCchHandler::AllSubservicesInStateL - OUT" ); + return response; + } + +// --------------------------------------------------------------------------- +// Stops observing for specific service +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::StopObservingL( + TUint aServiceId, MCchServiceStatusObserver& aObserver ) + { + CCHUIDEBUG( "CCchUiCchHandler::StopObservingL - IN" ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + TInt err = service->RemoveObserver( aObserver ); + + if ( KErrNone != err && KErrNotFound != err ) + { + CCHUIDEBUG2( "CCchUiCchHandler::StopObservingL: ERR: %d", + err ); + + User::Leave( err ); + } + + CCHUIDEBUG( "CCchUiCchHandler::StopObservingL - OUT"); + } + +// --------------------------------------------------------------------------- +// For checking service state. +// --------------------------------------------------------------------------- +// +TCCHSubserviceState CCchUiCchHandler::GetServiceStateL( + TUint aServiceId, TCCHSubserviceType aSubServiceType, TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::GetServiceStateL"); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + TCchServiceStatus serviceStatus; + aErr = service->GetStatus( aSubServiceType, serviceStatus ); + + CCHUIDEBUG2( "GetServiceStateL STATE=%d", serviceStatus.State() ); + + return serviceStatus.State(); + } + +// --------------------------------------------------------------------------- +// For getting current connections iap id. +// --------------------------------------------------------------------------- +// +void CCchUiCchHandler::GetCurrentConnectionIapIdL( + TUint aServiceId, + TCCHSubserviceType aSubServiceType, + TInt& aIapId, + TInt& aErr ) + { + CCHUIDEBUG( "CCchUiCchHandler::GetCurrentConnectionIapIdL - IN" ); + + CCchService* service = iCchClientApi.GetService( aServiceId ); + User::LeaveIfNull( service ); + + aErr = service->GetConnectionParameter( + aSubServiceType, + ECchIapId, + aIapId ); + + // Check that atleast some subservice is really in enabled state + //(connection exists), if not set iap id to 0 + if ( aIapId ) + { + TBool enabledSubServiceFound( EFalse ); + + RArray types; + CleanupClosePushL( types ); + types.AppendL( ECCHVoIPSub ); + types.AppendL( ECCHPresenceSub ); + types.AppendL( ECCHIMSub ); + types.AppendL( ECCHVMBxSub ); + + for ( TInt i( 0 ) ; i < types.Count() ; i++ ) + { + TBool supported( EFalse ); + TInt err = service->IsSupported( types[ i ], supported ); + + if ( supported && !err ) + { + TCCHSubserviceState state = GetServiceStateL( + aServiceId, types[ i ], err ); + + if ( ECCHEnabled == state && !err ) + { + // Enabled subservice found, end loop + enabledSubServiceFound = ETrue; + i = types.Count(); + } + } + } + + // Set aIapId to zero if no subservices in enabled state + if ( !enabledSubServiceFound ) + { + aIapId = 0; + } + + CleanupStack::PopAndDestroy( &types ); + } + + CCHUIDEBUG( "CCchUiCchHandler::GetCurrentConnectionIapIdL - OUT" ); + }