commsconfig/cscengine/src/cscengcchhandler.cpp
changeset 0 a4daefaec16c
child 20 65a3ef1d5bd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/cscengine/src/cscengcchhandler.cpp	Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2007-2007 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 <cch.h>
+
+#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 )
+    {
+    CCchService* service = 
+               iCchClientApi->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;
+        }
+        
+    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 );                                                                                   
+    }