diff -r 000000000000 -r ff3b6d0fd310 convergedcallengine/serviceselector/src/csssettingshandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedcallengine/serviceselector/src/csssettingshandler.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,313 @@ +/* +* 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: This module contains the implementation of +* : CSsSettingsHandler class +* +*/ + + +// INCLUDE FILES +#include "csssettingshandler.h" +#include "csslogger.h" +#include +#include +#include + +// CONSTANTS +// Default voip service id that is not really a voip capable. +const TInt KSPDefaultVoIPServiceId = 2; + +// ================= MEMBER FUNCTIONS ======================================= + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::CSsSettingsHandler +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSsSettingsHandler::CSsSettingsHandler + ( + // None. + ) + { + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSsSettingsHandler::ConstructL() + { + iSettings = CSPSettings::NewL(); + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSsSettingsHandler* CSsSettingsHandler::NewL + ( + // None. + ) + { + CSsSettingsHandler* self = new ( ELeave ) CSsSettingsHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CSsSettingsHandler::~CSsSettingsHandler + ( + // None. + ) + { + delete iSettings; + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::GetRegisteredServices +// Gets registered services. +// ----------------------------------------------------------------------------- +// +TInt CSsSettingsHandler::GetRegisteredServices + ( + CSsConnectionHandler& aConnection, + RArray& aServiceIds + ) const + { + TRAPD( ret, DoGetRegisteredServicesL( aConnection, + aServiceIds ) ); + + return ret; + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::GetRegisteredServices +// Gets all available services. +// ----------------------------------------------------------------------------- +// +TInt CSsSettingsHandler::GetAllServices + ( + RArray& aServiceIds + ) const + { + TRAPD( ret, DoGetAllServicesL( aServiceIds )); + + return ret; + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::DoGetRegisteredServicesL +// Gets registered services. +// ----------------------------------------------------------------------------- +// +void CSsSettingsHandler::DoGetRegisteredServicesL + ( + CSsConnectionHandler& aConnection, + RArray& aServiceIds + ) const + { + CSSLOGSTRING("CSSelector::RegisteredServices"); + + //Clear array + aServiceIds.Reset(); + + RArray temp; + CleanupClosePushL( temp ); + + // Get all voip service ids. + GetVoipServicesL( temp ); + + for ( TInt ind=0; ind< temp.Count(); ind++ ) + { + // Make sure that the service is registered + if ( aConnection.IsVoipServiceRegistered( temp[ind] ) ) + { + // Registered service found + User::LeaveIfError( aServiceIds.Append( temp[ind] ) ); + } + + } + + CSSLOGSTRING2("CSSelector::RegisteredServices count:%d", + aServiceIds.Count()); + + if ( 0 == aServiceIds.Count() ) + { + // Not any services found, leave. + User::Leave( KErrNotFound ); + } + + CleanupStack::PopAndDestroy( &temp ); + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::DoGetAllServicesL +// Gets all available services. +// ----------------------------------------------------------------------------- +// +void CSsSettingsHandler::DoGetAllServicesL + ( + RArray& aServiceIds + ) const + { + CSSLOGSTRING("CSSelector::AllServices"); + //Clear array + aServiceIds.Reset(); + + // Get voip services + GetVoipServicesL( aServiceIds ); + + CSSLOGSTRING2("CSSelector::AllServices count:%d", aServiceIds.Count()); + + if ( 0 == aServiceIds.Count() ) + { + // Not any services found, leave. + User::Leave( KErrNotFound ); + } + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::GetVoipServicesL +// Gets voip services. +// ----------------------------------------------------------------------------- +// +void CSsSettingsHandler::GetVoipServicesL + ( + RArray& aServiceIds + ) const + { + //Clear array + aServiceIds.Reset(); + + RArray temp; + CleanupClosePushL( temp ); + + // Get all service ids. + User::LeaveIfError( iSettings->FindServiceIdsL( temp ) ); + + for ( TInt ind=0; ind< temp.Count(); ind++ ) + { + // Make sure that the service is a voip capable. + // For some reason the service id 2 is not voip capable + // service (although contains the voip subservice properties) + // so ignore it. + if ( KSPDefaultVoIPServiceId != temp[ind] ) + { + TBool voip( EFalse ); + TRAPD( err, voip = IsVoipServiceL( temp[ind] ) ); + if ( !err && voip ) + { + // Add voip service + User::LeaveIfError( aServiceIds.Append( temp[ind] ) ); + } + } + + } + + CleanupStack::PopAndDestroy( &temp ); + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::IsVoipServiceL +// Checks is the service as voip service. +// ----------------------------------------------------------------------------- +// +TBool CSsSettingsHandler::IsVoipServiceL + ( + TUint aServiceId + ) const + { + CSPProperty* property = CSPProperty::NewLC(); + + TInt ret = iSettings->FindPropertyL( aServiceId, + EPropertyVoIPSubServicePluginId , + *property ); + + CleanupStack::PopAndDestroy( property ); + + // If Voip subservice properties found (ret = KErrNone) then return ETrue. + if ( KErrNone != ret ) + { + return EFalse; + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSsSettingsHandler::GetServiceNamesL +// Checks is the service as voip service. +// ----------------------------------------------------------------------------- +// +void CSsSettingsHandler::GetServiceNamesL + ( + RArray& aServiceIds, + CDesCArray& aServiceNames + ) const + { + if ( 0 == aServiceIds.Count() ) + { + // Empty array, leave. + User::Leave( KErrNotFound ); + } + + // Get names of the services. + User::LeaveIfError( iSettings->FindServiceNamesL( aServiceIds, + aServiceNames ) ); + } + +// --------------------------------------------------------------------------- +// CSsSettingsHandler::BrandIdL +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CSsSettingsHandler::BrandIdL( TInt aServiceId, TDes8& aBrandId ) + { + CSSLOGSTRING( "CSsSettingsHandler::BrandIdL: =>" ); + + CSPEntry* entry = CSPEntry::NewLC(); + const CSPProperty* property; + RBuf brandId; + brandId.CleanupClosePushL(); + brandId.CreateL( KSPMaxDesLength ); + + User::LeaveIfError( + iSettings->FindEntryL( aServiceId, *entry ) ); + + User::LeaveIfError( + entry->GetProperty( property, EPropertyBrandId ) ); + + if ( property ) + { + property->GetValue( brandId ); + } + + if ( brandId.Length() ) + { + aBrandId.Copy( brandId ); + } + + CleanupStack::PopAndDestroy( &brandId ); + CleanupStack::PopAndDestroy( entry ); + + CSSLOGSTRING( "CSsSettingsHandler::BrandIdL: <=" ); + } + +// ================= OTHER EXPORTED FUNCTIONS =============================== + +// End of File