--- /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" );
+ }