diff -r f742655b05bf -r d38647835c2e richcallsettingsengine/rcse2/src/rcsedbimporter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/richcallsettingsengine/rcse2/src/rcsedbimporter.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,998 @@ +/* +* Copyright (c) 2009-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: RCSE Settings Import from DBMS +* +*/ + + +#include "rcsedbimporter.h" +#include "rcseconstants.h" +#include "crcseprofileregistry.h" +#include "crcseaudiocodecregistry.h" +#include "rcsedefaultdbnames.h" +#include "rcselogger.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Default constructor +// --------------------------------------------------------------------------- +// +CRCSEDbImporter::CRCSEDbImporter() + { + } + + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::ConstructL() + { + RCSELOGSTRING( "CRCSEDbImporter::ConstructL() - IN" ); + User::LeaveIfError( iDbSession.Connect() ); + RCSELOGSTRING( "CRCSEDbImporter::ConstructL() - OUT" ); + } + + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CRCSEDbImporter* CRCSEDbImporter::NewL() + { + CRCSEDbImporter* self = CRCSEDbImporter::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CRCSEDbImporter* CRCSEDbImporter::NewLC() + { + CRCSEDbImporter* self = new( ELeave ) CRCSEDbImporter; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CRCSEDbImporter::~CRCSEDbImporter() + { + ReleaseImportLock(); + + iDb.Close(); + iDbSession.Close(); + iProfiles.ResetAndDestroy(); + iCodecs.ResetAndDestroy(); + iCodecIds.Close(); + } + +// --------------------------------------------------------------------------- +// Check if imported (restored) database file exists. +// --------------------------------------------------------------------------- +// +TBool CRCSEDbImporter::ImportExists() + { + RCSELOGSTRING( "CRCSEDbImporter::ImportExists() - IN" ); + + TBool profileImport( EFalse ); + TBool codecImport( EFalse ); + + RDbs dbSession; + RDbNamedDatabase db; + + TInt err( dbSession.Connect() ); + + if ( KErrNone != err ) + { + return EFalse; + } + else + { + // Check voip profiles + err = db.Open( dbSession, KDbName, KDatabaseUID ); + db.Close(); + + if ( KErrNone == err ) + { + profileImport = ETrue; + } + + // Check audio codecs + err = db.Open( dbSession, KDbCodecName, KDatabaseUID ); + db.Close(); + + if ( KErrNone == err ) + { + codecImport = ETrue; + } + } + + dbSession.Close(); + + RCSELOGSTRING2( "CRCSEDbImporter::ImportExists(%d) - OUT", + profileImport && codecImport ); + + // Return ETrue only when both of imports exist + return profileImport && codecImport; + } + + +// --------------------------------------------------------------------------- +// Check if import is already running. +// --------------------------------------------------------------------------- +// +TBool CRCSEDbImporter::IsImportRunning() + { + RCSELOGSTRING( "CRCSEDbImporter::IsImportRunning() - IN" ); + + TBool ret( EFalse ); + + RDbs dbSession; + RDbNamedDatabase db; + + TInt err( dbSession.Connect() ); + + if ( KErrNone != err ) + { + ret = EFalse; + } + else + { + // Check if temporary table exists + err = db.Open( dbSession, KDbTempName, KDatabaseUID ); + db.Close(); + + if ( KErrNone == err ) + { + ret = ETrue; + } + } + + dbSession.Close(); + + RCSELOGSTRING2( "CRCSEDbImporter::IsImportRunning(%d) - OUT", ret ); + + return ret; + } + + +// --------------------------------------------------------------------------- +// Imports RCSE entries from db file and stores them to repository. +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::ImportAndStoreL() + { + RCSELOGSTRING( "CRCSEDbImporter::ImportL() - IN" ); + + SetImportLock(); + + // Import settings data + ImportVoIPProfilesL(); + ImportAudioCodecsL(); + + // Store audio codecs + StoreAudioCodecsL(); + + // Update and store VoIP profiles + UpdatePreferredCodecs(); + StoreVoIPProfilesL(); + + DeleteImports(); + ReleaseImportLock(); + + RCSELOGSTRING( "CRCSEDbImporter::ImportL() - OUT" ); + } + + +// --------------------------------------------------------------------------- +// Set locking data base file to prevent disturb during the import operation. +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::SetImportLock() + { + RCSELOGSTRING( "CRCSEDbImporter::SetImportLock() - IN" ); + + // Create temporary db that indicates ongoing operation + iDb.Create( iDbSession, KDbTempName, KDatabaseUID ); + iDb.Close(); + + RCSELOGSTRING( "CRCSEDbImporter::SetImportLock() - OUT" ); + } + + +// --------------------------------------------------------------------------- +// Release locking data base file. +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::ReleaseImportLock() + { + RCSELOGSTRING( "CRCSEDbImporter::ReleaseImportLock() - IN" ); + + // Delete temporary locking db + TInt err( iDb.Open( iDbSession, KDbTempName, KDatabaseUID ) ); + + if ( KErrNone == err ) + { + iDb.Destroy(); + iDb.Close(); + RCSELOGSTRING( "Temporary db deleted" ); + } + else + { + RCSELOGSTRING2( "Temporary db not deleted, err=%d", err ); + } + + RCSELOGSTRING( "CRCSEDbImporter::ReleaseImportLock() - OUT" ); + } + + +// --------------------------------------------------------------------------- +// Import VoIP profiles from database to array. +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::ImportVoIPProfilesL() + { + RCSELOGSTRING( "CRCSEDbImporter::ImportVoIPProfilesL() - IN" ); + User::LeaveIfError( iDb.Open( iDbSession, KDbName, KDatabaseUID ) ); + + // Create sql statement + HBufC* statement = HBufC::NewLC( + KSQLSelectAllStatement().Length() + + KProfileTableName().Length() ); + + statement->Des().Format( + KSQLSelectAllStatement, &KProfileTableName ); + + // Launch query + RDbView view; + User::LeaveIfError( view.Prepare( iDb, *statement ) ); + CleanupClosePushL( view ); + User::LeaveIfError( view.EvaluateAll() ); + view.FirstL(); + + // Browse all result rows trough + while ( view.AtRow() ) + { + view.GetL(); // Get the data row + const TInt cols( view.ColCount() + 1 ); + + CRCSEProfileEntry* entry = CRCSEProfileEntry::NewLC(); + + // Map the data from current row to profile entry. + for( TInt i = 1; i < cols; i++ ) + { + MapColumnToEntryL( i, view, *entry ); + } + + iProfiles.AppendL( entry ); + CleanupStack::Pop( entry ); + view.NextL(); + } + + CleanupStack::PopAndDestroy( &view ); + CleanupStack::PopAndDestroy( statement ); + + iDb.Close(); + RCSELOGSTRING( "CRCSEDbImporter::ImportVoIPProfilesL() - OUT" ); + } + +// --------------------------------------------------------------------------- +// Import audio codecs from database to array. +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::ImportAudioCodecsL() + { + RCSELOGSTRING( "CRCSEDbImporter::ImportAudioCodecsL() - IN" ); + + User::LeaveIfError( iDb.Open( iDbSession, KDbCodecName, KDatabaseUID ) ); + + // Create sql statement + HBufC* statement = HBufC::NewLC( + KSQLSelectAllStatement().Length() + + KAudioCodecTableName().Length() ); + + statement->Des().Format( + KSQLSelectAllStatement, &KAudioCodecTableName ); + + // Launch query + RDbView view; + User::LeaveIfError( view.Prepare( iDb, *statement ) ); + CleanupClosePushL( view ); + User::LeaveIfError( view.EvaluateAll() ); + view.FirstL(); + + // Browse all result rows trough + while ( view.AtRow() ) + { + view.GetL(); // Get the data row + const TInt cols( view.ColCount() + 1 ); + + CRCSEAudioCodecEntry* entry = CRCSEAudioCodecEntry::NewLC(); + + // Map the data from current row to audio codec entry. + for( TInt i = 1; i < cols; i++ ) + { + MapColumnToEntryL( i, view, *entry ); + } + + // Append entry and its ID + iCodecs.AppendL( entry ); + + TRCSEIdPair idPair; + idPair.iOldId = entry->iCodecId; + iCodecIds.Append( idPair ); + + CleanupStack::Pop( entry ); + view.NextL(); + } + + CleanupStack::PopAndDestroy( &view ); + CleanupStack::PopAndDestroy( statement ); + + iDb.Close(); + + RCSELOGSTRING( "CRCSEDbImporter::ImportAudioCodecsL() - OUT" ); + } + + +// --------------------------------------------------------------------------- +// Delete imported (restored) rcse database files. +// --------------------------------------------------------------------------- +// +void CRCSEDbImporter::DeleteImports() + { + RCSELOGSTRING( "CRCSEDbImporter::DeleteImports() - IN" ); + + TInt err( 0 ); + + // Delete VoIP profile import + err = iDb.Open( iDbSession, KDbName, KDatabaseUID ); + + if ( KErrNone == err ) + { + iDb.Destroy(); + iDb.Close(); + RCSELOGSTRING( "Profile import deleted" ); + } + else + { + RCSELOGSTRING2( "Profile import not deleted, err=%d", err ); + } + + // Delete audio codec import + err = iDb.Open( iDbSession, KDbCodecName, KDatabaseUID ); + + if ( KErrNone == err ) + { + iDb.Destroy(); + iDb.Close(); + RCSELOGSTRING( "Codec import deleted" ); + } + else + { + RCSELOGSTRING2( "Codec import not deleted, err=%d", err ); + } + + RCSELOGSTRING( "CRCSEDbImporter::DeleteImports() - OUT" ); + } + + +// --------------------------------------------------------------------------- +// Map query result from a given column to profile entry. +// ----------------------------------------------------------------------------- +// +void CRCSEDbImporter::MapColumnToEntryL( + TInt aColumnIndex, + const RDbView& aView, + CRCSEProfileEntry& aEntry ) + { + // Get the column definition + const TDbCol col( aView.ColDef( aColumnIndex ) ); + + // Maps the values using the names of columns + if ( col.iName == KProfileId ) + { + aEntry.iId = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KProtocolIds ) + { + const TDesC& ids = aView.ColDes( aColumnIndex ); + // Extracts the numbers from ids to iIds. + GetProfileIdsFromDescriptorL( ids, aEntry.iIds ); + } + else if ( col.iName == KProviderName ) + { + aEntry.iProviderName.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KSettingsName ) + { + aEntry.iSettingsName.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KAutoComplete ) + { + aEntry.iAutoComplete = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KEndMediaPort ) + { + aEntry.iEndMediaPort = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHoldRingBack ) + { + aEntry.iHoldRingBack = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KInbandDtmf) + { + aEntry.iInbandDTMF = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KMediaQOS ) + { + aEntry.iMediaQOS = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KOutbandDtmf ) + { + aEntry.iOutbandDTMF = static_cast + ( aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KPreferredCodecs ) + { + const TDesC& codecs = aView.ColDes( aColumnIndex ); + // Extracts the numbers from codecs to iPreferredCodecs. + GetNumbersFromDescriptorL( codecs, aEntry.iPreferredCodecs ); + } + else if ( col.iName == KSiqnalingQOS ) + { + aEntry.iSiqnalingQOS = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KStartMediaPort ) + { + aEntry.iStartMediaPort = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KCFNoAnswer ) + { + aEntry.iCFNoAnswer = static_cast + ( aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KCFBusy ) + { + aEntry.iCFBusy = static_cast + ( aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KCFUnconditional ) + { + aEntry.iCFUnconditional = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KRedundancy ) + { + aEntry.iRedundancy = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KSecureCallPreference ) + { + aEntry.iSecureCallPreference = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KVoIPProfileLock ) + { + aEntry.iVoIPProfileLock = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KAdhocAllowed ) + { + aEntry.iAdhocAllowed = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KSIPServerType ) + { + aEntry.iSIPServerType.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KSBCType ) + { + aEntry.iSBCType.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KSTUNServerType ) + { + aEntry.iSTUNServerType.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KWLANAPType ) + { + aEntry.iWLANAPType.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KPSTNGatewayType ) + { + aEntry.iPSTNGatewayType.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KSecurityGatewayType ) + { + aEntry.iSecurityGatewayType.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KRTCP ) + { + aEntry.iRTCP = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KSIPVoIPUAHTerminalType ) + { + aEntry.iSIPVoIPUAHTerminalType = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KSIPVoIPUAHeaderWLANMAC ) + { + aEntry.iSIPVoIPUAHeaderWLANMAC = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KSIPVoIPUAHeaderString ) + { + aEntry.iSIPVoIPUAHeaderString.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KProfileLockedToIAP ) + { + aEntry.iProfileLockedToIAP = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KVoIPPluginUID ) + { + aEntry.iVoIPPluginUID = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KAllowVoIPoverWCDMA ) + { + aEntry.iAllowVoIPoverWCDMA = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KAllowVoIPoverBT ) + { + aEntry.iAllowVoIPoverBT = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KMeanCountOfVoIPDigits ) + { + aEntry.iMeanCountOfVoIPDigits = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KIgnoreAddrDomainPart ) + { + aEntry.iIgnoreAddrDomainPart = aView.ColInt32( aColumnIndex ); + } + + else if ( col.iName == KHandoverDialect ) + { + aEntry.iHandoverDialect = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KPSTelephonyHOPreference ) + { + aEntry.iPSTelephonyHOPreference = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHOThresholdValueLL ) + { + aEntry.iHOThresholdValueLL = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHOThresholdValueHL ) + { + aEntry.iHOThresholdValueHL = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KNumberOfMeasurementsAbove ) + { + aEntry.iNumberOfMeasurementsAbove = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KNumberOfMeasurementsBelow ) + { + aEntry.iNumberOfMeasurementsBelow = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSmartScannInterParaHigh ) + { + aEntry.iSmartScannInterParaHigh = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSmartScannInterParaMedium ) + { + aEntry.iSmartScannInterParaMedium = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSmartScannInterParaLow ) + { + aEntry.iSmartScannInterParaLow = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSmartScannInterParaStatic ) + { + aEntry.iSmartScannInterParaStatic = aView.ColInt32( aColumnIndex ); + } + + else if ( col.iName == KSmartScannDurationHighMode ) + { + aEntry.iSmartScannDurationHighMode = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSmartScannDurationMediumMode ) + { + aEntry.iSmartScannDurationMediumMode = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSmartScannDurationLowMode ) + { + aEntry.iSmartScannDurationLowMode = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHandoffNumber ) + { + aEntry.iHandoffNumber = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHandbackNumber ) + { + aEntry.iHandbackNumber = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHysterisisTimer ) + { + aEntry.iHysterisisTimer = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHandOffProcessTimer ) + { + aEntry.iHandOffProcessTimer = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KDisconnectProcessTimer ) + { + aEntry.iDisconnectProcessTimer = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KHandoffPrefix ) + { + aEntry.iHandoffPrefix.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KHandbackPrefix ) + { + aEntry.iHandbackPrefix.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KHandoverTones ) + { + aEntry.iHandoverTones = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSupportSMSoverWLAN ) + { + aEntry.iSupportSMSoverWLAN = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KServiceProviderId ) + { + aEntry.iServiceProviderId = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KUserPhoneUriParam ) + { + aEntry.iUserPhoneUriParameter = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KSIPConnTestAddress ) + { + aEntry.iSIPConnTestAddress.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KNATSettingsStorageId ) + { + aEntry.iNATSettingsStorageId = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KSIPMinSE ) + { + aEntry.iSIPMinSE = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KSIPSessionExpires ) + { + aEntry.iSIPSessionExpires = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KNATProtocol ) + { + aEntry.iNATProtocol = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KNewServiceTable ) + { + aEntry.iNewServiceTableEntry = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KSNAPId ) + { + aEntry.iSNAPId = aView.ColUint32( aColumnIndex ); + } + else + { + // Skip unknown column. + RCSELOGSTRING2( + "CRCSEProfileRegistry::MapColumnToEntryL() - unknown %d", + aColumnIndex ); + } + + } + + +// ----------------------------------------------------------------------------- +// Map query result from a given column to audio codec entry. +// ----------------------------------------------------------------------------- +// +void CRCSEDbImporter::MapColumnToEntryL( + TInt aColumnIndex, + const RDbView& aView, + CRCSEAudioCodecEntry& aCodecEntry ) + { + // Get the column definition + const TDbCol col( aView.ColDef( aColumnIndex ) ); + + // Maps the values using the names of columns + if ( col.iName == KAudioCodecId ) + { + aCodecEntry.iCodecId = aView.ColUint32( aColumnIndex ); + } + else if ( col.iName == KMediaTypeName ) + { + aCodecEntry.iMediaTypeName.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KMediaSubTypeName ) + { + aCodecEntry.iMediaSubTypeName.Copy( aView.ColDes( aColumnIndex ) ); + } + else if ( col.iName == KJitterBufferSize ) + { + aCodecEntry.iJitterBufferSize = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KOctetAlign ) + { + aCodecEntry.iOctetAlign = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KModeSet ) + { + const TDesC& modeset = aView.ColDes( aColumnIndex ); + GetNumbersFromDescriptorL( modeset, aCodecEntry.iModeSet ); + } + else if ( col.iName == KModeChangePeriod ) + { + aCodecEntry.iModeChangePeriod = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KModeChangeNeighbor ) + { + aCodecEntry.iModeChangeNeighbor = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KPtime ) + { + aCodecEntry.iPtime = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KMaxptime ) + { + aCodecEntry.iMaxptime = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KCrc ) + { + aCodecEntry.iCrc = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KRobustSorting ) + { + aCodecEntry.iRobustSorting = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KInterLeaving ) + { + aCodecEntry.iInterLeaving = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KChannels ) + { + const TDesC& channels = aView.ColDes( aColumnIndex ); + GetNumbersFromDescriptorL( channels, aCodecEntry.iChannels ); + } + else if ( col.iName == KVAD ) + { + aCodecEntry.iVAD = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KDTX ) + { + aCodecEntry.iDTX = static_cast( + aView.ColInt32( aColumnIndex ) ); + } + else if ( col.iName == KSamplingRate ) + { + aCodecEntry.iSamplingRate = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KAnnexb ) + { + aCodecEntry.iAnnexb = static_cast( + aView.ColInt32( aColumnIndex) ); + } + else if ( col.iName == KModeChangeCapability ) + { + aCodecEntry.iModeChangeCapability = aView.ColInt32( aColumnIndex ); + } + else if ( col.iName == KMaxRed ) + { + aCodecEntry.iMaxRed = aView.ColInt32( aColumnIndex ); + } + else + { + // Skip unknown column. + RCSELOGSTRING2( + "CRCSEAudioCodecRegistry::MapColumnToEntryL() - unknown %d", + aColumnIndex ); + } + + } + +// ----------------------------------------------------------------------------- +// Read TSettingIds structs from given descriptor to array. +// ----------------------------------------------------------------------------- +// +void CRCSEDbImporter::GetProfileIdsFromDescriptorL( + const TDesC& aNumbers, + RArray& aArray ) + { + CleanupClosePushL( aArray ); + + TLex lex( aNumbers ); + + 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 ); + } + + +// ----------------------------------------------------------------------------- +// Read IDs from given descriptor to array. +// ----------------------------------------------------------------------------- +// +template +void CRCSEDbImporter::GetNumbersFromDescriptorL( + const TDesC& aNumbers, + RArray& aArray ) + { + CleanupClosePushL( aArray ); + TLex lex( aNumbers ); + + // Reset original array + aArray.Reset(); + + while( !lex.Eos() ) + { + // Extract the number as unsigned int 32, which can be + // converted to value wanted (template) + TUint32 value; + lex.Val( value, EDecimal ); + aArray.AppendL( static_cast( value ) ); + // Skip characters to space char. + lex.SkipCharacters(); + if ( !lex.Eos() ) // Check that End of string is not next char. + { + // Go over the space character. + lex.Inc( 1 ); + } + } + + CleanupStack::Pop( &aArray ); + } + + +// ----------------------------------------------------------------------------- +// Update new preferred audio codec IDs to imported VoIP profiles. +// ----------------------------------------------------------------------------- +// +void CRCSEDbImporter::UpdatePreferredCodecs() + { + RCSELOGSTRING( "CRCSEDbImporter::UpdatePreferredCodecs() - IN" ); + + // Update preferred codec IDs for each profile + const TInt count( iProfiles.Count() ); + for( TInt i( 0 ); i < count; ++i ) + { + // Browse preferred codecs array + const TInt codecCount( iProfiles[i]->iPreferredCodecs.Count() ); + for ( TInt j( 0 ); j < codecCount; ++j ) + { + // Search new codec ID from array + TUint32 oldId = iProfiles[i]->iPreferredCodecs[j]; + TBool found( EFalse ); + + const TInt idCount( iCodecIds.Count() ); + for ( TInt k( 0 ); k < idCount && !found; ++k ) + { + found = ( oldId == iCodecIds[k].iOldId ); + + // Set new ID if it was found + if ( found ) + { + iProfiles[i]->iPreferredCodecs[j] = iCodecIds[k].iNewId; + RCSELOGSTRING4( + "Match %d. Codec index %d updated for %d. profile", + k, j, i + 1 ); + } + else + { + RCSELOGSTRING2( "Skip %d", k ); + } + } + } + } + + RCSELOGSTRING( "CRCSEDbImporter::UpdatePreferredCodecs() - OUT" ); + } + + + +// ----------------------------------------------------------------------------- +// Store imported voip profiles. +// ----------------------------------------------------------------------------- +// +void CRCSEDbImporter::StoreVoIPProfilesL() + { + RCSELOGSTRING( "CRCSEDbImporter::StoreVoIPProfilesL() - IN" ); + + CRCSEProfileRegistry* reg = CRCSEProfileRegistry::NewLC(); + reg->AddL( iProfiles ); + CleanupStack::PopAndDestroy( reg ); + + RCSELOGSTRING( "CRCSEDbImporter::StoreVoIPProfilesL() - OUT" ); + } + + +// ----------------------------------------------------------------------------- +// Store imported audio codecs. +// ----------------------------------------------------------------------------- +// +void CRCSEDbImporter::StoreAudioCodecsL() + { + RCSELOGSTRING( "CRCSEDbImporter::StoreAudioCodecsL() - IN" ); + + CRCSEAudioCodecRegistry* reg = CRCSEAudioCodecRegistry::NewLC(); + reg->AddL( iCodecs ); + CleanupStack::PopAndDestroy( reg ); + + // Update codec ID pairs + const TInt codecCount( iCodecs.Count() ); + const TInt codecIdCount( iCodecIds.Count() ); + + __ASSERT_ALWAYS( codecCount == codecIdCount, User::Leave( KErrCorrupt ) ); + + for ( TInt i( 0 ); i < codecCount; ++i ) + { + iCodecIds[ i ].iNewId = iCodecs[i]->iCodecId; + } + + RCSELOGSTRING( "CRCSEDbImporter::StoreAudioCodecsL() - OUT" ); + } + + + + + + + + + + + + + +