diff -r f742655b05bf -r d38647835c2e commsconfig/cscengine/src/cscengcchhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsconfig/cscengine/src/cscengcchhandler.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,323 @@ +/* +* Copyright (c) 2007-2010 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: For handling interactions betweed UI and CCH. +* +*/ + + +#include + +#include "cscenglogger.h" +#include "cscengcchhandler.h" +#include "mcscengcchobserver.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCEngCCHHandler::CCSCEngCCHHandler( MCSCEngCCHObserver& aObserver ) : + iObserver( aObserver ) + { + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CCSCEngCCHHandler::ConstructL() + { + CSCENGDEBUG( "CCSCEngCCHHandler::ConstructL - begin" ); + + iCchClientApi = CCch::NewL(); + + CSCENGDEBUG( "CCSCEngCCHHandler::ConstructL - end" ); + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CCSCEngCCHHandler* CCSCEngCCHHandler::NewL( + MCSCEngCCHObserver& aObserver ) + { + CCSCEngCCHHandler* self = new ( ELeave ) CCSCEngCCHHandler( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCEngCCHHandler::~CCSCEngCCHHandler() + { + CSCENGDEBUG( "CCSCEngCCHHandler::~CCSCEngCCHHandler - begin" ); + + delete iCchClientApi; + + CSCENGDEBUG( "CCSCEngCCHHandler::~CCSCEngCCHHandler - end" ); + } + + +// --------------------------------------------------------------------------- +// Disable service. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngCCHHandler::DisableService( TInt aServiceId ) + { + CCchService* service = iCchClientApi->GetService( aServiceId ); + + TInt err( KErrNone ); + if ( service ) + { + service->SetObserver( *this ); + err = service->Disable( ECCHUnknown ); + } + else + { + err = KErrArgument; + } + + return err; + } + + +// --------------------------------------------------------------------------- +// Check is service disabled +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CCSCEngCCHHandler::IsServiceDisabled( TInt aServiceId ) + { + TBool disabled( ETrue ); + + if ( !IsDisabled( aServiceId, ECCHVoIPSub ) ) return EFalse; + if ( !IsDisabled( aServiceId, ECCHPresenceSub ) ) return EFalse; + if ( !IsDisabled( aServiceId, ECCHIMSub ) ) return EFalse; + if ( !IsDisabled( aServiceId, ECCHVMBxSub ) ) return EFalse; + + return disabled; + } + +// --------------------------------------------------------------------------- +// Check is service is valid +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CCSCEngCCHHandler::IsServiceValidL( TInt aServiceId ) + { + TBool validService( EFalse ); + + TSupportedSubServices supportedSubServices; + SupportedSubServicesL( aServiceId, supportedSubServices ); + + // Service is valid if some subservice is supported + if ( supportedSubServices.iVoIP || supportedSubServices.iIm || + supportedSubServices.iPresence || supportedSubServices.iVmbx ) + { + validService = ETrue; + } + + return validService; + } + +// --------------------------------------------------------------------------- +// Get supported subservices. +// --------------------------------------------------------------------------- +// +EXPORT_C void CCSCEngCCHHandler::SupportedSubServicesL( + TInt aServiceId, TSupportedSubServices& aSupSubServices ) + { + // Create new cch client for access the latest service info data. + CCchService* service = + CCch::NewLC()->GetService( aServiceId ); + + TBool supported( EFalse ); + + if ( service ) + { + service->IsSupported( ECCHVoIPSub, supported ); + aSupSubServices.iVoIP = supported; + + service->IsSupported( ECCHPresenceSub, supported ); + aSupSubServices.iPresence = supported; + + service->IsSupported( ECCHIMSub, supported ); + aSupSubServices.iIm = supported; + + service->IsSupported( ECCHVMBxSub, supported ); + aSupSubServices.iVmbx = supported; + } + + CleanupStack::PopAndDestroy(); // cch + + CSCENGDEBUG2( + "CCSCEngCCHHandler::SupportedSubServicesL VoIP=%d", + aSupSubServices.iVoIP ); + CSCENGDEBUG2( + "CCSCEngCCHHandler::SupportedSubServicesL Presence=%d", + aSupSubServices.iPresence ); + CSCENGDEBUG2( + "CCSCEngCCHHandler::SupportedSubServicesL IM=%d", + aSupSubServices.iIm ); + CSCENGDEBUG2( + "CCSCEngCCHHandler::SupportedSubServicesL VMBX=%d", + aSupSubServices.iVmbx ); + } + +// --------------------------------------------------------------------------- +// Get cch connection parameter (RBuf). +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngCCHHandler::GetConnectionParameter( + TInt aServiceId, + TCchConnectionParameter aConnParam, + RBuf& aConnParamValue ) + { + CSCENGDEBUG( "CCSCEngCCHHandler::GetConnectionParameter" ); + + CCchService* service = + iCchClientApi->GetService( aServiceId ); + + TInt err( KErrNone ); + if ( service ) + { + err = service->GetConnectionParameter( + ECCHUnknown, aConnParam, aConnParamValue ); + } + else + { + err = KErrArgument; + } + + return err; + } + + +// --------------------------------------------------------------------------- +// Get cch connection parameter (TInt). +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngCCHHandler::GetConnectionParameter( + TInt aServiceId, + TCchConnectionParameter aConnParam, + TInt& aConnParamValue ) + { + CSCENGDEBUG( "CCSCEngCCHHandler::GetConnectionParameter" ); + + CCchService* service = + iCchClientApi->GetService( aServiceId ); + + + TInt err( KErrNone ); + if ( service ) + { + err = service->GetConnectionParameter( + ECCHUnknown, aConnParam, aConnParamValue ); + } + else + { + err = KErrArgument; + } + + return err; + } + + +// --------------------------------------------------------------------------- +// Set cch connection parameter. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngCCHHandler::SetConnectionParameter( + TInt aServiceId, + TCchConnectionParameter aConnParam, + const TDesC& aConnParamValue ) + { + CSCENGDEBUG( "CCSCEngCCHHandler::SetConnectionParameter" ); + + CCchService* service = + iCchClientApi->GetService( aServiceId ); + + TInt err( KErrNone ); + if ( service ) + { + err =service->SetConnectionParameter( + ECCHUnknown, aConnParam, aConnParamValue ); + } + else + { + err = KErrArgument; + } + + return err; + } + +// --------------------------------------------------------------------------- +// CCSCEngCCHHandler::IsDisabled +// --------------------------------------------------------------------------- +// +TBool CCSCEngCCHHandler::IsDisabled( + TInt aServiceId, + TCCHSubserviceType aType ) + { + TBool disabled( EFalse ); + + CCchService* service = + iCchClientApi->GetService( aServiceId ); + + if ( service ) + { + TCchServiceStatus status; + TInt err = service->GetStatus( aType, status ); + + if ( KErrNotFound == err || + ( KErrNone == err && + ( ECCHUninitialized == status.State() || + ECCHDisabled == status.State() ) ) ) + { + disabled = ETrue; + } + } + + return disabled; + } + +// --------------------------------------------------------------------------- +// From class MCchServiceStatusObserver +// --------------------------------------------------------------------------- +// +void CCSCEngCCHHandler::ServiceStatusChanged( + TInt aServiceId, + TCCHSubserviceType aType, + const TCchServiceStatus& aServiceStatus ) + { + CSCENGDEBUG( "CCSCEngCCHHandler::ServiceStatusChanged" ); + + if ( ECCHDisabled == aServiceStatus.State() ) + { + CCchService* service = + iCchClientApi->GetService( aServiceId ); + + if ( service ) + { + service->RemoveObserver(); + } + } + + iObserver.ServiceStatusChanged( + aServiceId, + aType, + aServiceStatus ); + }