convergedconnectionhandler/cchclientapi/src/cchuicchhandler.cpp
changeset 0 a4daefaec16c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchclientapi/src/cchuicchhandler.cpp	Mon Jan 18 20:12:36 2010 +0200
@@ -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<TCCHSubserviceType> 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<TCCHSubserviceType> 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" );
+    }