dbcreator/commsdatcreator/Src/cdccommsdatcreator.cpp
changeset 0 5a93021fdf25
child 20 9c97ad6591ae
child 57 05bc53fe583b
--- /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 <cmconnectionmethoddef.h>
+#include <cmmanagerext.h>
+
+#include <e32def.h>
+#include <e32base.h>
+#include <s32strm.h>
+#include <s32file.h>
+#include <etelpckt.h>
+#include <featmgr.h>
+#include <commsdattypesv1_1.h>
+#include <commsdattypeinfov1_1.h>
+
+
+// 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<KLengthOfExtention> 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.