diff -r 000000000000 -r 5a93021fdf25 dbcreator/commsdatcreator/Src/cdccommsdatcreator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbcreator/commsdatcreator/Src/cdccommsdatcreator.cpp Thu Dec 17 08:55:21 2009 +0200 @@ -0,0 +1,672 @@ +/* +* Copyright (c) 2002 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: Module for creating CommsDat from an input file +* +*/ + + + + +// INCLUDE FILES + +#include "cdccommsdatcreator.h" +#include "cdclogger.h" +#include "cdcreaderxml.h" +#include "cdcprocessorpacketdata.h" +#include "cdcprocessorwlan.h" +#include "cdcprocessorlan.h" +#include "cdcprocessorvpn.h" +#include "cdcprocessordn.h" +#include "cdcprocessorglobal.h" +#include "cdcwlantables.h" +#include "cdcwlandevicesettings.h" +#include "cdcdatamobilitytables.h" +#include "cdcdumptables.h" +#include "centralrepository.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + + +// CONSTANTS +//maximum length of access point name +const TInt KLengthOfExtention = 4; + +//extension +_LIT16( KExtensionXML, ".xml" ); //XML file + + +//----------------------------------------------------------------------------- +// CCdcCommsDatCreator::NewL() +//----------------------------------------------------------------------------- +// +EXPORT_C CCdcCommsDatCreator* CCdcCommsDatCreator::NewL() + { + CCdcCommsDatCreator* self = NewLC(); + CleanupStack::Pop( self ); // self + + return self; + } + + +//----------------------------------------------------------------------------- +// CCdcCommsDatCreator::NewLC() +//----------------------------------------------------------------------------- +// +EXPORT_C CCdcCommsDatCreator* CCdcCommsDatCreator::NewLC() + { + CCdcCommsDatCreator* self = new (ELeave) CCdcCommsDatCreator(); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + + +//------------------------------------------------ +// CDbCreator::CreateTablesL +//------------------------------------------------ +// +EXPORT_C void CCdcCommsDatCreator::CreateTablesL() + { + CLOG_WRITE( "=====================\n" ) + CLOG_WRITE( "Creating tables ...\n" ) + CLOG_WRITE( "=====================\n" ) + + + //extends architecture of CommsDat + //creates WLAN tables + //------------------------------- + if ( iIsWlanS ) + { + CLOG_WRITE( "Creates WLAN service tables\n" ) + CLOG_WRITE( "---------------------------\n" ) + + CWlanTables* wlanTables = CWlanTables::NewL(); + CleanupStack::PushL( wlanTables ); + wlanTables->CheckAndCreateTablesL(); + + CleanupStack::PopAndDestroy( wlanTables ); + + // WLAN Device Settings Table. + CLOG_WRITE( "Writes Default settings to WLAN Device Settings Table.\n" ) + + // Creating a settings object does it all. + CWlanDeviceSettings* wlanDeviceSettings = CWlanDeviceSettings::NewL(); + delete wlanDeviceSettings; + } + + CLOG_WRITE( "CDataMobilityTables\n" ) + + //extends architecture of CommsDat + //creates Data Mobility tables + //---------------------------- + CDataMobilityTables* dmTables = CDataMobilityTables::NewL(); + CleanupStack::PushL( dmTables ); + + CLOG_WRITE( "Creates Data Mobility ALR tables\n" ) + CLOG_WRITE( "--------------------------------\n" ) + dmTables->CheckAndCreateAlrTablesL(); + + CLOG_WRITE( "Creates Data Mobility MIP tables\n" ) + CLOG_WRITE( "--------------------------------\n" ) + dmTables->CheckAndCreateMipTablesL(); + + CleanupStack::PopAndDestroy( dmTables ); + + //if there is only an "e" parameter then DbCreator extends CommsDat, but + //does not create access points. This functionality earlier was done + //by WlanToCDb modul. + } + + +//------------------------------------------------ +// CDbCreator::CreateCommsDatL +//------------------------------------------------ +// +EXPORT_C void CCdcCommsDatCreator::CreateCommsDatL( const TFileName& aInFileName ) + { + CLOG_WRITE( "=====================\n" ) + CLOG_WRITE( "Processing started...\n" ) + CLOG_WRITE( "=====================\n" ) + + iCmManager.OpenL(); + + TDbCreatorInputCharSet charSet( ECharSetUnknown );//input character set + + //Creates access points + //---------------------- + + if ( InputFileType( aInFileName ) == EFileXML ) + { + CLOG_WRITE( "Tries to open file"); + // Logs file name + HBufC *fileName = aInFileName.AllocLC(); + CLOG_WRITE_FORMAT( "Input file : %S\n", fileName ) + CleanupStack::PopAndDestroy( fileName ); + + delete iReader; + iReader = NULL; + iReader = CReaderXML::NewLC( aInFileName, charSet ); + CleanupStack::Pop(iReader); + + //locates feature in xml file + iReader->LocateFeatureL(); + } + else + { + User::Leave( KErrInvalidExtension ); + } + + + TBool found( EFalse ); + + // First, add all destinations to the database. Connection methods and + // embedded destinations are not added at this time. + while ( iReader->CurrentFeature() != EFeatureNone && !found ) + { + if( iReader->CurrentFeature() == EFeatureDN ) + { + ProcessDNL( iCmInDest, ETrue ); + } + iReader->LocateFeatureL(); + } + + // Reset input file + iReader->Reset(); + iReader->LocateFeatureL(); + + // Then add connection methods, and assign them to destinations if + // needed + while ( iReader->CurrentFeature() != EFeatureNone ) + { + switch ( iReader->CurrentFeature() ) + { + case EFeaturePacketData: + { + //creates GPRS access point + CLOG_WRITE( "Feature found : Packet Data Access point(s)\n" ) + + iFileProcessor = CProcessorPacketData::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iLingerSettings ); + iFileProcessor->ParseFileL(); + + delete iFileProcessor; + iFileProcessor = NULL; + + break; + } + + case EFeatureWLAN: + { + if( iIsWlanS ) + { + //creates WLAN access point + CLOG_WRITE( "Feature found : WLAN Access point(s)\n" ) + + // Reset the EAP settings just to be safe although it should be empty always here. + iEapSettings.ResetAndDestroy(); + + iFileProcessor = CProcessorWlan::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iWlanSecurity, + iEapSettings ); + iFileProcessor->ParseFileL(); + + delete iFileProcessor; + iFileProcessor = NULL; + + } + break; + } + + case EFeatureLAN: + { + //creates LAN access point + CLOG_WRITE( "Feature found : LAN Access point(s)\n" ) + + iFileProcessor = CProcessorLan::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames ); + iFileProcessor->ParseFileL(); + + delete iFileProcessor; + iFileProcessor = NULL; + break; + } + + case EFeatureVPN: + { + //creates VPN access point + CLOG_WRITE( "Feature found : VPN Access point(s)\n" ) + CLOG_WRITE( "-----------------------------------\n" ) + + iFileProcessor = CProcessorVpn::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iUnderLying ); + iFileProcessor->ParseFileL(); + + delete iFileProcessor; + iFileProcessor = NULL; + + break; + } + + case EFeatureDN: + { + + ProcessDNL( iCmInDest, EFalse ); + + break; + } + + case EFeatureGlobal: + { + // Valid tag but does nothing now. + // Global can be processed at the last end. + + + //sets global settings + CLOG_WRITE( "Feature found : Global settings\n" ) + CLOG_WRITE( "-------------------------------\n" ) + + iFileProcessor = CProcessorGlobal::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iDestArray, + iDestNames, + iDefCon ); + iFileProcessor->ParseFileL(); + + delete iFileProcessor; + iFileProcessor = NULL; + + break; + } + + default: + User::Panic( KPanicInvalidCase, KErrInvalidCase ); + + }//switch + + //gets next feature + iReader->LocateFeatureL(); + + }//while + + + // Updates the IAPs that are not in destinations. + UpdateUncatCmsL( iCmInDest /*, iPluginNames, iPluginArray*/ ); + + // Sets the underlying IAP/SNAPS for vpn IAPs + SetUnderlyingIapL( iUnderLying ); + + for( TInt i(0); i < iWlanSecurity.Count(); i++ ) + { + CLOG_WRITE_FORMAT( "Sec Pos: %d", i ); + if( iWlanSecurity[i] != NULL ) + { + CLOG_WRITE_FORMAT( "Sec data: %S", iWlanSecurity[i] ); + } + else + { + CLOG_WRITE( "Sec data NULL" ); + } + } + + // Sets the WLAN security paramters including EAP settings + SetWlanSecurityL( iWlanSecurity ); + + // Sets linger settings + SetLingerSettingsL( iLingerSettings ); + + // Sets the default connection + SetDefaultConnectionL( iDefCon ); + + // Logs IAPs in UDEB mode + #ifdef _DEBUG + LogIapIdsL(); + #endif +} + +//------------------------------------------------ +// CCdcCommsDatCreator::DumpCommsDatL +//------------------------------------------------ +// +EXPORT_C void CCdcCommsDatCreator::DumpCommsDatL( const TFileName& aOutFileName ) + { + CLOG_WRITE( "==========================\n" ) + CLOG_WRITE( "Dump processing started...\n" ) + CLOG_WRITE( "==========================\n" ) + + + CDumpTables* dump = CDumpTables::NewLC(); + dump->DoDumpTablesL( aOutFileName ); + CleanupStack::PopAndDestroy( dump ); //dump + + CLOG_WRITE( "======== end dump =========\n" ) + + } + +//------------------------------------------------ +// CCdcCommsDatCreator::CCdcCommsDatCreator +//------------------------------------------------ +// +CCdcCommsDatCreator::CCdcCommsDatCreator() + { + } + +//------------------------------------------------ +// CCdcCommsDatCreator::~CCdcCommsDatCreator +//------------------------------------------------ +// +CCdcCommsDatCreator::~CCdcCommsDatCreator() + { + delete iReader; + + iEapSettings.ResetAndDestroy(); + + for ( TInt i = 0; i < iPluginArray.Count(); i++ ) + { + iPluginArray[i]->Close(); + } + iPluginArray.ResetAndDestroy(); + iPluginNames.ResetAndDestroy(); + + for ( TInt i = 0; i < iDestArray.Count(); i++ ) + { + iDestArray[i]->Close(); + } + iDestArray.ResetAndDestroy(); + + iDestNames.ResetAndDestroy(); + + iUnderLying.ResetAndDestroy(); + + iWlanSecurity.ResetAndDestroy(); + + iLingerSettings.ResetAndDestroy(); + + iDefCon.ResetAndDestroy(); + + iCmInDest.Close(); + + iCmManager.Close(); + } + + +//------------------------------------------------ +// CCdcCommsDatCreator::ConstructL +//------------------------------------------------ +// +void CCdcCommsDatCreator::ConstructL() + { + CLOG_WRITE( "Initialising FeatureManager\n" ) + //checks if Wlan feature is supported + FeatureManager::InitializeLibL(); + iIsWlanS = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan ); + FeatureManager::UnInitializeLib(); + CLOG_WRITE( "FeatureManager closed\n" ) + } + +//------------------------------------------------ +// CCdcCommsDatCreator::InputFileType +//------------------------------------------------ +// +TUint CCdcCommsDatCreator::InputFileType( const TFileName& aFileName ) + { + TBuf extension; + + //get extension + extension.Copy( aFileName.Right( KLengthOfExtention ) ); + + TDbCreatorInputFile type ( EFileUnknown ); + + if ( extension.CompareF( KExtensionXML ) == 0 ) + { + type = EFileXML; + } + else + { + //type keeps default value + } + + return type; + + } + + +//------------------------------------------------ +// CCdcCommsDatCreator::UpdateUncatCmsL +//------------------------------------------------ +// +void CCdcCommsDatCreator::UpdateUncatCmsL( RArray< TBool >& aCmInDest ) + { + CLOG_WRITE( "-------------------------------\n" ) + CLOG_WRITE( "Uncategorised Cms:\n" ) + + // No destination defined + if( aCmInDest.Count() == 0 ) + { + for( TInt i(0); i < iPluginArray.Count(); i++ ) + { + iPluginArray[i]->UpdateL(); + CLOG_WRITE_FORMAT( "Uncat CM Name: %S", iPluginNames[i] ); + } + } + else + { + + for( TInt i(0); i < iPluginArray.Count(); i++ ) + { + if( aCmInDest[ i ] == EFalse ) + { + iPluginArray[i]->UpdateL(); + CLOG_WRITE_FORMAT( "Uncat CM Name: %S", iPluginNames[i] ); + } + } + } + + CLOG_WRITE( "-------------------------------\n" ) + } + + +//------------------------------------------------ +// CCdcCommsDatCreator::LogIapIdsL +//------------------------------------------------ +// +void CCdcCommsDatCreator::LogIapIdsL() + { + for( TInt i(0); i < iPluginArray.Count(); i++ ) + { + TUint32 uid1 = iPluginArray[i]->GetIntAttributeL( CMManager::ECmId ); + CLOG_WRITE_FORMAT( "IAP Name: %S", iPluginNames[i] ); + CLOG_WRITE_FORMAT( "ID: %d\n", uid1 ); + } + + for( TInt i(0); i < iDestArray.Count(); i++ ) + { + TUint32 uid1 = iDestArray[i]->Id(); + CLOG_WRITE_FORMAT( "SNAP Name: %S", iDestNames[i] ); + CLOG_WRITE_FORMAT( "ID: %d\n", uid1); + } + } + +// --------------------------------------------------------- +// CCdcCommsDatCreator::ProcessDNL +// --------------------------------------------------------- +// +void CCdcCommsDatCreator::ProcessDNL( RArray< TBool >& aCmInDest, + TBool aFirstRound ) + { + CLOG_WRITE( "Feature found : Destination Network(s)\n" ) + CLOG_WRITE( "--------------------------------------\n" ) + + + if( !aFirstRound ) + { + for( TInt i(0); i < iPluginArray.Count(); i++ ) + { + aCmInDest.Append( EFalse ); + } + } + + iFileProcessor = CProcessorDN::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iDestArray, + iDestNames, + aCmInDest, + aFirstRound ); + iFileProcessor->ParseFileL(); + + delete iFileProcessor; + iFileProcessor = NULL; + CLOG_WRITE( "--------------------------------------\n" ) + } + +// --------------------------------------------------------- +// CCdcCommsDatCreator::SetUnderlyingIapL +// --------------------------------------------------------- +// +void CCdcCommsDatCreator::SetUnderlyingIapL( RPointerArray< HBufC >& aUnderLying ) + { + // Sets the underlying IAP/SNAPS for vpn IAPs + if( aUnderLying.Count() > 0 ) + { + CLOG_WRITE_FORMAT( "SetUnderlyingIapL: %d\n", aUnderLying.Count() ) + CLOG_WRITE( "--------------------------------------\n" ) + + CProcessorVpn* vpn = CProcessorVpn::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + aUnderLying ); + + CleanupStack::PushL( vpn ); + vpn->ProcessUnderLyingL( iDestArray, iDestNames ); + + + CleanupStack::PopAndDestroy( vpn ); + + CLOG_WRITE( "--------------------------------------\n" ) + } + } + +// --------------------------------------------------------- +// CCdcCommsDatCreator::ProcessDNL +// --------------------------------------------------------- +// +void CCdcCommsDatCreator::SetDefaultConnectionL( RPointerArray< HBufC >& aDefCon ) + { + // Sets the default connection + if( aDefCon.Count() > 0 ) + { + CLOG_WRITE_FORMAT( "SetDefaultConnectionL: %d\n", aDefCon.Count() ) + CLOG_WRITE( "--------------------------------------\n" ) + + CProcessorGlobal* glb = CProcessorGlobal::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iDestArray, + iDestNames, + aDefCon ); + + CleanupStack::PushL( glb ); + glb->SetDefaultConnectionL(); + + CleanupStack::PopAndDestroy( glb ); + + CLOG_WRITE( "--------------------------------------\n" ) + } + } + +// --------------------------------------------------------- +// CCdcCommsDatCreator::SetUnderlyingIapL +// --------------------------------------------------------- +// +void CCdcCommsDatCreator::SetWlanSecurityL( RPointerArray< HBufC >& aWlanSecurity ) + { + if( aWlanSecurity.Count() > 0 + || iEapSettings.Count() > 0 ) + { + CLOG_WRITE_FORMAT( "SetWlanSecurityL: %d\n", aWlanSecurity.Count() ); + CLOG_WRITE_FORMAT( "SetWlanSecurityL: EAPs: %d\n", iEapSettings.Count() ); + CLOG_WRITE( "--------------------------------------\n" ) + + CProcessorWlan* wlan = CProcessorWlan::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + aWlanSecurity, + iEapSettings); + + CleanupStack::PushL( wlan ); + wlan->SaveSecurityInfoL(); + + CleanupStack::PopAndDestroy( wlan ); + + // EAP settings were saved. Delete them. + iEapSettings.ResetAndDestroy(); + + CLOG_WRITE( "--------------------------------------\n" ) + } + } + +// --------------------------------------------------------- +// CCdcCommsDatCreator:::SetLingerSettingsL +// --------------------------------------------------------- +// +void CCdcCommsDatCreator::SetLingerSettingsL( + RPointerArray< CLingerElement >& aLingerSettings ) + { + CLOG_WRITE_FORMAT( "SetLingerSettingsL: %d\n", aLingerSettings.Count() ); + if ( aLingerSettings.Count() > 0 ) + { + CProcessorPacketData* pdp = CProcessorPacketData::NewL( iReader, + iCmManager, + iPluginArray, + iPluginNames, + iLingerSettings ); + + CleanupStack::PushL( pdp ); + pdp->SaveLingerSettingsL(); + + CleanupStack::PopAndDestroy( pdp ); + } + CLOG_WRITE( "--------------------------------------\n" ) + } + + +// End of File.