diff -r 000000000000 -r 5a93021fdf25 dbcreator/commsdatcreator/Src/cdcdatamobilitytables.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbcreator/commsdatcreator/Src/cdcdatamobilitytables.cpp Thu Dec 17 08:55:21 2009 +0200 @@ -0,0 +1,613 @@ +/* +* Copyright (c) 2006 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: Implementation of the class CDataMobilityTables +* +*/ + + + + +// INCLUDE FILES +#include "cdcdatamobilitytables.h" +#include "cdclogger.h" + +#include +#include +#include +#include +#include + +// CONSTANTS + +// Maximum bearer type name length +const TUint KMaxNameLength = 50; + +// Default bearer priorities +const TUint KDefaultPriorityLan = 0; +const TUint KDefaultPriorityWlan = 1; +const TUint KDefaultPriorityPan = 2; +const TUint KDefaultPriorityGprsOut = 3; +const TUint KDefaultPriorityGprsIn = 4; +const TUint KDefaultPriorityDialOut = 6; +const TUint KDefaultPriorityDialIn = 7; +const TUint KDefaultUIPriorityVpn = 253; +const TUint KDefaultUIPriorityMip = 254; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CDataMobilityTables::NewL +// --------------------------------------------------------- +// +CDataMobilityTables* CDataMobilityTables::NewL() + { + + CDataMobilityTables* self = new ( ELeave ) CDataMobilityTables; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CDataMobilityTables +// --------------------------------------------------------- +// +CDataMobilityTables::CDataMobilityTables() + { + //no implementation needed + } + + +// --------------------------------------------------------- +// CDataMobilityTables::ConstructL +// --------------------------------------------------------- +// +void CDataMobilityTables::ConstructL() + { + //no implementation needed + iSession = CMDBSession::NewL( CMDBSession::LatestVersion() ); + } + + +// --------------------------------------------------------- +// CDataMobilityTables::~CDataMobilityTables +// --------------------------------------------------------- +// +CDataMobilityTables::~CDataMobilityTables() + { + if ( iSession ) + { + iSession->Close(); + delete iSession; + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CheckAndCreateAlrTablesL +// --------------------------------------------------------- +// +void CDataMobilityTables::CheckAndCreateAlrTablesL() + { + CreateVirtualIAPNextLayerTableL(); + CreateGlobalBearerTypeTableL(); + PopulateGlobalBearerTypeTableL(); + CreateDataMobilitySelectionPolicyTableL(); + CreateSNAPMetadataTableL(); + CreateIAPMetadataTableL(); + CreateDestNetworkTableL(); + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CheckAndCreateMipTablesL +// --------------------------------------------------------- +// +void CDataMobilityTables::CheckAndCreateMipTablesL() + { + CreateMIPServiceTableL(); + CreateMIP4TableL(); + CreateMIP6TableL(); + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateGlobalBearerTypeTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateGlobalBearerTypeTableL() + { + //Check whether Global Bearer Type Priorization table exists + TInt error( KErrNone ); + + TRAP( error, CCDGlobalBearerTypePriorizationRecord::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDGlobalBearerTypePriorizationRecord::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDGlobalBearerTypePriorizationRecord::TableIdL( *iSession ) ); + if( id >= KErrNone ) + { + CLOG_WRITE( "Added Global Bearer Type Priorization table\n" ) + } + else + { + CLOG_WRITE_FORMAT( "Failed to add Global Bearer Type Priorization\ + table: %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE ( "Global Bearer Type Priorization table already exists" ) + } + else + { + //do nothing + } + } + + +// ------------------------------------------------------------ +// CDataMobilityTables::CreateDataMobilitySelectionPolicyTableL +// ------------------------------------------------------------ +// +void CDataMobilityTables::CreateDataMobilitySelectionPolicyTableL() + { + //Check whether Data Mobility Selection Policy table exists + TInt error( KErrNone ); + TRAP( error, CCDDataMobilitySelectionPolicyRecord::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDDataMobilitySelectionPolicyRecord::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDDataMobilitySelectionPolicyRecord::TableIdL( *iSession ) ); + if( id >= KErrNone ) + { + CLOG_WRITE( "Added Data Mobility Selection Policy table\n" ) + } + else + { + CLOG_WRITE_FORMAT( + "Failed to add Data Mobility Selection Policy table. %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "Data Mobility Selection Policy table already exists" ) + } + else + { + //do nothing + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateMIPServiceTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateMIPServiceTableL() + { + //Check whether MIP Service table exists + TInt error( KErrNone ); + TRAP( error, CCDMIPServiceExtRecord::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDMIPServiceExtRecord::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDMIPServiceExtRecord::TableIdL( *iSession ) ); + if( KErrNone <= id ) + { + CLOG_WRITE( "Added MIP Service table\n" ) + } + else + { + CLOG_WRITE_FORMAT( "Failed to add MIP Service table: %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "MIP Service table already exists" ) + } + else + { + //do nothing + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateMIP4TableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateMIP4TableL() + { + //Check whether MIP4 table exists + TInt error( KErrNone ); + TRAP( error, CCDMIP4Record::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDMIP4Record::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDMIP4Record::TableIdL( *iSession ) ); + if( KErrNone <= id ) + { + CLOG_WRITE( "Added MIP4 table\n" ) + } + else + { + CLOG_WRITE_FORMAT( "Failed to add MIP4 table: %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "MIP4 table already exists" ) + } + else + { + //do nothing + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateMIP6TableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateMIP6TableL() + { + //Check whether MIP6 table exists + TInt error( KErrNone ); + TRAP( error, CCDMIP6Record::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDMIP6Record::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDMIP6Record::TableIdL( *iSession ) ); + if( KErrNone <= id ) + { + CLOG_WRITE( "Added MIP6 table\n" ) + } + else + { + CLOG_WRITE_FORMAT( "Failed to add MIP6 table %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "MIP6 table already exists" ) + } + else + { + //do nothing + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateSNAPMetadataTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateSNAPMetadataTableL() + { + //Check whether SNAP Metadata table exists + TInt error( KErrNone ); + TRAP( error, CCDSNAPMetadataRecord::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDSNAPMetadataRecord::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDSNAPMetadataRecord::TableIdL( *iSession ) ); + if( KErrNone <= id ) + { + CLOG_WRITE( "Added SNAP Metadata table\n" ) + } + else + { + CLOG_WRITE_FORMAT( "Failed to add SNAP Metadata table? %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "SNAP Metadata table already exists" ) + } + else + { + //do nothing + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateIAPMetadataTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateIAPMetadataTableL() + { + //Check whether IAP Metadata table exists + TInt error( KErrNone ); + TRAP( error, CCDIAPMetadataRecord::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDIAPMetadataRecord::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDIAPMetadataRecord::TableIdL( *iSession ) ); + if( KErrNone <= id ) + { + CLOG_WRITE( "Added IAP Metadata table\n" ) + } + else + { + CLOG_WRITE_FORMAT( "Failed to add IAP Metadata table: %d\n", id ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "IAP Metadata table already exists" ) + } + else + { + //do nothing + } + } + + +// --------------------------------------------------------- +// CDataMobilityTables::CreateVirtualIAPNextLayerTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateVirtualIAPNextLayerTableL() + { + //Check whether IAP Metadata table exists + TInt error( KErrNone ); + TRAP( error, CCDVirtualIAPNextLayerRecord::TableIdL( *iSession ) ); + + //Table not found -> create it + if( error == KErrNotFound ) + { + //Add table to CommsDat + CCDVirtualIAPNextLayerRecord::CreateTableL( *iSession ); + + //check result + TInt id( KErrNone ); + TRAP( id, CCDVirtualIAPNextLayerRecord::TableIdL( *iSession ) ); + if( KErrNone > id ) + { + CLOG_WRITE_FORMAT( "Failed to add Virtual IAP Next Layer table %d\n", id ) + } + else + { + CLOG_WRITE( "Added Virtual IAP Next Layer table\n" ) + } + } + //Table already exists + else if ( error == KErrNone) + { + CLOG_WRITE( "Virtual IAP Next Layer table already exists" ) + } + else + { + //do nothing + } + } + +// --------------------------------------------------------- +// CreateDestNetworkTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::CreateDestNetworkTableL() + { + //checks whether table exists + TInt error( KErrNone ); + + TRAP( error, CCDDestNWTable::TableIdL( *iSession ) ); + if( error == KErrNotFound ) + { + //table not found -- add new table + CCDDestNWTable::CreateTableL( *iSession ); + + //check result + TRAP( error, CCDDestNWTable::TableIdL( *iSession ) ); + + if ( error == KErrNone ) + { + CLOG_WRITE( "Added Destination Network table" ) + } + } + else if ( error == KErrNone) + { + CLOG_WRITE( "Destination Network table already exists" ) + } + else + { + //do nothing + } + } + +// --------------------------------------------------------- +// CDataMobilityTables::PopulateGlobalBearerTypeTableL +// --------------------------------------------------------- +// +void CDataMobilityTables::PopulateGlobalBearerTypeTableL() + { + RCmManagerExt cmManager; + cmManager.CreateTablesAndOpenL(); + + CleanupClosePushL( cmManager ); + + RArray< TBearerPriority >* bearerArray = new( ELeave ) + RArray< TBearerPriority >(); + + CleanupStack::PushL( bearerArray ); + + // Check if the bearer table has already been filled + // (and skip populating in this case) + + cmManager.BearerPriorityArrayL( *bearerArray ); + + if( !bearerArray->Count() ) + { + // Prepare bearer priority array + // Strings are needed to be available until the update of the bearer array + // (TBearerPriority has a HBufC* member) + HBufC* lanServiceName = HBufC::NewLC( KMaxNameLength ); + *lanServiceName = TPtrC( KCDTypeNameLANService ); + HBufC* wLanServiceName = HBufC::NewLC( KMaxNameLength ); + *wLanServiceName = TPtrC( KCDTypeNameWLANServiceExt ); + HBufC* panServiceName = HBufC::NewLC( KMaxNameLength ); + *panServiceName = TPtrC( KCDTypeNamePANServiceExt ); + HBufC* gprsOutServiceName = HBufC::NewLC( KMaxNameLength ); + *gprsOutServiceName = TPtrC( KCDTypeNameOutgoingWCDMA ); + HBufC* gprsInServiceName = HBufC::NewLC( KMaxNameLength ); + *gprsInServiceName = TPtrC( KCDTypeNameIncomingWCDMA ); + HBufC* dialOutServiceName = HBufC::NewLC( KMaxNameLength ); + *dialOutServiceName = TPtrC( KCDTypeNameDialOutISP ); + HBufC* dialInServiceName = HBufC::NewLC( KMaxNameLength ); + *dialInServiceName = TPtrC( KCDTypeNameDialInISP ); + HBufC* vpnServiceName = HBufC::NewLC( KMaxNameLength ); + *vpnServiceName = TPtrC( KCDTypeNameVPNService ); + HBufC* mipServiceName = HBufC::NewLC( KMaxNameLength ); + *mipServiceName = TPtrC( KCDTypeNameMIPServiceExt ); + + bearerArray->Reset(); + + TBearerPriority lanRecord; + lanRecord.iServiceType = lanServiceName; + lanRecord.iPriority = KDefaultPriorityLan; + lanRecord.iUIPriority = KDefaultPriorityLan; + bearerArray->Append( lanRecord ); + + TBearerPriority wLanRecord; + wLanRecord.iServiceType = wLanServiceName; + wLanRecord.iPriority = KDefaultPriorityWlan; + wLanRecord.iUIPriority = KDefaultPriorityWlan; + bearerArray->Append( wLanRecord ); + + TBearerPriority panRecord; + panRecord.iServiceType = panServiceName; + panRecord.iPriority = KDefaultPriorityPan; + panRecord.iUIPriority = KDefaultPriorityPan; + bearerArray->Append( panRecord ); + + TBearerPriority gprsOutRecord; + gprsOutRecord.iServiceType = gprsOutServiceName; + gprsOutRecord.iPriority = KDefaultPriorityGprsOut; + gprsOutRecord.iUIPriority = KDefaultPriorityGprsOut; + bearerArray->Append( gprsOutRecord ); + + TBearerPriority gprsInRecord; + gprsInRecord.iServiceType = gprsInServiceName; + gprsInRecord.iPriority = KDefaultPriorityGprsIn; + gprsInRecord.iUIPriority = KDefaultPriorityGprsIn; + bearerArray->Append( gprsInRecord ); + + TBearerPriority dialOutRecord; + dialOutRecord.iServiceType = dialOutServiceName; + dialOutRecord.iPriority = KDefaultPriorityDialOut; + dialOutRecord.iUIPriority = KDefaultPriorityDialOut; + bearerArray->Append( dialOutRecord ); + + TBearerPriority dialInRecord; + dialInRecord.iServiceType = dialInServiceName; + dialInRecord.iPriority = KDefaultPriorityDialIn; + dialInRecord.iUIPriority = KDefaultPriorityDialIn; + bearerArray->Append( dialInRecord ); + + TBearerPriority vpnRecord; + vpnRecord.iServiceType = vpnServiceName; + vpnRecord.iPriority = CMManager::KDataMobilitySelectionPolicyPriorityWildCard; + vpnRecord.iUIPriority = KDefaultUIPriorityVpn; + bearerArray->Append( vpnRecord ); + + TBearerPriority mipRecord; + mipRecord.iServiceType = mipServiceName; + mipRecord.iPriority = CMManager::KDataMobilitySelectionPolicyPriorityWildCard; + mipRecord.iUIPriority = KDefaultUIPriorityMip; + bearerArray->Append( mipRecord ); + + cmManager.UpdateBearerPriorityArrayL( *bearerArray ); + + CLOG_WRITE( "Global Bearer Priorization table updated with default values\n" ) + + // Only pop, because ownership is passed to the array + CleanupStack::Pop( mipServiceName ); + CleanupStack::Pop( vpnServiceName ); + CleanupStack::Pop( dialInServiceName ); + CleanupStack::Pop( dialOutServiceName ); + CleanupStack::Pop( gprsInServiceName ); + CleanupStack::Pop( gprsOutServiceName ); + CleanupStack::Pop( panServiceName ); + CleanupStack::Pop( wLanServiceName ); + CleanupStack::Pop( lanServiceName ); + } + + else + { + CLOG_WRITE( "Not updating Global Bearer Priorization table\n" ) + } + + cmManager.CleanupGlobalPriorityArray( *bearerArray ); + + CleanupStack::PopAndDestroy( bearerArray ); + CleanupStack::PopAndDestroy( &cmManager ); + } + + +// End of File.