diff -r 000000000000 -r 5a93021fdf25 dbcreator/commsdatcreator/Src/cdcprocessorbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbcreator/commsdatcreator/Src/cdcprocessorbase.cpp Thu Dec 17 08:55:21 2009 +0200 @@ -0,0 +1,547 @@ +/* +* 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 CProcessorBase +* +*/ + + + + +// INCLUDE FILES + +#include "cdcprocessorbase.h" +#include "cdcreaderbase.h" +#include "cdclogger.h" + +#include +#include +#include +#include +#include + + +using namespace CMManager; + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CProcessorBase::CProcessorBase +// Constructor. +// --------------------------------------------------------- +// +CProcessorBase::CProcessorBase( CReaderBase* aFileReader, + RCmManagerExt& aCmManager, + RPointerArray< RCmConnectionMethodExt >& aPluginArray, + RPointerArray< HBufC >& aPluginNames ) : + iFileReader( aFileReader ), + iProxyEnabled( EFalse ), + iIsProtected( EFalse ) + { + iCmManager = &aCmManager; + + iPluginArray = &aPluginArray; + iPluginName = &aPluginNames; + } + + +CProcessorBase::CProcessorBase( CReaderBase* aFileReader, + RCmManagerExt& aCmManager, + RPointerArray< RCmConnectionMethodExt >& aPluginArray, + RPointerArray< HBufC >& aPluginNames, + RPointerArray< RCmDestinationExt >& aDestArray, + RPointerArray< HBufC >& aDestNames ) : + iFileReader( aFileReader ), + iProxyEnabled( EFalse ), + iIsProtected( EFalse ) + { + iCmManager = &aCmManager; + + iPluginArray = &aPluginArray; + iPluginName = &aPluginNames; + + iDestArray = &aDestArray; + iDestName = &aDestNames; + } + + +// --------------------------------------------------------- +// CProcessorBase::~CProcessorBase +// Destructor. +// --------------------------------------------------------- +// +CProcessorBase::~CProcessorBase() + { + iPlugin.Close(); + if( iName ) + { + delete iName; + } + } + + +// --------------------------------------------------------- +// CProcessorBase::ParseFileL +// --------------------------------------------------------- +// +//PseudoCode: +// 0010 locates the next access point within the text file +// 0020 parses the location and reads the input data to TagContainer +// 0030 from TagContainer creates Access Point Item Object +// 0040 using the Access Point Item Object creates a new AP record in CommsDat +// 0050 clears TagContainer +// +void CProcessorBase::ParseFileL() + { + //LocateAP : locates the access points within the text file + while ( iFileReader->LocateAPL() ) + { + //ParseAPL : parses the location, reads the input data to TagContainer + iFileReader->ParseAPL(); + + //from TagContainer creates Access Point Item Object + ProcessTagL( iFileReader->FieldIDPresent() ); + + //adds the Access Point Item Object to CommsDB + ProcessAPL(); + + //clear TagContainer + TagContainer().Clear(); + + }//while + + CLOG_WRITE( "---------------------\n" ) + } + +// --------------------------------------------------------- +// CProcessorPacketData::ProcessTagL +// --------------------------------------------------------- +// +void CProcessorBase::ProcessTagL( TBool /*aFieldIDPresent*/ ) + { + iProxyEnabled= EFalse; + iIsProtected = EFalse; + + Reset(); + TInt aCMId = -1; + for ( TInt idx(0); idx < TagContainer().Count(); idx++) + { + if ( TagContainer().FieldId( idx ) == ECmId) + { + HBufC16* ptrTag = TagContainer().Tag(idx); + TLex16 lex(ptrTag->Des()); + TInt err = lex.Val(aCMId); + if (err != KErrNone) + { + User::Leave(err); + } + break; + } + } + if (aCMId == -1) + { + iPlugin = iCmManager->CreateConnectionMethodL( iBearerType ); + CLOG_WRITE( "ConnectionMethod created without ECmId."); + } + else + { + iPlugin = iCmManager->CreateConnectionMethodL( iBearerType, aCMId); + CLOG_WRITE_FORMAT( "ConnectionMethod created. ECmId:%d", aCMId); + } + + for ( TInt idx(0); idx < TagContainer().Count(); idx++) + { + HBufC16* ptrTag = TagContainer().Tag(idx); + TInt field = TagContainer().FieldId( idx ); + + TBool processed = SetGeneralFieldL( field, ptrTag ); + if( !processed ) + { + ProcessSpecialFieldsL( field, ptrTag, idx ); + } + } + + AddToPluginArrayL(); + + } + +// -------------------------------------------------------- +// CProcessorBase::TagContainer() +// -------------------------------------------------------- +CTagContainer& CProcessorBase::TagContainer() + { + return iFileReader->TagContainer(); + } + + +// -------------------------------------------------------- +// CProcessorBase::AddToPluginArrayL() +// -------------------------------------------------------- +void CProcessorBase::AddToPluginArrayL() + { + if( !iName ) + { + CLOG_WRITE( "Error: No plugin name !!!" ) + } + else + { + const RCmConnectionMethodExt* newItem = new (ELeave) + RCmConnectionMethodExt( iPlugin ); + + iPluginArray->Append( newItem ); + iPluginName->Append( iName->AllocL() ); + + delete iName; + iName = NULL; + + iPlugin.Close(); + } + } + +// -------------------------------------------------------- +// CProcessorBase::GetLastPluginL() +// -------------------------------------------------------- +RCmConnectionMethodExt& CProcessorBase::GetLastPluginL() + { + return GetPluginL( PluginCount() - 1 ); + + } + +// -------------------------------------------------------- +// CProcessorBase::GetPluginL() +// -------------------------------------------------------- +RCmConnectionMethodExt& CProcessorBase::GetPluginL( TInt aPos ) + { + + return *(iPluginArray->operator[]( aPos )); + + } + +// -------------------------------------------------------- +// CProcessorBase::PluginCount() +// -------------------------------------------------------- +TInt CProcessorBase::PluginCount() + { + + return iPluginArray->Count(); + + } + +// --------------------------------------------------------- +// CProcessorBase::FindDestinationL +// --------------------------------------------------------- +// +RCmDestinationExt* CProcessorBase::FindDestinationL( HBufC* aName ) + { + for( TInt i(0); i < iDestName->Count(); i++ ) + { + HBufC *name = (*iDestName)[i]; + if( aName->Compare( *name ) == 0 ) + { + return (*iDestArray)[ i ]; + } + } + CLOG_WRITE_FORMAT("Warning: Destination not found: %S", aName ); + return NULL; + } + +// --------------------------------------------------------- +// CProcessorBase::GetDestinationIdL +// --------------------------------------------------------- +// +TInt CProcessorBase::GetDestinationIdL( HBufC16* aName ) + { + RCmDestinationExt* dest = FindDestinationL( aName ); + + TInt ret( KErrNotFound ); + if( dest != NULL ) + { + ret = dest->Id(); + } + + return ret; + } + +// --------------------------------------------------------- +// CProcessorBase::FindPluginL +// --------------------------------------------------------- +// +RCmConnectionMethodExt* CProcessorBase::FindPluginL( HBufC* aName ) + { + TInt pos; + return FindPluginL( aName, pos ); + } + +// --------------------------------------------------------- +// CProcessorBase::FindPluginL +// --------------------------------------------------------- +// +RCmConnectionMethodExt* CProcessorBase::FindPluginL( HBufC* aName, TInt& aPos ) + { + RCmConnectionMethodExt* ret( NULL ); + + aPos = CheckPluginName( aName ); + if ( aPos != KErrNotFound ) + { + ret = (*iPluginArray)[ aPos ]; + } + else + { + CLOG_WRITE_FORMAT("Warning: Connection method not found: %S", aName ); + } + + return ret; + } + +// --------------------------------------------------------- +// CProcessorBase::CheckPluginName +// --------------------------------------------------------- +// +TInt CProcessorBase::CheckPluginName( HBufC* aName ) + { + TInt ret( KErrNotFound ); + + for( TInt i = 0; i < iPluginName->Count() && ret == KErrNotFound; i++ ) + { + HBufC *name = (*iPluginName)[i]; + if( aName->Compare( *name ) == 0 ) + { + ret = i; + } + } + return ret; + } + + + +// --------------------------------------------------------- +// CProcessorBase::GetPluginIdL +// --------------------------------------------------------- +// +TInt CProcessorBase::GetPluginIdL( HBufC16* aName ) + { + RCmConnectionMethodExt* cm = FindPluginL( aName ); + + TInt ret( KErrNotFound ); + if( cm != NULL ) + { + ret = cm->GetIntAttributeL( CMManager::ECmIapId ); + } + + return ret; + } + + +// --------------------------------------------------------- +// CProcessorBase::ProcessAPL +// --------------------------------------------------------- +// +void CProcessorBase::ProcessAPL() + { + RCmConnectionMethodExt& plugin = GetLastPluginL(); + if( iIsProtected ) + { + plugin.SetBoolAttributeL( ECmProtected, ETrue ); + } + + // Writes into the log file. + DoLogL(); + } + +// --------------------------------------------------------- +// CProcessorBase::ProcessAPL +// --------------------------------------------------------- +// +TBool CProcessorBase::SetGeneralFieldL( TInt aField, HBufC* aPtrTag ) + { + TBool processed( ETrue ); + switch( aField ) + { + case ECmName: + { + // If input is not empty + if ( aPtrTag->CompareF( KStrEmpty ) != 0 ) + { + TInt pos = CheckPluginName( aPtrTag ); + if( pos != KErrNotFound ) + { + CLOG_WRITE_FORMAT("Warning: plugin exist. It might be renamed ! : %S", aPtrTag ); + } + iPlugin.SetStringAttributeL( aField, *aPtrTag ); + if( !iName ) + { + iName = aPtrTag->AllocL(); + } + } + break; + } + case ECmStartPage: + { + // If input is not empty + if ( aPtrTag->CompareF( KStrEmpty ) != 0 ) + { + iPlugin.SetStringAttributeL( aField, *aPtrTag ); + } + break; + } + case ECmHidden: //fall through + case ECmMetaHiddenAgent: //fall through + case ECmMetaHighlight: //fall through + { + if( aPtrTag->CompareF( KStrNo ) == 0 ) + { + iPlugin.SetBoolAttributeL( aField, EFalse ); + } + else if( aPtrTag->CompareF( KStrYes ) == 0 ) + { + iPlugin.SetBoolAttributeL( aField, ETrue ); + } + else + { + iPlugin.SetBoolAttributeL( aField, EFalse ); + switch ( aField ) + { + case ECmHidden: + CLOG_WRITE( "! Error : Invalid Hidden. Default:No"); + break; + case ECmMetaHiddenAgent: + CLOG_WRITE( "! Error : Invalid HiddenAgent. Default:No"); + break; + case ECmMetaHighlight: + CLOG_WRITE( "! Error : Invalid Highlight. Default:No"); + break; + } + } + break; + } + case ECmSeamlessnessLevel: + { + if ( aPtrTag->CompareF( KStrNotRoamedTo ) == 0 ) + { + iPlugin.SetIntAttributeL( aField, + CMManager::ESeamlessnessNotRoamedTo ); + } + else if ( aPtrTag->CompareF( KStrConfirmFirst ) == 0 ) + { + iPlugin.SetIntAttributeL( aField, + CMManager::ESeamlessnessConfirmFirst ); + } + else if ( aPtrTag->CompareF( KStrShowProgress ) == 0 ) + { + iPlugin.SetIntAttributeL( aField, + CMManager::ESeamlessnessShowprogress ); + } + else if ( aPtrTag->CompareF( KStrFullySeamless ) == 0 ) + { + iPlugin.SetIntAttributeL( aField, + CMManager::ESeamlessnessFullySeamless ); + } + break; + } + + case ECmProtected: + { + // Protection + if ( aPtrTag->CompareF( KStrYes ) == 0 ) + { + iIsProtected = ETrue; + } + else if ( aPtrTag->CompareF( KStrNo ) != 0 ) + { + CLOG_WRITE( "! Error : Invalid Protected value. Default:No" ) + } + break; + } + + default: + { + processed = EFalse; + } + } + + return processed; + } + +// --------------------------------------------------------- +// CProcessorBase::DoLogL +// --------------------------------------------------------- +// + +void CProcessorBase::DoLogL() + { + + TInt lastPos = iPluginArray->Count() - 1; + + CLOG_WRITE( "Internet Access Point created:" ) + CLOG_WRITE_FORMAT( "\t Connection name: %S ", (*iPluginName)[ lastPos ] ); + + if ( iIsProtected ) + { + CLOG_WRITE( "\t Protected" ) + } + else + { + CLOG_WRITE( "\t Not protected" ) + } + } +// --------------------------------------------------------- +// CProcessorBase::SetAddressFromServerL +// --------------------------------------------------------- +// + +void CProcessorBase::SetAddressFromServerL( TInt aIPField1, + TInt aIPField2, + TInt aAddrFromSField, + TInt aIPField1IP6, + TInt aIPField2IP6, + TInt aAddrFromSFieldIP6 ) + { + //calculate and set Ip6AddrFromServer + HBufC *pIp1 = NULL; + HBufC *pIp2 = NULL; + pIp1 = iPlugin.GetStringAttributeL( aIPField1IP6 ); + CleanupStack::PushL( pIp1 ); + pIp2 = iPlugin.GetStringAttributeL( aIPField2IP6 ); + CleanupStack::PushL( pIp2 ); + _LIT( KDynIpv6Address, "0:0:0:0:0:0:0:0" ); + if ( ( pIp1->Compare( KDynIpv6Address ) == 0 ) && + ( pIp2->Compare( KDynIpv6Address ) == 0 ) ) + { + iPlugin.SetBoolAttributeL( aAddrFromSFieldIP6, ETrue ); + } + else + { + iPlugin.SetBoolAttributeL( aAddrFromSFieldIP6, EFalse ); + } + CleanupStack::PopAndDestroy( 2,pIp1 ); + + //calculate and set AddrFromServer + pIp1 = iPlugin.GetStringAttributeL( aIPField1 ); + CleanupStack::PushL( pIp1 ); + pIp2 = iPlugin.GetStringAttributeL( aIPField2 ); + CleanupStack::PushL( pIp2 ); + _LIT( KDynIpAddress, "0.0.0.0" ); + if ( ( pIp1->Compare( KDynIpAddress ) == 0 ) && + ( pIp2->Compare( KDynIpAddress ) == 0 ) ) + { + iPlugin.SetBoolAttributeL( aAddrFromSField, ETrue ); + } + else + { + iPlugin.SetBoolAttributeL( aAddrFromSField, EFalse ); + } + CleanupStack::PopAndDestroy( 2,pIp1 ); + } + +// End of File.