uiservicetab/vimpstengine/src/cvimpstenginevoipsubservice.cpp
branchRCL_3
changeset 23 9a48e301e94b
--- /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
+