--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/callcontinuity/settingsreader/src/vccsettingsreader.cpp Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,295 @@
+/*
+* Copyright (c) 2007-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: Implements VCC setting reader
+*
+*/
+
+
+
+#include <spsettings.h>
+#include <spproperty.h>
+#include <spdefinitions.h>
+#include <spentry.h>
+
+#include "vccsettingsreader.h"
+#include "vccdefinitions.h"
+
+#include "rubydebug.h"
+
+// CS Service Entry name in SP settings table
+_LIT( KCSEntryName, "CS" );
+
+
+// ---------------------------------------------------------------------------
+// Returns the domain transfer number from sp settings
+// ---------------------------------------------------------------------------
+//
+HBufC* VccSettingsReader::DomainTransferNumberL()
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::GetDomainTransferNumberL" );
+
+ return VccSettingsReader::PropertyValueByNameL( ESubPropertyVccVDN );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the domain transfer URI from sp settings
+// ---------------------------------------------------------------------------
+//
+HBufC* VccSettingsReader::DomainTransferUriL()
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::GetDomainTransferUriL" );
+
+ return VccSettingsReader::PropertyValueByNameL( ESubPropertyVccVDI );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns a VCC property value from SP-settings table by
+// given property name
+// ---------------------------------------------------------------------------
+//
+HBufC* VccSettingsReader::PropertyValueByNameL(
+ TServicePropertyName aPropertyName )
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::GetValueL" );
+
+ // Create settings object and then the property one
+ CSPSettings* settings = CSPSettings::NewLC();
+
+ CSPProperty* property = CSPProperty::NewLC();
+
+ // First we must find what is our vcc service id in sp-settings table
+ // This is done by searching the vcc entry name.
+ TInt vccServiceId( KErrNone );
+
+ vccServiceId = VccSettingsReader::VccServiceIdL();
+
+ // If the VCC service id was not found, leave.
+ User::LeaveIfError( vccServiceId );
+
+ settings->FindPropertyL( vccServiceId, aPropertyName, *property );
+
+ HBufC* value = HBufC::NewLC( KMaxFileName );
+ TPtr valuePtr = value->Des();
+
+ TInt error = property->GetValue( valuePtr );
+
+ User::LeaveIfError( error );
+
+ // Cleanup and return
+ CleanupStack::Pop( value );
+ CleanupStack::PopAndDestroy( property );
+ CleanupStack::PopAndDestroy( settings );
+
+ RUBY_DEBUG2( "..Value of %d = %S", aPropertyName, value );
+
+ return value;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns service id of the CS service
+// ---------------------------------------------------------------------------
+//
+TInt VccSettingsReader::CSServiceIdL()
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::CSServiceIdL" );
+
+ // Get the service id by entry name
+ return VccSettingsReader::ServiceIdByNameL( KCSEntryName );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns service id of the VoIP service
+// ---------------------------------------------------------------------------
+//
+TInt VccSettingsReader::VoIPServiceIdL()
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::VoIPServiceIdL" );
+
+ // Get the VoIP service id.
+ return VccSettingsReader::DoVoIPServiceIdL(
+ ESubPropertyVccDtVoipServiceId );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the id of VCC enabled VoIP service.
+// ---------------------------------------------------------------------------
+//
+TInt VccSettingsReader::DoVoIPServiceIdL(
+ TServicePropertyName aPropertyName )
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::DoVoIPServiceIdL" );
+
+ // Create settings object and then the property one
+ CSPSettings* settings = CSPSettings::NewLC();
+
+ CSPProperty* property = CSPProperty::NewLC();
+
+ // First we must find what is our vcc service id in sp-settings table
+ // This is done by searching the vcc entry name.
+
+ TInt vccServiceId( KErrNone );
+
+ vccServiceId = VccSettingsReader::VccServiceIdL();
+
+ // If the VCC service id was not found, leave.
+ User::LeaveIfError( vccServiceId );
+
+ // Now get the VCC enabled VoIP service id. The id is
+ // saved into VCC settings.
+ // First, get the property and then use the property to get its value.
+ settings->FindPropertyL( vccServiceId, aPropertyName, *property );
+
+ TInt voipId;
+ TInt error = property->GetValue( voipId );
+
+ User::LeaveIfError( error );
+
+ // Cleanup and return
+ CleanupStack::PopAndDestroy( property );
+ CleanupStack::PopAndDestroy( settings );
+
+ RUBY_DEBUG2( "..Value of %d = %d", aPropertyName, voipId );
+
+ return voipId;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the service id by given service entry name
+// ---------------------------------------------------------------------------
+//
+TInt VccSettingsReader::ServiceIdByNameL( const TDesC& aEntryName )
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::ServiceIdL" );
+ RUBY_DEBUG1( "..Entry name to search = %S", &aEntryName );
+
+ // Array of service provider IDs
+ // is defined as: typedef RArray<TServiceId> RIdArray
+ // in spdefinitions.h
+ RIdArray serviceIdArray;
+
+ // KErrNotFound is the default return value if the entry
+ // is not found.
+ TInt serviceId( KErrNotFound );
+
+ CleanupClosePushL( serviceIdArray );
+
+ CSPSettings* settings = CSPSettings::NewLC();
+
+ TInt error( KErrNone );
+
+ // This should leave if error occurs
+ error = settings->FindServiceIdsL( serviceIdArray );
+
+ User::LeaveIfError( error );
+
+ TBool foundEntry( EFalse );
+
+ for ( TInt i( 0 ); i < serviceIdArray.Count() && !foundEntry; i++ )
+ {
+ CSPEntry* entry = CSPEntry::NewLC();
+ error = settings->FindEntryL( serviceIdArray[i], *entry );
+
+ User::LeaveIfError( error );
+
+ if ( entry->GetServiceName() == aEntryName )
+ {
+ serviceId = entry->GetServiceId();
+ foundEntry = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( entry );
+ }
+ CleanupStack::PopAndDestroy( settings );
+ CleanupStack::PopAndDestroy( &serviceIdArray );
+
+ RUBY_DEBUG1( "..Service id = %d", serviceId );
+
+ return serviceId;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns service id of the VCC service
+// ---------------------------------------------------------------------------
+//
+TInt VccSettingsReader::VccServiceIdL()
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::VccServiceIdL" );
+
+ TInt vccServiceId( KErrNone );
+ TInt error( KErrNone );
+
+ // Array of service provider IDs
+ // is defined as: typedef RArray<TServiceId> RIdArray
+ // in spdefinitions.h
+ RIdArray serviceIdArray;
+
+ CleanupClosePushL( serviceIdArray );
+
+ CSPSettings* settings = CSPSettings::NewLC();
+
+ // This should leave if error occurs
+ error = settings->FindServiceIdsL( serviceIdArray );
+
+ User::LeaveIfError( error );
+
+ TBool foundEntry( EFalse );
+
+ for ( TInt i( 0 ); i < serviceIdArray.Count() && !foundEntry; i++ )
+ {
+ CSPProperty* property = CSPProperty::NewLC();
+ error = settings->FindPropertyL( serviceIdArray[i], ESubPropertyVccVDI, *property );
+
+ if( error == KErrNone )
+ {
+ vccServiceId = serviceIdArray[i];
+ foundEntry = ETrue;
+ }
+ CleanupStack::PopAndDestroy( property );
+ }
+ CleanupStack::PopAndDestroy( settings );
+ CleanupStack::PopAndDestroy( &serviceIdArray );
+ RUBY_DEBUG1( "VccService id = %d", vccServiceId );
+
+ return vccServiceId;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns service id VCC should use for specified call provider plugin
+// ---------------------------------------------------------------------------
+//
+TInt VccSettingsReader::ServiceIdL( TInt aCallProviderPluginUid )
+ {
+ RUBY_DEBUG_BLOCK( "VccSettingsReader::ServiceIdL" );
+ TInt id( KErrNone );
+
+ switch ( aCallProviderPluginUid )
+ {
+ case KVccCallProviderPlugId:
+ {
+ id = VccSettingsReader::VccServiceIdL();
+ }break;
+ case KCSCallProviderPlugId:
+ {
+ id = VccSettingsReader::CSServiceIdL();
+ }break;
+ default:
+ {
+ id = VccSettingsReader::VoIPServiceIdL();
+ }break;
+ }
+
+ return id;
+ }
+
+