dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp
changeset 0 5a93021fdf25
child 2 086aae6fc07e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,855 @@
+/*
+* Copyright (c) 2004 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 CProcessorGlobal
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+#include "cdclogger.h"
+#include "cdcerrors.h"
+#include "cdctagcontainer.h"
+#include "cdccommon.h"
+#include "cmgenconnsettings.h"
+#include "cdcprocessorglobal.h"
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdattypesv1_1.h>
+#else
+#include <commsdattypesv1_1.h>
+#include <commsdattypesv1_1_partner.h>
+#endif
+#include <datamobilitycommsdattypes.h>
+#include <metadatabase.h>
+#include <cmmanagerext.h>
+#include <cmmanager.h>
+#include <cmdestinationext.h>
+#include <cmdefconnvalues.h>
+#include <WlanCdbCols.h>
+#include <wlancontainer.h>
+#include <featmgr.h>
+
+// CONSTANTS
+
+// Global settings record name
+_LIT16( KGlobalSettingsRecordName, "DefaultRecordName-1" );
+
+// Default GPRS record name
+_LIT( KDefaultGPRSRecordName, "Dummy Default GPRS Settings" );
+
+// Modem bearer names for GPRS/WCDMA Access Points
+_LIT( KModemBearerPacketData, "GPRS Modem" );
+
+// LAN bearer names for Wlan Access Points
+_LIT( KLANBearerWlan, "WLANBearer" );
+
+
+// Structure that converts field ids to the corresponding table names
+// and parameter types
+typedef struct
+    {
+    TDbCreatorGlobalSettings iField;
+    const TText* iBearerTableName;
+    TBool iIsUIPriority;
+    } TPriorityConversion;
+
+const TPriorityConversion KPriorityConversionTable[] =
+    {
+        { EPriorityLan, KCDTypeNameLANService, EFalse },
+        { EPriorityWlan, KCDTypeNameWLANServiceExt, EFalse },
+        { EPriorityPan, KCDTypeNamePANServiceExt, EFalse },
+        { EPriorityGprsIn, KCDTypeNameOutgoingWCDMA, EFalse },
+        { EPriorityGprsOut, KCDTypeNameIncomingWCDMA, EFalse },
+        { EPriorityDialOut, KCDTypeNameDialOutISP, EFalse },
+        { EPriorityDialIn, KCDTypeNameDialInISP, EFalse },
+        { EPriorityVpn, KCDTypeNameVPNService, EFalse },
+        { EPriorityMip, KCDTypeNameMIPServiceExt, EFalse },
+        { EUIPriorityLan, KCDTypeNameLANService, ETrue },
+        { EUIPriorityWlan, KCDTypeNameWLANServiceExt, ETrue },
+        { EUIPriorityPan, KCDTypeNamePANServiceExt, ETrue },
+        { EUIPriorityGprsIn, KCDTypeNameOutgoingWCDMA, ETrue },
+        { EUIPriorityGprsOut, KCDTypeNameIncomingWCDMA, ETrue },
+        { EUIPriorityDialOut, KCDTypeNameDialOutISP, ETrue },
+        { EUIPriorityDialIn, KCDTypeNameDialInISP, ETrue },
+        { EUIPriorityVpn, KCDTypeNameVPNService, ETrue },
+        { EUIPriorityMip, KCDTypeNameMIPServiceExt, ETrue },
+        { EUnused, NULL, EFalse }
+    };
+
+
+// Maximum size to be allocated for table names
+const TUint KMaxTableNameSize = 50;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CProcessorGlobal::NewL
+// ---------------------------------------------------------
+//
+CProcessorGlobal* CProcessorGlobal::NewL( 
+                          CReaderBase* aFileReader,
+                          RCmManagerExt& aCmManager,
+                          RPointerArray< RCmConnectionMethodExt >& aPluginArray,
+                          RPointerArray< HBufC >& aPluginNames, 
+                          RPointerArray< RCmDestinationExt >& aDestArray,
+                          RPointerArray< HBufC >& aDestNames,
+                          RPointerArray< HBufC >& aDefCon )
+    {
+    CProcessorGlobal* self = new ( ELeave ) CProcessorGlobal( aFileReader,
+                                                              aCmManager,
+                                                              aPluginArray,
+                                                              aPluginNames,
+                                                              aDestArray,
+                                                              aDestNames,
+                                                              aDefCon );
+    CleanupStack::PushL( self );
+
+    // From base class
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::CProcessorGlobal
+// ---------------------------------------------------------
+//
+CProcessorGlobal::CProcessorGlobal( CReaderBase* aFileReader,
+                                    RCmManagerExt& aCmManager,
+                                    RPointerArray< RCmConnectionMethodExt >& aPluginArray,
+                                    RPointerArray< HBufC >& aPluginNames, 
+                                    RPointerArray< RCmDestinationExt >& aDestArray,
+                                    RPointerArray< HBufC >& aDestNames,
+                                    RPointerArray< HBufC >& aDefCon ) :
+    CProcessorBase( aFileReader, aCmManager, aPluginArray, aPluginNames, aDestArray, aDestNames ),
+    iAttachWhenNeeded ( EFalse )
+    {
+    iDefCon = &aDefCon;
+    }
+    
+    
+// ---------------------------------------------------------
+// CProcessorGlobal::ConstructL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::ConstructL()
+    {
+    iSession = CMDBSession::NewL( CMDBSession::LatestVersion() );
+    
+    iSession->SetAttributeMask( ECDNoWriteButDelete | ECDHidden | ECDProtectedWrite | ECDPrivate ); // Check this
+    
+    // Create General connection settings struct and set the default values
+    iGenConnSettings = new (ELeave) TCmGenConnSettings;
+    iGenConnSettings->iUsageOfWlan = ECmUsageOfWlanKnown;
+    iGenConnSettings->iSeamlessnessHome = ECmSeamlessnessConfirmFirst;
+    iGenConnSettings->iSeamlessnessVisitor = ECmSeamlessnessConfirmFirst;
+
+    CLOG_WRITE( "Initialising FeatureManager\n" )   
+    //checks if Wlan feature is supported
+    FeatureManager::InitializeLibL();
+    iIsWlanS = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
+    FeatureManager::UnInitializeLib();
+    CLOG_WRITE( "FeatureManager closed\n" ) 
+    }
+
+
+// ---------------------------------------------------------
+// CProcessorGlobal::~CProcessorGlobal
+// ---------------------------------------------------------
+//
+CProcessorGlobal::~CProcessorGlobal()
+    {
+    if ( iSession )
+        {
+        iSession->Close();
+        delete iSession; 
+        }
+    delete iGenConnSettings;    
+    }
+     
+// ---------------------------------------------------------
+// CProcessorGlobal::ProcessTagL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::ProcessTagL( TBool /*aFieldIDPresent*/ )
+    {
+    for (TInt idx(0); idx < TagContainer().Count(); idx++)
+        {  
+        TDbCreatorGlobalSettings fieldId;
+        
+        fieldId = static_cast< TDbCreatorGlobalSettings >
+        ( TagContainer().FieldId( idx ) );
+        
+        HBufC16* ptrTag = TagContainer().Tag(idx);
+        
+        switch( fieldId )
+            {
+            case EGPRSAttachMode:
+                {
+                _LIT( KAttachWhenNeeded, "whenneeded" );
+                _LIT( KAttachWhenAvailable, "whenavailable" );
+                
+                if ( !ptrTag->CompareF( KAttachWhenNeeded ) )
+                    {
+                    iAttachWhenNeeded = ETrue;
+                    }
+                else if ( !ptrTag->CompareF( KAttachWhenAvailable ) )
+                    {
+                    iAttachWhenNeeded = EFalse;
+                    }
+                else 
+                    {
+                    iAttachWhenNeeded = EFalse;
+                    CLOG_WRITE( "! Error : invalid attach mode. Default:whenavailable" );
+                    }
+
+                break;
+                }
+                
+            case EDefaultAP:
+                {
+                CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+                CleanupStack::PushL( db );
+                
+                CCDDefaultWCDMARecord* defaultGPRS = static_cast< CCDDefaultWCDMARecord* >
+                        ( CCDRecordBase::RecordFactoryL( KCDTIdDefaultWCDMARecord ) );
+                
+                CleanupStack::PushL( defaultGPRS );
+                
+                defaultGPRS->iRecordName.SetL( KDefaultGPRSRecordName );
+                
+                defaultGPRS->FindL( *db );			    
+                
+                defaultGPRS->iAPN.SetL( *ptrTag );
+                
+                defaultGPRS->ModifyL( *db );				    				    				   
+                
+                CleanupStack::PopAndDestroy( defaultGPRS );
+                
+                db->Close();			    			    
+                CleanupStack::PopAndDestroy( db );
+                break;
+                }
+                
+            case EDefaultDnIcon:
+                {
+                // Convert default icon to int
+                TPtrC16 iconPtr = ptrTag->Right( ptrTag->Length() );
+                TLex16 lex( iconPtr );
+                TUint32 icon( 0 );
+                if ( lex.Val( icon, EDecimal ) == KErrNone )
+                    {
+                    // If there was no error, write default entry to SNAP
+                    // Metadata table.
+                    // First load SNAP table to get table id
+                    CMDBGenericRecord* snapTable = static_cast< CMDBGenericRecord* >
+                            ( CCDRecordBase::RecordFactoryL( 0 ) );
+                    CleanupStack::PushL( snapTable );      
+                    snapTable->InitializeL( TPtrC( KCDTypeNameSNAPMetadata ),
+                            NULL );
+                    snapTable->LoadL( *iSession );
+                    // Then add default record to table
+                    CCDSNAPMetadataRecord* defaultRecord = new( ELeave )
+                            CCDSNAPMetadataRecord( snapTable->TableId() );
+                    CleanupStack::PushL( defaultRecord );
+                    defaultRecord->SetRecordId( KCDNewRecordRequest );
+                    defaultRecord->iMetadata.SetL( 0 );
+                    defaultRecord->iIcon.SetL( icon );
+                    defaultRecord->StoreL( *iSession );
+                    
+                    CleanupStack::PopAndDestroy( defaultRecord ); // defaultRecord
+                    CleanupStack::PopAndDestroy( snapTable ); // snapTable
+                    }
+                break;
+                }
+                
+            case EPriorityLan:
+            case EPriorityWlan:
+            case EPriorityPan:
+            case EPriorityGprsIn:
+            case EPriorityGprsOut:
+            case EPriorityDialOut:
+            case EPriorityDialIn:
+            case EPriorityVpn:
+            case EPriorityMip:
+            case EUIPriorityLan:
+            case EUIPriorityWlan:
+            case EUIPriorityPan:
+            case EUIPriorityGprsIn:
+            case EUIPriorityGprsOut:
+            case EUIPriorityDialOut:
+            case EUIPriorityDialIn:
+            case EUIPriorityVpn:
+            case EUIPriorityMip:
+                {
+                // Convert priority to int
+                TPtrC16 prioPtr = ptrTag->Right( ptrTag->Length() );
+                TLex16 lex( prioPtr );
+                TUint32 prio( 0 );
+                if ( lex.Val( prio, EDecimal ) == KErrNone )
+                    {
+                    UpdateGlobalBearerArrayL( fieldId, prio );
+                    }
+                break;
+                }
+                
+            case EDefaultConnectionType:
+                {
+                iDefCon->Append( ptrTag->AllocL() );
+                //SetDefaultConnectionTypeL( ptrTag )
+                break;
+                }
+                
+            case EDefaultConnectionName:
+                {
+                iDefCon->Append( ptrTag->AllocL() );
+                //SetDefaultConnectionNameL( ptrTag )
+                break;
+                }
+                
+            case EGprsLastSocketActivityTimeout:
+            case EGprsLastSessionClosedTimeout:
+            case EGprsLastSocketClosedTimeout:		
+                {            				    
+                // Load modem bearer record
+                CCDModemBearerRecord* bearerRecord = static_cast< CCDModemBearerRecord * >
+                ( CCDRecordBase::RecordFactoryL( KCDTIdModemBearerRecord ) );
+                CleanupStack::PushL( bearerRecord );
+                
+                if( fieldId == EGprsLastSocketActivityTimeout
+                        || fieldId == EGprsLastSessionClosedTimeout
+                        || fieldId == EGprsLastSocketClosedTimeout )
+                    {
+                    // Open the record "Gprs Modem"
+                    bearerRecord->iRecordName.SetL( KModemBearerPacketData );	
+                    }				
+                
+                bearerRecord->FindL( *iSession ); // CHECK: Leaves if record not found				
+                
+                // Convert input parameter
+                TLex lex( *ptrTag );
+                
+                TInt timeout( 0 );
+                
+                // If there are parameters that cannot be handled just leave. In that case the CommsDat creation
+                // fails and default is used instead. So it is easier for the variant engineer to detect
+                // that something went wrong.
+                if ( lex.Val( timeout ) != KErrNone)
+                    {
+                    CLOG_WRITE( "! Error : invalid NIF parameter for GPRS (socket/session timeout)" );					
+                    User::Leave( KErrArgument );
+                    }
+                
+                // Set the parameter	
+                if( fieldId == EGprsLastSocketActivityTimeout )
+                    {
+                    bearerRecord->iLastSocketActivityTimeout.SetL( timeout );
+                    }
+                else if( fieldId == EGprsLastSessionClosedTimeout )
+                    {
+                    bearerRecord->iLastSessionClosedTimeout.SetL( timeout );
+                    }
+                else
+                    {
+                    bearerRecord->iLastSocketClosedTimeout.SetL( timeout );
+                    }
+                
+                bearerRecord->ModifyL( *iSession );
+                
+                CleanupStack::PopAndDestroy( bearerRecord );
+                
+                break;
+                }
+                
+            case EWlanLastSocketActivityTimeout:
+            case EWlanLastSessionClosedTimeout:
+            case EWlanLastSocketClosedTimeout:            
+                {
+                if( iIsWlanS )
+                    {
+                    // Load LAN bearer record
+                    CCDLANBearerRecord* bearerRecord = static_cast< CCDLANBearerRecord * >
+                    ( CCDRecordBase::RecordFactoryL( KCDTIdLANBearerRecord ) );
+                    CleanupStack::PushL( bearerRecord );
+                    
+                    // Open the record "WlanBearer"
+                    bearerRecord->iRecordName.SetL( KLANBearerWlan );	
+                    
+                    User::LeaveIfError( bearerRecord->FindL( *iSession ) );
+                    
+                    // Convert the input paramater to UINT
+                    TLex lex( *ptrTag );
+                    
+                    TInt timeout( 0 );
+                    
+                    // If there are parameters that cannot be handled just leave. In that case the CommsDat creation
+                    // fails and default is used instead. So it is easier for the variant engineer to detect
+                    // that something went wrong.
+                    if ( lex.Val( timeout ) != KErrNone)
+                        {
+                        CLOG_WRITE( "! Error : invalid NIF parameter for WLAN (socket/session timeout)" );					
+                        User::Leave( KErrArgument );
+                        }
+                    
+                    
+                    // Set the paramter
+                    if( fieldId == EWlanLastSocketActivityTimeout )
+                        {				
+                        bearerRecord->iLastSocketActivityTimeout.SetL( timeout );
+                        }
+                    else if( fieldId == EWlanLastSessionClosedTimeout)
+                        {					
+                        bearerRecord->iLastSessionClosedTimeout.SetL( timeout );
+                        }
+                    else
+                        {					
+                        bearerRecord->iLastSocketClosedTimeout.SetL( timeout );
+                        }
+                    
+                    bearerRecord->ModifyL( *iSession );				
+                    CleanupStack::PopAndDestroy( bearerRecord );
+                    }
+                break;
+                }
+                
+            case EWlanBGScanInterval:
+            case EWlanUseDefSettings:
+            case EWlanLongRetry:
+            case EWlanShortRetry:
+            case EWlanRTS:
+            case EWlanTxPowerLevel:
+            case EWlanRadioMeasurements:
+            case EWlanPowerMode:
+                {
+                if( iIsWlanS )
+                    {
+                    // Save the same value both to default and user settings records
+                    TInt err;
+                    TRAP( err, SaveGlobalWlanParameterL( KWlanDefaultSettings, fieldId, ptrTag ) );
+                    if( err != KErrNone )
+                        {
+                        CLOG_WRITE( "! Error : Could not save global WLAN parameter. Incorrect input?" );
+                        User::Leave( err  );
+                        }
+                    TRAP( err, SaveGlobalWlanParameterL( KWlanUserSettings, fieldId, ptrTag ) );
+                    if( err != KErrNone )
+                        {
+                        CLOG_WRITE( "! Error : Could not save global WLAN parameter. Incorrect input?" );
+                        User::Leave( err );
+                        }
+                    }
+                break;
+                }
+                
+            case EUsageOfWlan:
+                {
+                SetGenConnSettingWlanUsage( ptrTag );
+                break;
+                }
+                
+            case ESeamlessnessHome:
+                {
+                SetGenConnSettingSeamlessnessHome( ptrTag );
+                break;
+                }
+                
+            case ESeamlessnessVisitor:
+                {
+                SetGenConnSettingSeamlessnessVisitor( ptrTag );
+                break;
+                }
+                
+            default:
+                break;
+            }
+        }
+    
+    if( iBearerArrayChanged )
+        {
+        
+        CLOG_WRITE( "UpdateBearerPriorityArrayL\n" )
+        
+        iCmManager->UpdateBearerPriorityArrayL( iBearerArray );
+        iCmManager->CleanupGlobalPriorityArray( iBearerArray );
+        
+        iBearerArray.Close();
+        
+        CLOG_WRITE( "UpdateBearerPriorityArrayL end\n" )
+        }
+    
+    // General Connection settings are always set
+    SetGenConnSettingsL();
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::ProcessAPL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::ProcessAPL()
+    {
+    CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+    CleanupStack::PushL( db );
+                    
+    CLOG_WRITE( "Global settings\n" )
+    CLOG_WRITE( "---------------\n" )
+        
+    CCDGlobalSettingsRecord* globalSettings = static_cast< CCDGlobalSettingsRecord* >
+                        ( CCDRecordBase::RecordFactoryL( KCDTIdGlobalSettingsRecord ) );
+                        
+	CleanupStack::PushL( globalSettings );
+                        
+    globalSettings->iRecordName.SetL( KGlobalSettingsRecordName );
+
+    if( globalSettings->FindL( *db ) )
+        {
+        //Gprs attach mode
+        if ( iAttachWhenNeeded )
+            {
+            CLOG_WRITE( "GPRS attach mode : attach when needed\n" )
+            globalSettings->iGPRSAttachMode = RPacketService::EAttachWhenNeeded;
+            }
+        else
+            {
+            CLOG_WRITE( "GPRS attach mode : attach when available\n" )
+            globalSettings->iGPRSAttachMode = RPacketService::EAttachWhenPossible;
+            }
+        }
+        
+    globalSettings->ModifyL( *db );
+    
+    CleanupStack::PopAndDestroy( globalSettings );    
+    db->Close();
+    CleanupStack::PopAndDestroy( db ); // db
+    }
+    
+
+// ---------------------------------------------------------
+// CProcessorGlobal::UpdateGlobalBearerArrayL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::UpdateGlobalBearerArrayL
+                            ( TDbCreatorGlobalSettings aField, TUint32 aPrio )
+    {
+    TUint itemIndex( 0 );
+    
+    // Look up field from conversion table
+    while( EUnused != KPriorityConversionTable[ itemIndex ].iField )
+        {
+        if( KPriorityConversionTable[ itemIndex ].iField == aField)
+            {
+            break;
+            }
+        ++itemIndex;
+        }
+        
+    // If found
+    if( EUnused != KPriorityConversionTable[ itemIndex ].iField )
+        {
+        if( !iBearerArrayChanged )
+            {
+            iCmManager->BearerPriorityArrayL( iBearerArray );
+            iBearerArrayChanged = ETrue;
+            }
+        
+        
+        HBufC* tableName = HBufC::NewLC( KMaxTableNameSize );
+        *tableName = TPtrC( KPriorityConversionTable[ itemIndex ]
+                                                        .iBearerTableName );
+        TBool foundBearer( EFalse );
+        
+        // Find the appropriate bearer type
+        for( TInt i( 0 ); i < iBearerArray.Count(); ++i )
+            {
+            if( !( ( iBearerArray )[ i ].iServiceType->Compare( *tableName ) ) )
+                {
+                if( KPriorityConversionTable[ itemIndex ].iIsUIPriority )
+                    {
+                    ( iBearerArray )[ i ].iUIPriority = aPrio;
+                    }
+                else
+                    {
+                    ( iBearerArray )[ i ].iPriority = aPrio;
+                    }
+                foundBearer = ETrue;
+                break;
+                }
+            }
+        
+        // If bearer was not found, add it to the table
+        if( !foundBearer )
+            {
+            TBearerPriority newBearer;
+            newBearer.iServiceType = tableName;
+            if( KPriorityConversionTable[ itemIndex ].iIsUIPriority )
+                {
+                newBearer.iUIPriority = aPrio;
+                }
+            else
+                {
+                newBearer.iPriority = aPrio;
+                }
+            iBearerArray.Append( newBearer );
+            }
+
+        CleanupStack::PopAndDestroy( tableName ); // tableName 
+        }
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetDefaultConnectionL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetDefaultConnectionL()
+    {
+    if( iDefCon->Count() > 0 )
+        {
+        SetDefaultConnectionTypeL( (*iDefCon)[0] );
+        }
+    if( iDefCon->Count() > 1 )
+        {
+        SetDefaultConnectionNameL( (*iDefCon)[1] );
+        }
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetDefaultConnectionTypeL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetDefaultConnectionTypeL( HBufC16* aPtrTag )
+    {
+    iDefaultConnectionSet = EFalse;
+    
+    if ( aPtrTag->CompareF( KStrAlwaysAsk ) == 0 ) 
+        {
+        iDefaultConnectionType = ECmDefConnAlwaysAsk;
+        SetDefConnRecordL( 0 );
+        }
+    else if ( aPtrTag->CompareF( KStrAskOnce ) == 0 ) 
+        {
+        iDefaultConnectionType = ECmDefConnAskOnce;
+        SetDefConnRecordL( 0 );
+        }
+    else if ( aPtrTag->CompareF( KStrDestination ) == 0 ) 
+        {
+        iDefaultConnectionType = ECmDefConnDestination;
+        }
+    else if ( aPtrTag->CompareF( KStrConnectionMethod ) == 0 ) 
+        {
+        iDefaultConnectionType = ECmDefConnConnectionMethod;
+        }
+    else
+        {
+        CLOG_WRITE(
+        "Warning: Default connection type is not valid. Always ask is set.")
+        iDefaultConnectionType = ECmDefConnAlwaysAsk;
+        SetDefConnRecordL( 0 );
+        }    
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetDefaultConnectionNameL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetDefaultConnectionNameL( HBufC16* aPtrTag )
+    {
+        
+    // Name is ignored if the defconn has been set. It can happen e.g.
+    // if iDefaultConnectionType is ECmDefConnAlwaysAsk or ECmDefConnAskOnce     
+    if ( iDefaultConnectionSet )
+        {
+        return;
+        }
+        
+    TInt uId = KErrNotFound;
+    if ( iDefaultConnectionType == ECmDefConnDestination )
+        {
+        uId = GetDestinationIdL( aPtrTag );
+        }
+    else if ( iDefaultConnectionType == ECmDefConnConnectionMethod )
+        {
+        uId = GetPluginIdL( aPtrTag );
+        }
+        
+    if( uId != KErrNotFound )
+        {
+        SetDefConnRecordL( uId );
+        }
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetGenConnSettingWlanUsage
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetGenConnSettingWlanUsage( HBufC16* aPtrTag )
+    {
+    // This parameter should't be set at all if WLAN isn't supported.
+    // However, CMM should take care of this in WriteGenConnSettingsL().
+    if ( aPtrTag->CompareF( KStrManual ) == 0 ) 
+        {
+        iGenConnSettings->iUsageOfWlan = ECmUsageOfWlanManual;
+        }
+    // else: Default value for the string is: "Known", set in ConstructL()
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetGenConnSettingSeamlessnessHome
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetGenConnSettingSeamlessnessHome( HBufC16* aPtrTag )
+    {
+    if ( aPtrTag->CompareF( KStrAutomatic ) == 0 ) 
+        {
+        iGenConnSettings->iSeamlessnessHome = ECmSeamlessnessShowprogress;
+        }
+    else if ( iIsWlanS && aPtrTag->CompareF( KStrWlanOnly ) == 0 ) 
+        {
+        // This value can't be set if WLAN isn't supported
+        iGenConnSettings->iSeamlessnessHome = ECmSeamlessnessDisabled;
+        }
+    // else: Default value for the string is: "Confirm", set in ConstructL()
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetGenConnSettingSeamlessnessVisitor
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetGenConnSettingSeamlessnessVisitor( HBufC16* aPtrTag )
+    {
+    if ( aPtrTag->CompareF( KStrAutomatic ) == 0 ) 
+        {
+        iGenConnSettings->iSeamlessnessVisitor = ECmSeamlessnessShowprogress;
+        }
+    else if ( iIsWlanS && aPtrTag->CompareF( KStrWlanOnly ) == 0 ) 
+        {
+        // This value can't be set if WLAN isn't supported
+        iGenConnSettings->iSeamlessnessVisitor = ECmSeamlessnessDisabled;
+        }
+    // else: Default value for the string is: "Confirm", set in ConstructL()
+    }
+
+// ---------------------------------------------------------
+// CProcessorGlobal::SetGenConnSettingsL
+// ---------------------------------------------------------
+//
+void CProcessorGlobal::SetGenConnSettingsL()
+    {
+    RCmManager cmManager;
+    cmManager.CreateTablesAndOpenL();
+    CleanupClosePushL( cmManager );
+    cmManager.WriteGenConnSettingsL( *iGenConnSettings );
+    CleanupStack::PopAndDestroy( &cmManager );
+    }
+
+//-----------------------------------------------------------------------------
+//  CProcessorGlobal::SetDefConnRecordL()
+//-----------------------------------------------------------------------------
+//
+void CProcessorGlobal::SetDefConnRecordL( const TInt aId )
+    {
+
+    TCmDefConnValue value;
+    value.iType = iDefaultConnectionType;
+    value.iId = aId;
+    
+    iCmManager->WriteDefConnL( value );
+    
+    // It gets true if the defconn was set correctly
+    iDefaultConnectionSet = ETrue;
+
+    }
+    
+
+//-----------------------------------------------------------------------------
+//  CProcessorGlobal::SaveGlobalWlanParameterL()
+//-----------------------------------------------------------------------------
+//
+void CProcessorGlobal::SaveGlobalWlanParameterL( const TUint32 aTableType, const TDbCreatorGlobalSettings aField, const HBufC16* const aValue )
+	{	
+		// Initialize the record
+		CMDBGenericRecord* deviceSettingsTable = static_cast< CMDBGenericRecord* >
+                ( CCDRecordBase::RecordFactoryL( 0 ) );
+                
+	    CleanupStack::PushL( deviceSettingsTable );
+	    
+	    deviceSettingsTable->InitializeL( TPtrC( WLAN_DEVICE_SETTINGS ), NULL );
+	    			   			    
+	    deviceSettingsTable->LoadL( *iSession );
+	    
+	    // Open the record that matches aTableType (either default or user settings table)
+	    
+	    CMDBField<TUint32>* settingsTypeField = (CMDBField<TUint32>*)deviceSettingsTable->GetFieldByIdL(KCDTIdWlanDeviceSettingsType);
+	    
+	   	settingsTypeField->SetL( aTableType );
+	    			   			    
+	    deviceSettingsTable->FindL( *iSession );
+	    
+	    // Convert the input parameter to integer
+    	TLex lex( *aValue );
+		
+		TUint value( 0 );
+		
+		User::LeaveIfError( lex.Val( value, EDecimal) );
+		
+		// Set the paramter value
+	    
+	    if ( aField == EWlanBGScanInterval )
+	    	{
+	    	CMDBField< TUint32 >* field = ( CMDBField< TUint32 >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdBgScanInterval );
+	    	field->SetL( value );
+	    	}
+	    else if ( aField == EWlanUseDefSettings )
+	    	{
+	    	CMDBField< TBool >* field = ( CMDBField< TBool >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdUseDefaultSettings );	
+	    	field->SetL( value );
+	    	}
+	    else if ( aField == EWlanLongRetry )
+	    	{
+			CMDBField< TUint32 >* field = ( CMDBField< TUint32 >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdWlanLongRetry );				    	
+			field->SetL( value );
+	    	}
+	    else if ( aField == EWlanShortRetry )
+	    	{
+	    	CMDBField< TUint32 >* field = ( CMDBField< TUint32 >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdWlanShortRetry );	
+	    	field->SetL( value );
+	    	}
+	    else if ( aField == EWlanRTS )
+	    	{
+	    	CMDBField< TUint32 >* field = ( CMDBField< TUint32 >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdWlanRTSThreshold );	
+	    	field->SetL( value );
+	    	}
+	    else if ( aField == EWlanTxPowerLevel )
+	    	{
+	    	CMDBField< TUint32 >* field = ( CMDBField< TUint32 >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdTxPowerLevel );	
+	    	field->SetL( value );
+	    	}
+	    else if ( aField == EWlanRadioMeasurements )
+	    	{
+	    	CMDBField< TBool >* field = ( CMDBField< TBool >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdAllowRadioMeasurements );	
+	    	field->SetL( value );
+	    	}
+	    else if ( aField == EWlanPowerMode )
+	    	{
+	    	CMDBField< TBool >* field = ( CMDBField< TBool >* ) deviceSettingsTable->GetFieldByIdL( KCDTIdWlanPowerMode );	
+	    	field->SetL( value );
+	    	}			    			    			      			
+
+		deviceSettingsTable->ModifyL( *iSession );
+				
+		CleanupStack::PopAndDestroy( deviceSettingsTable );				
+	}
+// End of File.