--- /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 <cmmanagerext.h>
+#include <cmconnectionmethoddef.h>
+#include <cmconnectionmethodext.h>
+#include <cmdestinationext.h>
+#include <datamobilitycommsdattypes.h>
+
+
+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.