diff -r 65a3ef1d5bd0 -r f742655b05bf richcallsettingsengine/rcse2/src/crcseprofileregistry.cpp --- a/richcallsettingsengine/rcse2/src/crcseprofileregistry.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1764 +0,0 @@ -/* -* Copyright (c) 2002-2010 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: Stores and loads CRCSEProfileEntry to/from data storage. -* -*/ - - - -// INCLUDE FILES -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include "crcseprofileregistry.h" -#include "crcseprofileentry.h" -#include "crcseaudiocodecregistry.h" -#include "rcsepanic.h" -#include "rcseconstants.h" -#include "rcsedefaults.h" -#include "rcseprivatecrkeys.h" -#include "rcselogger.h" - - -const TInt KArrayInitSize = 2; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::CRCSEProfileRegistry -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CRCSEProfileRegistry::CRCSEProfileRegistry() - : CRCSERegistryBase( EVoIPProfile ), - iSIPRegistry( NULL ) - { - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ConstructL() - { - // Check VoIP support from feature manager - FeatureManager::InitializeLibL(); - TBool support = FeatureManager::FeatureSupported( KFeatureIdCommonVoip ); - FeatureManager::UnInitializeLib(); - if ( !support ) - { - User::Leave( KErrNotSupported ); - } - - BaseConstructL(); - iSIPRegistry = CSIPManagedProfileRegistry::NewL( *this ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CRCSEProfileRegistry* CRCSEProfileRegistry::NewL() - { - CRCSEProfileRegistry* self = CRCSEProfileRegistry::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::NewLC -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CRCSEProfileRegistry* CRCSEProfileRegistry::NewLC() - { - CRCSEProfileRegistry* self = new( ELeave ) CRCSEProfileRegistry; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -EXPORT_C CRCSEProfileRegistry::~CRCSEProfileRegistry() - { - RCSELOGSTRING( "CRCSEProfileRegistry::~CRCSEProfileRegistry() - IN" ); - - delete iSIPRegistry; - iSIPProfiles.ResetAndDestroy(); - - RCSELOGSTRING( "CRCSEProfileRegistry::~CRCSEProfileRegistry() - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::FindL -// Start search of profile entry by provider name. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::FindL( - const TDesC& aProviderName, - CRCSEProfileEntry& aFoundEntry ) - { - RCSELOGSTRING2( "CRCSEProfileRegistry::FindL(%S) - IN", &aProviderName ); - - BeginL(); - - RArray entryIds; - CleanupClosePushL( entryIds ); - - // Search IDs of entries that have this service ID - FindIdsByValueL( KColProviderName, - aProviderName, - entryIds ); - - // Search whole entry if ID was found - if ( 0 < entryIds.Count() ) - { - FindEntryL( entryIds[ 0 ], aFoundEntry ); - } - else - { - User::Leave( KErrNotFound ); - } - - // Check that SIP Ids are valid - UpdateSIPProfileLinksL( aFoundEntry ); - - CleanupStack::PopAndDestroy( &entryIds ); - - EndL(); - - RCSELOGSTRING2( "CRCSEProfileRegistry::FindL(%S) - OUT", &aProviderName ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::FindL -// Start search of profile entry by ID. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::FindL( - TUint32 aProfileId, - CRCSEProfileEntry& aFoundEntry ) - { - RCSELOGSTRING2( "CRCSEProfileRegistry::FindL(id=%d) - IN", aProfileId ); - - BeginL(); - - FindEntryL( aProfileId, aFoundEntry ); - - // Check that SIP Ids are valid - UpdateSIPProfileLinksL( aFoundEntry ); - - EndL(); - - RCSELOGSTRING2( "CRCSEProfileRegistry::FindL(id=%d) - OUT", aProfileId ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::AddL -// Start addition of profile entry. -// ----------------------------------------------------------------------------- -// -EXPORT_C TUint32 CRCSEProfileRegistry::AddL( - const CRCSEProfileEntry& aNewEntry ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::AddL() - IN" ); - - BeginL(); - - TUint32 id( KNoEntryId ); - - // Add entry to storage - AddOrUpdateEntryL( id, aNewEntry ); - - __ASSERT_ALWAYS( KNoEntryId < id, User::Leave( KErrCorrupt ) ); - - // Create service settings or use existing - CRCSEProfileEntry& modifyEntry - = const_cast( aNewEntry ); - - // New service settings entry... - if( ( CRCSEProfileEntry::EOONotSet == modifyEntry.iNewServiceTableEntry || - CRCSEProfileEntry::EOn == modifyEntry.iNewServiceTableEntry ) ) - { - CreateDefaultServiceSettingsL( modifyEntry ); - if ( modifyEntry.iServiceProviderId != KRCSEDefServiceProviderId ) - { - UpdateServiceIdL( id, modifyEntry.iServiceProviderId ); - } - } - - // Use existing service settings entry if - // - given service id is valid - // - service id is not used by another profile - // - provider name is valid - else if( CRCSEProfileEntry::EOff == modifyEntry.iNewServiceTableEntry && - KSPNoId < modifyEntry.iServiceProviderId ) - { - // Check that provide name is valid - TBool providerExist( - NameExistsInServiceTableL( modifyEntry.iProviderName ) ); - - if( !providerExist ) - { - User::Leave( KErrNotFound ); - } - - // Check that service id is not used by another profile - LeaveIfServiceIdInUseL( modifyEntry ); - } - - // Fail all other cases - else - { - User::Leave( KErrArgument ); - } - - EndL(); - - RCSELOGSTRING( "CRCSEProfileRegistry::AddL() - OUT" ); - - return id; - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::DeleteL -// Deletes a profile entry which profile id is aProfileId. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::DeleteL( - TUint32 aProfileId ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::DeleteL() - IN" ); - - // Delete referenced settings first - DeleteReferenceSettingsL( aProfileId ); - - // Start transaction here since referenced settings are - // deleted in own separate transaction - BeginL(); - - // Delete actual profile - iCenRepDb->DeleteEntryL( aProfileId ); - - EndL(); - - RCSELOGSTRING( "CRCSEProfileRegistry::DeleteL() - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::UpdateL -// Updates profile entry, which profile identifier is aId. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::UpdateL( - TUint32 aId, const CRCSEProfileEntry& aUpdateData ) - { - RCSELOGSTRING2( "CRCSEProfileRegistry::UpdateL(%d) - IN", aId ); - - __ASSERT_ALWAYS( KNoEntryId < aId, User::Leave( KErrArgument ) ); - - BeginL(); - - AddOrUpdateEntryL( aId, aUpdateData ); - - // Update also service settings if needed - if ( aUpdateData.iIds.Count() && - aUpdateData.iIds[0].iProfileType == CRCSEProfileEntry::EProtocolSIP ) - { - if ( aUpdateData.iServiceProviderId == KRCSEDefServiceProviderId ) - { - CRCSEProfileEntry* entry = CRCSEProfileEntry::NewLC(); - CopyEntryValues( aUpdateData, *entry ); - CreateDefaultServiceSettingsL( *entry ); - UpdateServiceSettingsL( *entry ); - AddOrUpdateEntryL( aId, *entry ); - CleanupStack::PopAndDestroy( entry ); - } - else - { - UpdateServiceSettingsL( aUpdateData ); - } - } - - EndL(); - - RCSELOGSTRING2( "CRCSEProfileRegistry::UpdateL(%d) - OUT", aId ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::GetDefaultProfile -// Resets a default profile values. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::GetDefaultProfile( - CRCSEProfileEntry& aDefaultProfile ) const - { - aDefaultProfile.ResetDefaultValues(); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::GetAllIdsL -// Gets all profile identifiers. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::GetAllIdsL( RArray& aAllIds ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::GetAllIdsL() - IN" ); - - BeginL(); - - FindAllIdsL( aAllIds ); - - EndL(); - - RCSELOGSTRING( "CRCSEProfileRegistry::GetAllIdsL() - OUT" ); - } - - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::FindByServiceIdL -// Gets all profiles matching to service ID. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::FindByServiceIdL( TUint32 aServiceId, - RPointerArray& aFoundEntries ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::FindByServiceIdL() - IN" ); - - CleanupResetAndDestroyPushL( aFoundEntries ); - - BeginL(); - - TBuf des; - - RArray entryIds; - CleanupClosePushL( entryIds ); - - // Search IDs of entries that have this service ID - FindIdsByValueL( KColServiceProviderId, - ToDes( aServiceId, des ), - entryIds ); - - const TInt count( entryIds.Count() ); - RCSELOGSTRING2( " - Entries found: %d", count ); - - // Search entries using found IDs - for ( TInt i( 0 ); i < count; i++ ) - { - CRCSEProfileEntry* entry = CRCSEProfileEntry::NewLC(); - TRAPD( e, FindEntryL( entryIds[ i ], *entry ) ); - - if ( KErrNone == e ) - { - aFoundEntries.AppendL( entry ); - CleanupStack::Pop( entry ); - } - else - { - CleanupStack::PopAndDestroy( entry ); - } - } - - CleanupStack::PopAndDestroy( &entryIds ); - - // Update SIP profile links - const TInt entryCount( aFoundEntries.Count() ); - for ( TInt k( 0 ); k < entryCount; ++k ) - { - UpdateSIPProfileLinksL( *aFoundEntries[k] ); - } - - EndL(); - - CleanupStack::Pop( &aFoundEntries ); - - RCSELOGSTRING( "CRCSEProfileRegistry::FindByServiceIdL() - OUT" ); - } - - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::FindBySIPSprofileIdL -// Gets all profiles based on SIP profile ID. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CRCSEProfileRegistry::FindBySIPProfileIdL( TUint32 aSipProfileId, - RPointerArray& aFoundEntries ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::FindBySIPProfileIdL() - IN" ); - - CleanupResetAndDestroyPushL( aFoundEntries ); - - BeginL(); - - // Find all profile IDs - RArray voipIds; - CleanupClosePushL( voipIds ); - FindAllIdsL( voipIds ); - - // Check protocol ids (iIds) from each found profile ID. - // Leave only those profile IDs where match found. - CCenRepDatabaseProperty* property = CCenRepDatabaseProperty::NewLC(); - TInt count( voipIds.Count() ); - - RArray prIds; - CleanupClosePushL( prIds ); - - for ( TInt i( 0 ); i < count; i++ ) - { - iCenRepDb->FindPropertyL( voipIds[ i ], KColProtocolIds, *property ); - - const TDesC& value = property->GetDesValue(); - - ExtractProtocoIdsL( value, prIds ); - - TBool found( EFalse ); - TInt prIdCount( prIds.Count() ); - for ( TInt j( 0 ); j < prIdCount && !found; j++ ) - { - if ( prIds[ j ].iProfileType == CRCSEProfileEntry::EProtocolSIP && - prIds[ j ].iProfileId == aSipProfileId ) - { - found = ETrue; - } - } - - // Search profile if match found - if ( found ) - { - CRCSEProfileEntry* entry = CRCSEProfileEntry::NewLC(); - TRAPD( e, FindEntryL( voipIds[ i ], *entry ) ); - - if ( KErrNone == e ) - { - aFoundEntries.AppendL( entry ); - CleanupStack::Pop( entry ); - } - else - { - CleanupStack::PopAndDestroy( entry ); - } - } - } - - - CleanupStack::PopAndDestroy( &prIds ); - CleanupStack::PopAndDestroy( property ); - - - // Update SIP profile links - TInt entryCount( aFoundEntries.Count() ); - for ( TInt k( 0 ); k < entryCount; ++k ) - { - UpdateSIPProfileLinksL( *aFoundEntries[k] ); - } - - CleanupStack::PopAndDestroy( &voipIds ); - EndL(); - - CleanupStack::Pop( &aFoundEntries ); - - RCSELOGSTRING( "CRCSEProfileRegistry::FindBySIPProfileIdL() - OUT" ); - } - -// --------------------------------------------------------------------------- -// CRCSEProfileRegistry::AddL -// Add bunch of entries to store -// --------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::AddL( - RPointerArray& aEntries ) - { - RCSELOGSTRING2( - "CRCSEProfileRegistry::AddL( %d entries) - IN", aEntries.Count() ); - - BeginL(); - - TInt count( aEntries.Count() ); - - for ( TInt i( 0 ); i < count; ++i ) - { - // Create service settings if service ID is not available for entry - if ( KRCSEDefServiceProviderId == aEntries[ i ]->iServiceProviderId ) - { - CreateDefaultServiceSettingsL( *aEntries[ i ] ); - } - - TUint32 id( KNoEntryId ); - AddOrUpdateEntryL( id, *aEntries[ i ] ); - aEntries[ i ]->iId = id; - } - - - EndL(); - - RCSELOGSTRING( "CRCSEProfileRegistry::AddL(entries) - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::FindEntryL -// Do actual search of profile entry -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::FindEntryL( - TUint32 aProfileId, - CRCSEProfileEntry& aFoundEntry ) - { - RCSELOGSTRING2( "CRCSEProfileRegistry::FindEntryL(id=%d) - IN", aProfileId ); - - RIpAppPropArray properties; - TCleanupItem cleanup( CRCSERegistryBase::CleanupDbPropArray, &properties ); - CleanupStack::PushL( cleanup ); - - User::LeaveIfError( iCenRepDb->FindEntryL( aProfileId, properties ) ); - ConvertPropertiesToEntryL( aFoundEntry, properties ); - aFoundEntry.iId = aProfileId; - - CleanupStack::PopAndDestroy( &properties ); - - RCSELOGSTRING2( "CRCSEProfileRegistry::FindEntryL(id=%d) - OUT", aProfileId ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::AddOrUpdateEntryL -// Adds new entry or updates values of existing enry -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::AddOrUpdateEntryL( - TUint32& aId, - const CRCSEProfileEntry& aEntry ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::AddOrUpdateEntryL() - IN" ); - - TInt id( aId ); - - RIpAppPropArray properties; - TCleanupItem cleanup( CRCSERegistryBase::CleanupDbPropArray, &properties ); - CleanupStack::PushL( cleanup ); - - ConvertEntryToPropertiesL( aEntry, properties ); - - if ( KNoEntryId == id ) // Add new one - { - RCSELOGSTRING( "-- Add --" ); - iCenRepDb->AddEntryL( id, properties ); - } - else // Update existing entry - { - RCSELOGSTRING( "-- Update --" ); - User::LeaveIfError( iCenRepDb->UpdateEntryL( id, properties ) ); - } - - aId = id; - - CleanupStack::PopAndDestroy( &properties ); - - RCSELOGSTRING( "CRCSEProfileRegistry::AddOrUpdateEntryL() - OUT" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ConvertPropertiesToEntryL( - CRCSEProfileEntry& aEntry, - RIpAppPropArray& aProperties ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::ConvertPropertiesToEntryL() - IN" ); - - aEntry.ResetDefaultValues(); - - TBuf value; - - GetPropertyValueL( KColProviderName, aEntry.iProviderName, aProperties ); - - GetPropertyValueL( KColSettingsName, aEntry.iSettingsName, aProperties ); - - GetPropertyValueL( KColPreferredCodecs, value, aProperties ); - - TLex lex2( value ); - while( !lex2.Eos() ) - { - // Extract the number as unsigned int 32, which can be - // converted to value wanted (template) - TUint32 num; - lex2.Val( num, EDecimal ); - aEntry.iPreferredCodecs.AppendL( static_cast( num ) ); - // Skip characters to space char. - lex2.SkipCharacters(); - if ( !lex2.Eos() ) // Check that End of string is not next char. - { - // Go over the space character. - lex2.Inc( 1 ); - } - } - - GetPropertyValueL( KColStartMediaPort, value, aProperties ); - aEntry.iStartMediaPort = ToTInt32L( value ); - - GetPropertyValueL( KColEndMediaPort, value, aProperties ); - aEntry.iEndMediaPort = ToTInt32L( value ); - - GetPropertyValueL( KColSiqnalingQOS, value, aProperties ); - aEntry.iSiqnalingQOS = ToTInt32L( value ); - - GetPropertyValueL( KColMediaQOS, value, aProperties ); - aEntry.iMediaQOS = ToTInt32L( value ); - - GetPropertyValueL( KColInbandDtmf, value, aProperties ); - aEntry.iInbandDTMF = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColOutbandDtmf, value, aProperties ); - aEntry.iOutbandDTMF = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColHoldRingBack, value, aProperties ); - aEntry.iHoldRingBack = ToTInt32L( value ); - - GetPropertyValueL( KColAutoComplete, value, aProperties ); - aEntry.iAutoComplete = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColCFNoAnswer, value, aProperties ); - aEntry.iCFNoAnswer = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColCFBusy, value, aProperties ); - aEntry.iCFBusy = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColCFUnconditional, value, aProperties ); - aEntry.iCFUnconditional = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColRedundancy, value, aProperties ); - aEntry.iRedundancy = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColProtocolIds, value, aProperties ); - ExtractProtocoIdsL( value, aEntry.iIds ); - - GetPropertyValueL( KColSecureCallPreference, value, aProperties ); - aEntry.iSecureCallPreference = ToTUint32L( value ); - - GetPropertyValueL( KColVoIPProfileLock, value, aProperties ); - aEntry.iVoIPProfileLock = ToTUint32L( value ); - - GetPropertyValueL( KColAdhocAllowed, value, aProperties ); - aEntry.iAdhocAllowed = ToTUint32L( value ); - - GetPropertyValueL( KColSIPServerType, value, aProperties ); - aEntry.iSIPServerType.Copy( value ); - - GetPropertyValueL( KColSBCType, value, aProperties ); - aEntry.iSBCType.Copy( value );; - - GetPropertyValueL( KColSTUNServerType, value, aProperties ); - aEntry.iSTUNServerType.Copy( value ); - - GetPropertyValueL( KColWLANAPType, value, aProperties ); - aEntry.iWLANAPType.Copy( value ); - - GetPropertyValueL( KColPSTNGatewayType, value, aProperties ); - aEntry.iPSTNGatewayType.Copy( value ); - - GetPropertyValueL( KColSecurityGatewayType, value, aProperties ); - aEntry.iSecurityGatewayType.Copy( value ); - - GetPropertyValueL( KColRTCP, value, aProperties ); - aEntry.iRTCP = ToTUint32L( value ); - - GetPropertyValueL( KColSIPVoIPUAHTerminalType, value, aProperties ); - aEntry.iSIPVoIPUAHTerminalType = ToTUint32L( value ); - - GetPropertyValueL( KColSIPVoIPUAHeaderWLANMAC, value, aProperties ); - aEntry.iSIPVoIPUAHeaderWLANMAC = ToTUint32L( value ); - - GetPropertyValueL( KColSIPVoIPUAHeaderString, value, aProperties ); - aEntry.iSIPVoIPUAHeaderString.Copy( value ); - - GetPropertyValueL( KColProfileLockedToIAP, value, aProperties ); - aEntry.iProfileLockedToIAP = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColVoIPPluginUID, value, aProperties ); - aEntry.iVoIPPluginUID = ToTInt32L( value ); - - GetPropertyValueL( KColAllowVoIPoverWCDMA, value, aProperties ); - aEntry.iAllowVoIPoverWCDMA = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColAllowVoIPoverBT, value, aProperties ); - aEntry.iAllowVoIPoverBT = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColMeanCountOfVoIPDigits, value, aProperties ); - aEntry.iMeanCountOfVoIPDigits = ToTInt32L( value ); - - GetPropertyValueL( KColIgnoreAddrDomainPart, value, aProperties ); - aEntry.iIgnoreAddrDomainPart = ToTInt32L( value ); - - GetPropertyValueL( KColHandoverDialect, value, aProperties ); - aEntry.iHandoverDialect = ToTInt32L( value ); - - GetPropertyValueL( KColPSTelephonyHOPreference, value, aProperties ); - aEntry.iPSTelephonyHOPreference = ToTInt32L( value ); - - GetPropertyValueL( KColHOThresholdValueLL, value, aProperties ); - aEntry.iHOThresholdValueLL = ToTInt32L( value ); - - GetPropertyValueL( KColHOThresholdValueHL, value, aProperties ); - aEntry.iHOThresholdValueHL = ToTInt32L( value ); - - GetPropertyValueL( KColNumberOfMeasurementsAbove, value, aProperties ); - aEntry.iNumberOfMeasurementsAbove = ToTInt32L( value ); - - GetPropertyValueL( KColNumberOfMeasurementsBelow, value, aProperties ); - aEntry.iNumberOfMeasurementsBelow = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannInterParaHigh, value, aProperties ); - aEntry.iSmartScannInterParaHigh = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannInterParaMedium, value, aProperties ); - aEntry.iSmartScannInterParaMedium = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannInterParaLow, value, aProperties ); - aEntry.iSmartScannInterParaLow = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannInterParaStatic, value, aProperties ); - aEntry.iSmartScannInterParaStatic = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannDurationHighMode, value, aProperties ); - aEntry.iSmartScannDurationHighMode = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannDurationMediumMode, value, aProperties ); - aEntry.iSmartScannDurationMediumMode = ToTInt32L( value ); - - GetPropertyValueL( KColSmartScannDurationLowMode, value, aProperties ); - aEntry.iSmartScannDurationLowMode = ToTInt32L( value ); - - GetPropertyValueL( KColHandoffNumber, value, aProperties ); - aEntry.iHandoffNumber = ToTInt32L( value ); - - GetPropertyValueL( KColHandbackNumber, value, aProperties ); - aEntry.iHandbackNumber = ToTInt32L( value ); - - GetPropertyValueL( KColHysterisisTimer, value, aProperties ); - aEntry.iHysterisisTimer = ToTInt32L( value ); - - GetPropertyValueL( KColHandOffProcessTimer, value, aProperties ); - aEntry.iHandOffProcessTimer = ToTInt32L( value ); - - GetPropertyValueL( KColDisconnectProcessTimer, value, aProperties ); - aEntry.iDisconnectProcessTimer = ToTInt32L( value ); - - GetPropertyValueL( KColHandoffPrefix, value, aProperties ); - aEntry.iHandoffPrefix.Copy( value ); - - GetPropertyValueL( KColHandbackPrefix, value, aProperties ); - aEntry.iHandbackPrefix.Copy( value ); - - GetPropertyValueL( KColHandoverTones, value, aProperties ); - aEntry.iHandoverTones = ToTInt32L( value ); - - GetPropertyValueL( KColSupportSMSoverWLAN, value, aProperties ); - aEntry.iSupportSMSoverWLAN = ToTInt32L( value ); - - GetPropertyValueL( KColServiceProviderId, value, aProperties ); - aEntry.iServiceProviderId = ToTUint32L( value ); - - GetPropertyValueL( KColUserPhoneUriParam, value, aProperties ); - aEntry.iUserPhoneUriParameter = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColSIPConnTestAddress, value, aProperties ); - aEntry.iSIPConnTestAddress.Copy( value ); - - GetPropertyValueL( KColNATSettingsStorageId, value, aProperties ); - aEntry.iNATSettingsStorageId = ToTUint32L( value ); - - GetPropertyValueL( KColSIPMinSE, value, aProperties ); - aEntry.iSIPMinSE = ToTInt32L( value ); - - GetPropertyValueL( KColSIPSessionExpires, value, aProperties ); - aEntry.iSIPSessionExpires = ToTInt32L( value ); - - GetPropertyValueL( KColNATProtocol, value, aProperties ); - aEntry.iNATProtocol = ToTInt32L( value ); - - GetPropertyValueL( KColNewServiceTable, value, aProperties ); - aEntry.iNewServiceTableEntry = static_cast( ToTInt32L( value ) ); - - GetPropertyValueL( KColSNAPId, value, aProperties ); - aEntry.iSNAPId = ToTUint32L( value ); - - GetPropertyValueL( KColCreationUrl, value, aProperties ); - aEntry.iAccountCreationUrl.Copy( value ); - - RCSELOGSTRING( "CRCSEProfileRegistry::ConvertPropertiesToEntryL() - OUT" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ConvertEntryToPropertiesL( - const CRCSEProfileEntry& aEntry, - RIpAppPropArray& aProperties ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::ConvertEntryToPropertiesL() - IN" ); - - // Descriptor for value conversion - TBuf des; - - CreatePropertyL( KColProviderName, - aEntry.iProviderName, - aProperties ); - - CreatePropertyL( KColSettingsName, - aEntry.iSettingsName, - aProperties ); - - TInt count = aEntry.iPreferredCodecs.Count(); - des.Zero(); - for ( TInt j( 0 ); j < count; j++ ) - { - des.AppendNum( static_cast( aEntry.iPreferredCodecs[j] ) ); - if ( j < count - 1 ) - { - des.Append( KSpace ); - } - } - - CreatePropertyL( KColPreferredCodecs, - des, - aProperties ); - - CreatePropertyL( KColStartMediaPort, - ToDes( aEntry.iStartMediaPort, des ), - aProperties ); - - CreatePropertyL( KColEndMediaPort, - ToDes( aEntry.iEndMediaPort, des ), - aProperties ); - - CreatePropertyL( KColSiqnalingQOS, - ToDes( aEntry.iSiqnalingQOS, des ), - aProperties ); - - CreatePropertyL( KColMediaQOS, - ToDes( aEntry.iMediaQOS, des ), - aProperties ); - - TInt32 inbandDTMF( aEntry.iInbandDTMF ); // TOnOff - CreatePropertyL( KColInbandDtmf, - ToDes( inbandDTMF, des ), - aProperties ); - - TInt32 outbandDTMF( aEntry.iOutbandDTMF ); // TOnOff - CreatePropertyL( KColOutbandDtmf, - ToDes( outbandDTMF, des ), - aProperties ); - - TInt32 holdRingBack( aEntry.iHoldRingBack ); // TOnOff - CreatePropertyL( KColHoldRingBack, - ToDes( holdRingBack, des ), - aProperties ); - - TInt32 autoComplete = aEntry.iAutoComplete; // TOnOff - CreatePropertyL( KColAutoComplete, - ToDes( autoComplete, des ), - aProperties ); - - TInt32 cfNoAnswer( aEntry.iCFNoAnswer ); // TOnOff - CreatePropertyL( KColCFNoAnswer, - ToDes( cfNoAnswer, des ), - aProperties ); - - TInt32 cfBusy( aEntry.iCFBusy ); // TOnOff - CreatePropertyL( KColCFBusy, - ToDes( cfBusy, des ), - aProperties ); - - TInt32 cfUnconditional( aEntry.iCFUnconditional ); // TOnOff - CreatePropertyL( KColCFUnconditional, - ToDes( cfUnconditional, des ), - aProperties ); - - TInt32 redundancy( aEntry.iRedundancy ); // TOnOff - CreatePropertyL( KColRedundancy, - ToDes( redundancy, des ), - aProperties ); - - des.Zero(); - TBuf intDes; // for SIP profile ID - count = aEntry.iIds.Count(); - - if ( count ) - { - for( TInt i = 0; i < count; i++ ) - { - intDes.Zero(); - - TInt profileType = aEntry.iIds[i].iProfileType; - intDes.Num( profileType ); - des.Append( intDes ); - des.Append( KSpace ); - - TInt profileId = aEntry.iIds[i].iProfileId; - intDes.Num( profileId ); - des.Append( intDes ); - des.Append( KSpace ); - - TInt profileSpecificId = aEntry.iIds[i].iProfileSpecificSettingId; - intDes.Num( profileSpecificId ); - des.Append( intDes ); - des.Append( KSpace ); - } - } - - CreatePropertyL( KColProtocolIds, - des, - aProperties ); - - CreatePropertyL( KColSecureCallPreference, - ToDes( aEntry.iSecureCallPreference, des ), - aProperties ); - - CreatePropertyL( KColVoIPProfileLock, - ToDes( aEntry.iVoIPProfileLock, des ), - aProperties ); - - CreatePropertyL( KColAdhocAllowed, - ToDes( aEntry.iAdhocAllowed, des ), - aProperties ); - - CreatePropertyL( KColSIPServerType, - aEntry.iSIPServerType, - aProperties ); - - CreatePropertyL( KColSBCType, - aEntry.iSBCType, - aProperties ); - - CreatePropertyL( KColSTUNServerType, - aEntry.iSTUNServerType, - aProperties ); - - CreatePropertyL( KColWLANAPType, - aEntry.iWLANAPType, - aProperties ); - - CreatePropertyL( KColPSTNGatewayType, - aEntry.iPSTNGatewayType, - aProperties ); - - CreatePropertyL( KColSecurityGatewayType, - aEntry.iSecurityGatewayType, - aProperties ); - - CreatePropertyL( KColRTCP, - ToDes( aEntry.iRTCP, des ), - aProperties ); - - CreatePropertyL( KColSIPVoIPUAHTerminalType, - ToDes( aEntry.iSIPVoIPUAHTerminalType, des ), - aProperties ); - - CreatePropertyL( KColSIPVoIPUAHeaderWLANMAC, - ToDes( aEntry.iSIPVoIPUAHeaderWLANMAC, des ), - aProperties ); - - CreatePropertyL( KColSIPVoIPUAHeaderString, - aEntry.iSIPVoIPUAHeaderString, - aProperties ); - - TInt32 profileLockedToIAP( aEntry.iProfileLockedToIAP ); // TOnOff - CreatePropertyL( KColProfileLockedToIAP, - ToDes( profileLockedToIAP, des ), - aProperties ); - - CreatePropertyL( KColVoIPPluginUID, - ToDes( aEntry.iVoIPPluginUID, des ), - aProperties ); - - TInt32 allowVoIPoverWCDMA( aEntry.iAllowVoIPoverWCDMA ); // TOnOff - CreatePropertyL( KColAllowVoIPoverWCDMA, - ToDes( allowVoIPoverWCDMA, des ), - aProperties ); - - TInt32 allowVoIPoverBT( aEntry.iAllowVoIPoverBT ); // TOnOff - CreatePropertyL( KColAllowVoIPoverBT, - ToDes( allowVoIPoverBT, des ), - aProperties ); - - CreatePropertyL( KColMeanCountOfVoIPDigits, - ToDes( aEntry.iMeanCountOfVoIPDigits, des ), - aProperties ); - - CreatePropertyL( KColIgnoreAddrDomainPart, - ToDes( aEntry.iIgnoreAddrDomainPart, des ), - aProperties ); - - CreatePropertyL( KColHandoverDialect, - ToDes( aEntry.iHandoverDialect, des ), - aProperties ); - - CreatePropertyL( KColPSTelephonyHOPreference, - ToDes( aEntry.iPSTelephonyHOPreference, des ), - aProperties ); - - CreatePropertyL( KColHOThresholdValueLL, - ToDes( aEntry.iHOThresholdValueLL, des ), - aProperties ); - - CreatePropertyL( KColHOThresholdValueHL, - ToDes( aEntry.iHOThresholdValueHL, des ), - aProperties ); - - CreatePropertyL( KColNumberOfMeasurementsAbove, - ToDes( aEntry.iNumberOfMeasurementsAbove, des ), - aProperties ); - - CreatePropertyL( KColNumberOfMeasurementsBelow, - ToDes( aEntry.iNumberOfMeasurementsBelow, des ), - aProperties ); - - CreatePropertyL( KColSmartScannInterParaHigh, - ToDes( aEntry.iSmartScannInterParaHigh, des ), - aProperties ); - - CreatePropertyL( KColSmartScannInterParaMedium, - ToDes( aEntry.iSmartScannInterParaMedium, des ), - aProperties ); - - CreatePropertyL( KColSmartScannInterParaLow, - ToDes( aEntry.iSmartScannInterParaLow, des ), - aProperties ); - - CreatePropertyL( KColSmartScannInterParaStatic, - ToDes( aEntry.iSmartScannInterParaStatic, des ), - aProperties ); - - CreatePropertyL( KColSmartScannDurationHighMode, - ToDes( aEntry.iSmartScannDurationHighMode, des ), - aProperties ); - - CreatePropertyL( KColSmartScannDurationMediumMode, - ToDes( aEntry.iSmartScannDurationMediumMode, des ), - aProperties ); - - CreatePropertyL( KColSmartScannDurationLowMode, - ToDes( aEntry.iSmartScannDurationLowMode, des ), - aProperties ); - - CreatePropertyL( KColHandoffNumber, - ToDes( aEntry.iHandoffNumber, des ), - aProperties ); - - CreatePropertyL( KColHandbackNumber, - ToDes( aEntry.iHandbackNumber, des ), - aProperties ); - - CreatePropertyL( KColHysterisisTimer, - ToDes( aEntry.iHysterisisTimer, des ), - aProperties ); - - CreatePropertyL( KColHandOffProcessTimer, - ToDes( aEntry.iHandOffProcessTimer, des ), - aProperties ); - - CreatePropertyL( KColDisconnectProcessTimer, - ToDes( aEntry.iDisconnectProcessTimer, des ), - aProperties ); - - CreatePropertyL( KColHandoffPrefix, - aEntry.iHandoffPrefix, - aProperties ); - - CreatePropertyL( KColHandbackPrefix, - aEntry.iHandbackPrefix, - aProperties ); - - CreatePropertyL( KColHandoverTones, - ToDes( aEntry.iHandoverTones, des ), - aProperties ); - - CreatePropertyL( KColSupportSMSoverWLAN, - ToDes( aEntry.iSupportSMSoverWLAN, des ), - aProperties ); - - CreatePropertyL( KColServiceProviderId, - ToDes( aEntry.iServiceProviderId, des ), - aProperties ); - - TInt32 userPhoneUriParameter( aEntry.iUserPhoneUriParameter ); // TOnOff - CreatePropertyL( KColUserPhoneUriParam, - ToDes( userPhoneUriParameter, des ), - aProperties ); - - CreatePropertyL( KColSIPConnTestAddress, - aEntry.iSIPConnTestAddress, - aProperties ); - - CreatePropertyL( KColNATSettingsStorageId, - ToDes( aEntry.iNATSettingsStorageId, des ), - aProperties ); - - CreatePropertyL( KColSIPMinSE, - ToDes( aEntry.iSIPMinSE, des ), - aProperties ); - - CreatePropertyL( KColSIPSessionExpires, - ToDes( aEntry.iSIPSessionExpires, des ), - aProperties ); - - CreatePropertyL( KColNATProtocol, - ToDes( aEntry.iNATProtocol, des ), - aProperties ); - - TInt32 newServiceTable( aEntry.iNewServiceTableEntry ); // TOnOff - CreatePropertyL( KColNewServiceTable, - ToDes( newServiceTable, des ), - aProperties ); - - CreatePropertyL( KColSNAPId, - ToDes( aEntry.iSNAPId, des ), - aProperties ); - - CreatePropertyL( KColCreationUrl, - aEntry.iAccountCreationUrl, - aProperties ); - - RCSELOGSTRING( "CRCSEProfileRegistry::ConvertEntryToPropertiesL() - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry:: -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ExtractProtocoIdsL( - const TDesC& aDes, RArray& aArray ) - { - CleanupClosePushL( aArray ); - - TLex lex( aDes ); - - TSettingIds value; - - // Reset original array - aArray.Reset(); - - while( !lex.Eos() ) - { - lex.Val( value.iProfileType ); - // Skip characters to space char. - lex.SkipCharacters(); - lex.Inc( 1 ); - lex.Val( value.iProfileId ); - lex.SkipCharacters(); - lex.Inc( 1 ); - lex.Val( value.iProfileSpecificSettingId ); - - aArray.AppendL( value ); - if ( !lex.Eos() ) // Check that End of string is not next char. - { - // Go over the space character. - lex.Inc( 1 ); - } - } - - CleanupStack::Pop( &aArray ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::UpdateSIPProfileLinksL -// Validates profile's SIP profile IDs and updates if necessary -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::UpdateSIPProfileLinksL( CRCSEProfileEntry& aEntry ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::UpdateSIPProfileLinksL - IN" ); - const TInt count( aEntry.iIds.Count() ); - TSettingIds value; - RCSELOGSTRING2( "Protocol link count=%d", count ); - - if ( 0 < count ) - { - iSIPProfiles.ResetAndDestroy(); - - TInt err(0); - // Check the existence of linked SIP profiles - for ( TInt i( count-1 ); 0 <= i ; i-- ) - { - value = aEntry.iIds[i]; - - if ( CRCSEProfileEntry::EProtocolSIP == value.iProfileType ) - { - CSIPProfile* profile = NULL; - TRAP( err, profile = iSIPRegistry->ProfileL( value.iProfileId ) ); - if ( KErrNotFound == err ) - { - aEntry.iIds.Remove( i ); - delete profile; - profile = NULL; - RCSELOGSTRING2( "SIP link removed, id=%d", value.iProfileId ); - } - else if ( KErrNone == err ) - { - err = iSIPProfiles.Append( profile ); - } - else - { - delete profile; - profile = NULL; - } - } - } - - // Check that all profiles have same AOR. - // If some AOR differs leave only the first link - TInt profCount( iSIPProfiles.Count() ); - RCSELOGSTRING2( "SIP link count=%d", profCount ); - TBool ok( ETrue ); - if ( 1 < profCount ) - { - const TDesC8* aor1; - HBufC8* empty = KNullDesC8().AllocLC(); - err = iSIPProfiles[0]->GetParameter( KSIPUserAor, aor1 ); - - if ( KErrNotFound == err ) - { - aor1 = empty; - } - - for ( TInt j( 1 ); j < profCount; j++ ) - { - const TDesC8* aor2; - err = iSIPProfiles[j]->GetParameter( KSIPUserAor, aor2 ); - - if ( KErrNotFound == err ) - { - if ( aor1->Compare( KNullDesC8() ) != 0 ) - { - ok = EFalse; - } - } - else - { - if ( aor1->Compare( *aor2 ) != 0 ) - { - ok = EFalse; - } - } - } - CleanupStack::PopAndDestroy( empty ); - - if ( !ok ) - { - RCSELOGSTRING( "AOR changed" ); - TInt newCount = aEntry.iIds.Count(); - TBool first( ETrue ); - for ( TInt k( 0 ); k < newCount; k++ ) - { - value = aEntry.iIds[k]; - if ( CRCSEProfileEntry::EProtocolSIP == value.iProfileType ) - { - if ( first ) - { - first = EFalse; - RCSELOGSTRING2( "Leave SIP link, index=%d", k ); - } - else - { - aEntry.iIds.Remove( k ); - newCount--; - k--; - RCSELOGSTRING2( "Remove SIP link, index=%d", k ); - } - } - } - } - } - - iSIPProfiles.ResetAndDestroy(); - - // Update entry if count of ids have changed - if ( count != aEntry.iIds.Count() ) - { - RCSELOGSTRING3( "Link ID count: initial=%d, final=%d", - count, aEntry.iIds.Count() ); - - AddOrUpdateEntryL( aEntry.iId, aEntry ); - - RCSELOGSTRING( "Entry updated" ); - } - } - - RCSELOGSTRING( "CRCSEProfileRegistry::UpdateSIPProfileLinksL - OUT" ); - } - -// ----------------------------------------------------------------------------- -// Local helper method for searching default values of properties from service -// table and adding them to given service entry. -// ----------------------------------------------------------------------------- -// -void FindAndAddDefaultPropertyL( - CSPSettings& aTable, - CSPEntry& aEntry, - CSPProperty& aProperty, - TServicePropertyName aName ) - { - TInt err = aTable.FindPropertyL( KDefaultVoIPService, aName, aProperty ); - - if ( KErrNone == err ) - { - err = aEntry.AddPropertyL( aProperty ); - if ( KErrNone != err ) - { - RCSELOGSTRING2( - "CRCSEProfileRegistry::FindAndAddDefaultPropertyL - add property err: %d", - err ); - } - } - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::CreateDefaultServiceSettingsL -// Creates a voip-sip service entry with default content and return -// service ID for new profile -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::CreateDefaultServiceSettingsL( - CRCSEProfileEntry& aNewEntry ) - { - RCSELOGSTRING( - "CRCSEProfileRegistry::CreateDefaultServiceSettingsL - IN" ); - - // Do not create service if there is no SIP linkage. - if ( !aNewEntry.iIds.Count() ) - { - return; - } - else if ( aNewEntry.iIds[0].iProfileType != - CRCSEProfileEntry::EProtocolSIP ) - { - return; - } - - TInt err( KErrNone ); - - // Service table API - CSPSettings* table = CSPSettings::NewLC(); - - // New service entry for this provider name - CSPEntry* entry = CSPEntry::NewLC(); - entry->SetServiceName( aNewEntry.iProviderName ); - - CSPProperty* property = CSPProperty::NewLC(); - - // Service Setup plug-in UID ( if VoIP plugin UID set ) - if ( KRCSEDefaultVoIPPluginUID != aNewEntry.iVoIPPluginUID ) - { - property->SetName( EPropertyServiceSetupPluginId ); - property->SetValue( aNewEntry.iVoIPPluginUID ); - err = entry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( - entry->UpdateProperty( EPropertyServiceSetupPluginId, - aNewEntry.iVoIPPluginUID ) ); - } - else - { - User::LeaveIfError( err ); - } - } - - // This property is needed by clients to check if VoIP service is used - property->SetName( ESubPropertyVoIPSettingsId ); - property->SetValue( KVoIPSettingsID ); - err = entry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( entry->UpdateProperty( ESubPropertyVoIPSettingsId, - KVoIPSettingsID ) ); - } - else - { - User::LeaveIfError( err ); - } - - // Service Attribute Mask - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyServiceAttributeMask ); - - // Phone Application CLI plug-in UID - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyCLIPluginId ); - - // Phone Application Call Logging plug-in UID. - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyCallLoggingPluginId ); - - // Phone Application Call State Indicator plug-in UID. - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyCallStateIndicatorPluginId ); - - // Phone Application Call Menu Handler plug-in UID. - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyCallMenuHandlerPluginId ); - - // Converged Call Engine Call Provider plug-in UID. - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyCallProviderPluginId ); - - // Virtual Phonebook Contact Store ID. - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyContactStoreId ); - - // Contact View plug-in UID - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyContactViewPluginId ); - - // Converged Connection Handler (CCH) VoIP Subservice plug-in UID - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyVoIPSubServicePluginId ); - - // Converged Connection Handler (CCH) VMBX Subservice plug-in UID - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyVMBXSubServicePluginId ); - - // Brand ID for VoIP - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyBrandId ); - - // Presence Service Connectivity plugin UID - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyPCSPluginId ); - - // Maximum Lenght of Log Contact Link - FindAndAddDefaultPropertyL( - *table, *entry, *property, EPropertyLogCntLinkMaxLength ); - - // Field Type of Presence Presentity ID - FindAndAddDefaultPropertyL( - *table, *entry, *property, ESubPropertyPresencePresentityIDFieldType ); - - // Add entry to store and set service ID - User::LeaveIfError( table->AddEntryL( *entry ) ); - aNewEntry.iServiceProviderId - = static_cast( entry->GetServiceId() ); - - CleanupStack::PopAndDestroy( property ); - CleanupStack::PopAndDestroy( entry ); - CleanupStack::PopAndDestroy( table ); - - RCSELOGSTRING( - "CRCSEProfileRegistry::CreateDefaultServiceSettingsL - OUT" ); - } - -// --------------------------------------------------------------------------- -// CRCSEProfileRegistry::DeleteReferenceSettingsL -// --------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::DeleteReferenceSettingsL( TUint32 aProfileId ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::DeleteReferenceSettingsL - IN" ); - - CRCSEProfileEntry* profileInfo = CRCSEProfileEntry::NewLC(); - - TRAPD( e, FindL( aProfileId, *profileInfo ) ); - - __ASSERT_ALWAYS( KErrNone == e || KErrNotFound == e, User::Leave( e ) ); - - // Delete related audio codecs - CRCSEAudioCodecRegistry* codecReg = CRCSEAudioCodecRegistry::NewLC(); - codecReg->DeleteL( profileInfo->iPreferredCodecs ); - CleanupStack::PopAndDestroy( codecReg ); - - // Delete related service settings - if( CRCSEProfileEntry::EOONotSet == profileInfo->iNewServiceTableEntry || - CRCSEProfileEntry::EOn == profileInfo->iNewServiceTableEntry ) - { - RCSELOGSTRING( "Delete related service settings" ); - CSPSettings* serviceSettings = CSPSettings::NewLC(); - serviceSettings->DeleteEntryL( profileInfo->iServiceProviderId ); - CleanupStack::PopAndDestroy( serviceSettings ); - } - - CleanupStack::PopAndDestroy( profileInfo ); - - RCSELOGSTRING( "CRCSEProfileRegistry::DeleteReferenceSettingsL - OUT" ); - } -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::NameExistsInServiceTableL -// ----------------------------------------------------------------------------- -// -TBool CRCSEProfileRegistry::NameExistsInServiceTableL( - const TDesC& aProviderName ) const - { - RCSELOGSTRING( "CRCSEProfileRegistry::NameExistsInServiceTableL- IN" ); - TBool result( EFalse ); - - RIdArray serviceIds; - CleanupClosePushL( serviceIds ); - CDesCArray* serviceNames = - new ( ELeave ) CDesCArrayFlat( KArrayInitSize ); - CleanupStack::PushL( serviceNames ); - CSPSettings* serviceSettings = CSPSettings::NewLC(); - TInt err(KErrNone); - err = serviceSettings->FindServiceIdsL( serviceIds ); - if ( KErrNotFound == err ) - { - CleanupStack::PopAndDestroy( serviceSettings ); - CleanupStack::PopAndDestroy( serviceNames ); - CleanupStack::PopAndDestroy( &serviceIds ); - return EFalse; - } - User::LeaveIfError( err ); - User::LeaveIfError( - serviceSettings->FindServiceNamesL( serviceIds, *serviceNames ) ); - CleanupStack::PopAndDestroy( serviceSettings ); - TBool serviceFound( EFalse ); - for ( TInt i( 0 ) ; i < serviceNames->MdcaCount() && !serviceFound ; i++ ) - { - if ( !aProviderName.Compare( serviceNames->MdcaPoint( i) ) ) - { - result = ETrue; - serviceFound = ETrue; - } - } - CleanupStack::PopAndDestroy( serviceNames ); - CleanupStack::PopAndDestroy( &serviceIds ); - - RCSELOGSTRING( "CRCSEProfileRegistry::NameExistsInServiceTableL- OUT" ); - return result; - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::LeaveIfServiceIdInUseL -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::LeaveIfServiceIdInUseL( - const CRCSEProfileEntry& aEntry ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::LeaveIfServiceIdInUseL - IN" ); - - // Find all profile IDs - RArray voipIds; - CleanupClosePushL( voipIds ); - FindAllIdsL( voipIds ); - - - // Check service id from each profile - CCenRepDatabaseProperty* property = CCenRepDatabaseProperty::NewLC(); - TBuf value; - TInt count( voipIds.Count() ); - - for ( TInt i( 0 ); i < count; i++ ) - { - iCenRepDb->FindPropertyL( voipIds[ i ], KColProtocolIds, *property ); - - __ASSERT_ALWAYS( - aEntry.iServiceProviderId != ToTUint32L( property->GetDesValue() ), - User::Leave( KErrAlreadyExists ) ); - } - - CleanupStack::PopAndDestroy( property ); - CleanupStack::PopAndDestroy( &voipIds ); - - RCSELOGSTRING( "CRCSEProfileRegistry::LeaveIfServiceIdInUseL - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::UpdateServiceSettingsL -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::UpdateServiceSettingsL( - const CRCSEProfileEntry& aEntry ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::UpdateServiceSettingsL - IN" ); - - // Do not update service if there is no SIP linkage. - if ( !aEntry.iIds.Count() ) - { - return; - } - else if ( aEntry.iIds[0].iProfileType != - CRCSEProfileEntry::EProtocolSIP ) - { - return; - } - - CSPSettings* serviceSettings = CSPSettings::NewLC(); - CSPEntry* serviceEntry = CSPEntry::NewLC(); - - User::LeaveIfError( - serviceSettings->FindEntryL( - aEntry.iServiceProviderId, *serviceEntry ) ); - - // Update service settings if service name has been changed - if ( aEntry.iProviderName != serviceEntry->GetServiceName() ) - { - serviceEntry->SetServiceName( aEntry.iProviderName ); - User::LeaveIfError( serviceSettings->UpdateEntryL( *serviceEntry ) ); - } - - CleanupStack::PopAndDestroy( serviceEntry ); - CleanupStack::PopAndDestroy( serviceSettings ); - - RCSELOGSTRING( "CRCSEProfileRegistry::UpdateServiceSettingsL - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::UpdateServiceIdL -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::UpdateServiceIdL( TUint32 aId, TUint32 aServiceId ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::UpdateServiceIdL - IN" ); - - TBuf des; - - RIpAppPropArray properties; - - CreatePropertyL( KColServiceProviderId, - ToDes( aServiceId, des ), - properties ); - - iCenRepDb->AddOrUpdatePropertiesL( aId, properties ); - - properties.ResetAndDestroy(); - - RCSELOGSTRING( "CRCSEProfileRegistry::UpdateServiceIdL - OUT" ); - } - -// --------------------------------------------------------------------------- -// From MSIPProfileRegistryObserver -// CRCSEProfileRegistry::ProfileRegistryEventOccurred -// SIP profile event -// --------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ProfileRegistryEventOccurred( - TUint32 /*aSIPProfileId*/, - TEvent /*aEvent*/ ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::ProfileRegistryEventOccurred" ); - // Have to be implemented because MSIPProfileRegistryObserver - // is passed to CSIPManagedProfileRegistry. - } - -// --------------------------------------------------------------------------- -// From MSIPProfileRegistryObserver -// CRCSEProfileRegistry::ProfileRegistryErrorOccured -// An asynchronous error has occurred related to SIP profile -// --------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ProfileRegistryErrorOccurred( - TUint32 /*aProfileId*/, - TInt /*aError*/ ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::ProfileRegistryErrorOccurred" ); - // Have to be implemented because MSIPProfileRegistryObserver - // is passed to CSIPManagedProfileRegistry. - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::ResetAndDestroyEntries -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::ResetAndDestroyEntries( TAny* anArray ) - { - RCSELOGSTRING( "CRCSEProfileRegistry::ResetAndDestroyEntries - IN" ); - - RPointerArray* array = - reinterpret_cast*>( anArray ); - if (array) - { - array->ResetAndDestroy(); - array->Close(); - } - RCSELOGSTRING( "CRCSEProfileRegistry::ResetAndDestroyEntries - OUT" ); - } - -// ----------------------------------------------------------------------------- -// CRCSEProfileRegistry::CopyEntryValues -// ----------------------------------------------------------------------------- -// -void CRCSEProfileRegistry::CopyEntryValues( - const CRCSEProfileEntry& aSourceEntry, - CRCSEProfileEntry& aDestinationEntry ) - { - aDestinationEntry.ResetDefaultValues(); - aDestinationEntry.iIds.Reset(); - for ( TInt i = 0; i < aSourceEntry.iIds.Count(); i++ ) - { - aDestinationEntry.iIds.Append( aSourceEntry.iIds[i] ); - } - aDestinationEntry.iId = aSourceEntry.iId; - aDestinationEntry.iProviderName = aSourceEntry.iProviderName; - aDestinationEntry.iSettingsName = aSourceEntry.iSettingsName; - aDestinationEntry.iPreferredCodecs.Reset(); - for ( TInt i = 0; i < aSourceEntry.iPreferredCodecs.Count(); i++ ) - { - aDestinationEntry.iPreferredCodecs.Append( - aSourceEntry.iPreferredCodecs[i] ); - } - aDestinationEntry.iStartMediaPort = aSourceEntry.iStartMediaPort; - aDestinationEntry.iEndMediaPort = aSourceEntry.iEndMediaPort; - aDestinationEntry.iMediaQOS = aSourceEntry.iMediaQOS; - aDestinationEntry.iInbandDTMF = aSourceEntry.iInbandDTMF; - aDestinationEntry.iOutbandDTMF = aSourceEntry.iOutbandDTMF; - aDestinationEntry.iSecureCallPreference = - aSourceEntry.iSecureCallPreference; - aDestinationEntry.iRTCP = aSourceEntry.iRTCP; - aDestinationEntry.iSIPVoIPUAHTerminalType = - aSourceEntry.iSIPVoIPUAHTerminalType; - aDestinationEntry.iSIPVoIPUAHeaderWLANMAC = - aSourceEntry.iSIPVoIPUAHeaderWLANMAC; - aDestinationEntry.iSIPVoIPUAHeaderString = - aSourceEntry.iSIPVoIPUAHeaderString; - aDestinationEntry.iProfileLockedToIAP = aSourceEntry.iProfileLockedToIAP; - aDestinationEntry.iVoIPPluginUID = aSourceEntry.iVoIPPluginUID; - aDestinationEntry.iAllowVoIPoverWCDMA = aSourceEntry.iAllowVoIPoverWCDMA; - aDestinationEntry.iMeanCountOfVoIPDigits = - aSourceEntry.iMeanCountOfVoIPDigits; - aDestinationEntry.iIgnoreAddrDomainPart = - aSourceEntry.iIgnoreAddrDomainPart; - aDestinationEntry.iServiceProviderId = aSourceEntry.iServiceProviderId; - aDestinationEntry.iUserPhoneUriParameter = - aSourceEntry.iUserPhoneUriParameter; - aDestinationEntry.iSIPConnTestAddress = aSourceEntry.iSIPConnTestAddress; - aDestinationEntry.iNATSettingsStorageId = - aSourceEntry.iNATSettingsStorageId; - aDestinationEntry.iSIPMinSE = aSourceEntry.iSIPMinSE; - aDestinationEntry.iSIPSessionExpires = aSourceEntry.iSIPSessionExpires; - aDestinationEntry.iNATProtocol = aSourceEntry.iNATProtocol; - aDestinationEntry.iNewServiceTableEntry = - aSourceEntry.iNewServiceTableEntry; - aDestinationEntry.iSNAPId = aSourceEntry.iSNAPId; - aDestinationEntry.iAccountCreationUrl = aSourceEntry.iAccountCreationUrl; - } - -// End of File - -