diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstengine/src/cvimpstenginevoipsubservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstengine/src/cvimpstenginevoipsubservice.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,292 @@ +/* +* Copyright (c) 2008 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: Class that capsulates single service data members +* +*/ + + +// INCLUDES +#include "cvimpstenginevoipsubservice.h" + +#include "cvimpstenginecchhandler.h" +#include "tvimpstconsts.h" +#include "cvimpstengineservicetablefetcher.h" +#include "mvimpstengineserviceconnectioneventobserver.h" +//debug +#include "uiservicetabtracer.h" + + +// ================= MEMBER FUNCTIONS ======================= +// --------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::NewL +// +// --------------------------------------------------------- +CVIMPSTEngineVOIPSubService* CVIMPSTEngineVOIPSubService::NewL( TUint32 aServiceId, + CVIMPSTEngineCchHandler& aCchHandler, + CVIMPSTEngineServiceTableFetcher& aTableFetcher, + MVIMPSTEngineServiceConnectionEventObserver& aObserver + ) + { + TRACER_AUTO; + TRACE( "aServiceId: %d", aServiceId); + + CVIMPSTEngineVOIPSubService* self = CVIMPSTEngineVOIPSubService::NewLC(aServiceId,aCchHandler, + aTableFetcher, aObserver); + CleanupStack::Pop( self ); + + return self; + } + + +// --------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::NewLC +// +// --------------------------------------------------------- + +CVIMPSTEngineVOIPSubService* CVIMPSTEngineVOIPSubService::NewLC( TUint32 aServiceId, + CVIMPSTEngineCchHandler& aCchHandler, + CVIMPSTEngineServiceTableFetcher& aTableFetcher, + MVIMPSTEngineServiceConnectionEventObserver& aObserver ) + { + TRACER_AUTO; + TRACE( "aServiceId: %d", aServiceId); + + CVIMPSTEngineVOIPSubService* self = new (ELeave) CVIMPSTEngineVOIPSubService( + aServiceId,aCchHandler,aTableFetcher, + aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( ); + + return self; + } + +// --------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::~CVIMPSTEngineVOIPSubService +// +// --------------------------------------------------------- + +CVIMPSTEngineVOIPSubService::~CVIMPSTEngineVOIPSubService() + { + TRACER_AUTO; + + iCchHandler.UnRegisterCchObserver(ECCHVoIPSub); + + } + + +// --------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::ConstructL +// +// --------------------------------------------------------- + +void CVIMPSTEngineVOIPSubService::ConstructL( ) + { + TRACER_AUTO; + + TCCHSubserviceState serviceState = ECCHUninitialized; + TInt error = iCchHandler.GetServiceState( + iServiceId, ECCHVoIPSub, serviceState ); + + iServiceState = ResolveServiceState(serviceState, error); + + iCchHandler.RegisterCchObserverL(this,ECCHVoIPSub); + + TRACE( "ResolveServiceState returned ServiceState: %d", iServiceState ); + + + } + + +// --------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::CVIMPSTEngineVOIPSubService +// +// --------------------------------------------------------- + +CVIMPSTEngineVOIPSubService::CVIMPSTEngineVOIPSubService( TUint32 aServiceId, + CVIMPSTEngineCchHandler& aCchHandler, + CVIMPSTEngineServiceTableFetcher& aTableFetcher, + MVIMPSTEngineServiceConnectionEventObserver& aObserver) : +iServiceId(aServiceId), +iCchHandler(aCchHandler), +iTableFetcher(aTableFetcher), +iType (TVIMPSTEnums::EVoip), +iObserver(aObserver) + { + + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::CchEventOccuredL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineVOIPSubService::CchEventOccuredL( TUint /*aServiceId*/, + TCCHSubserviceState aState, TInt aServiceError ) + { + TRACER_AUTO; + TRACE( " TCCHSubserviceState : %d, ServiceErr: %d",aState, aServiceError ); + + if ( aServiceError && ECCHDisabled != aState ) + { + //we might even end up in waiting for connection state for all + //those service which are ALR enabled + //So better check here if you get any CCH errors + iServiceState = ResolveServiceState( aState, aServiceError ); + iObserver.HandleServceConnectionEventL(); + DoHandleCchErrorL( aServiceError ); + } + else + { + iServiceState = ResolveServiceState( aState, aServiceError ); + iObserver.HandleServceConnectionEventL(); + } + + + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::DoHandleCchErrorL() +// --------------------------------------------------------------------------- +// +void CVIMPSTEngineVOIPSubService::DoHandleCchErrorL( + TInt aServiceError ) + { + TRACER_AUTO; + TRACE(" ServiceErr: %d", aServiceError ); + + /* + MCchUi& cchUi = iCchHandler.CchUiApi(); + + switch ( aServiceError ) + { + + case KCCHErrorNetworkLost: + { + cchUi.ShowDialogL( iServiceId, MCchUiObserver::ECchUiDialogTypeNoConnectionAvailable ); + break; + } + + default: + { + break; + } + + } + */ + + + } + + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::ResolveServiceState +// --------------------------------------------------------------------------- +// +TVIMPSTEnums::TVIMPSTRegistrationState CVIMPSTEngineVOIPSubService::ResolveServiceState( + TCCHSubserviceState aState, + TInt aServiceError ) + { + TRACER_AUTO; + + TVIMPSTEnums::TVIMPSTRegistrationState state = TVIMPSTEnums::ESVCENotRegistered; + + TRACE( " iServiceId: %d, ServiceState: %d", iServiceId, aState ); + + TBool handleServiceStates = ETrue; + if ( aServiceError && ECCHDisabled != aState ) + { + //Only if the Service supports ALR, the state can goto WaitingForNetwork + //Still API from CCH is required to know whether ALR is supported or not + if ( (KCCHErrorInvalidSettings != aServiceError) && (ECCHConnecting == aState) ) + { + TRACE( "ESVCEWaitingForNetwork" ); + handleServiceStates = EFalse; + state = TVIMPSTEnums::ESVCEWaitingForNetwork; + } + } + + if ( handleServiceStates ) + { + switch ( aState ) + { + case ECCHEnabled: + { + TRACE( " ESVCERegistered" ); + state = TVIMPSTEnums::ESVCERegistered; + } + break; + + case ECCHDisconnecting: + { + TRACE( " ESVCENetworkDisConnecting"); + state = TVIMPSTEnums::ESVCENetworkDisConnecting; + } + break; + + case ECCHUninitialized: + case ECCHDisabled: + { + TRACE( " ESVCENotRegistered" ); + state = TVIMPSTEnums::ESVCENotRegistered; + } + break; + + case ECCHConnecting: + { + TRACE(" ESVCENetworkConnecting" ); + state = TVIMPSTEnums::ESVCENetworkConnecting; + } + break; + + default: + break; + } + } + + + return state; + + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::SubServiceState +// --------------------------------------------------------------------------- +// +TVIMPSTEnums::TVIMPSTRegistrationState CVIMPSTEngineVOIPSubService::SubServiceState() const + { + TRACER_AUTO; + TRACE( " ServiceId: %d ServiceState: %d",iServiceId, iServiceState ); + return iServiceState; + } + + +// --------------------------------------------------------------------------- +// CVIMPSTEngineVOIPSubService::Type +// --------------------------------------------------------------------------- +// +TVIMPSTEnums::SubServiceType CVIMPSTEngineVOIPSubService::Type() const + { + TRACER_AUTO; + TRACE( "Type: %d", iType ); + TRACE( " [0x%x]", this ); + return iType; + } + + + +// End of File +