diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/uripermissionservices/server/src/tldlistinitializer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/uripermissionservices/server/src/tldlistinitializer.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,275 @@ +// Copyright (c) 2008-2009 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: + +#include "tldlistinitializer.h" +#include "tldschema.h" +#include "urilistinterface.h" +#include "tldproperties.h" + +using namespace Xml; + +CTldListInitializer* CTldListInitializer::NewL ( CUriListInterface& aListInterface ) + { + CTldListInitializer* self = new ( ELeave ) CTldListInitializer ( aListInterface ); + CleanupStack::PushL ( self ); + self->ConstructL (); + CleanupStack::Pop (); + return self; + } + +CTldListInitializer::~CTldListInitializer () + { + iContent.Close (); + iTldName.Close (); + iStringPool.Close (); + delete iTldUriImpl; + } + + +CTldListInitializer::CTldListInitializer ( CUriListInterface& aListInterface ) +: iListInterface ( aListInterface ), +iParserState ( EInitial ) + { + + } + +void CTldListInitializer::ConstructL () + { + const TInt KMaxContentSize = 4 * 1024; + iContent.CreateL (KMaxContentSize); + iStringPool.OpenL ( TLDXMLTAGS::Table ); // Open the schema table + iTldUriImpl = CTldProperties::NewL (InetUriList::EBlackList); // Create an empty object + } + +void CTldListInitializer::ParseDocumentL ( const TDesC& aFile ) + { + _LIT8( KXmlParserDataType, "text/xml" ); + + RFs myFs; + CleanupClosePushL ( myFs ); + User::LeaveIfError ( myFs.Connect () ); + + CParser* myParser = CParser::NewLC ( KXmlParserDataType(), *this ); + ParseL ( *myParser, myFs, aFile ); + CleanupStack::PopAndDestroy ( 2 ); // myParser, myFs + } + +// Virtual functions from MContentHandler +void CTldListInitializer::OnStartDocumentL ( const Xml::RDocumentParameters& /* aDocParam */, TInt aErrorCode ) + { + User::LeaveIfError ( aErrorCode ); + } + +void CTldListInitializer::OnEndDocumentL ( TInt aErrorCode ) + { + User::LeaveIfError ( aErrorCode ); + } + +void CTldListInitializer::OnStartElementL ( const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, TInt aErrorCode ) + { + User::LeaveIfError ( aErrorCode ); + SetParserState ( ParserStateL( aElement.LocalName() ) ); + SaveTldName(aAttributes); + SetTldNameL ( ); + } + +void CTldListInitializer::OnEndElementL ( const Xml::RTagInfo& aElement, TInt aErrorCode ) + { + User::LeaveIfError ( aErrorCode ); + SetParserState ( ParserStateL( aElement.LocalName(), ETrue ) ); + SetValueL ( KNullDesC8() ); + if ( iParserState == EEndOfListtype ) + { + // Insert the record and then clear + iListInterface.InsertTldPolicyDataL( *iTldUriImpl ); + iTldUriImpl->Clear(); + } + } + +void CTldListInitializer::OnContentL ( const TDesC8& aBytes, TInt aErrorCode ) + { + User::LeaveIfError ( aErrorCode ); + SetValueL ( aBytes ); + } + +void CTldListInitializer::SetParserState ( TParserState aNewState ) + { + switch ( aNewState ) + { + case EInitial: + iParserState = EInitial; + break; + + case EStartOfPolicyData: + __ASSERT_DEBUG ( iParserState == EInitial, User::Invariant() ); + iParserState = aNewState; + break; + + case EEndOfPolicyData: + __ASSERT_DEBUG ( iParserState == EEndOfTLD, User::Invariant() ); + iParserState = aNewState; + break; + + case EStartOfTLD: + __ASSERT_DEBUG ( (iParserState == EStartOfPolicyData) || (iParserState == EEndOfTLD ), User::Invariant() ); + iParserState = aNewState; + break; + + case EEndOfTLD: + __ASSERT_DEBUG ( iParserState == EEndOfListtype, User::Invariant() ); + iParserState = aNewState; + break; + + case EStartOfListtype: + __ASSERT_DEBUG ( (iParserState == EStartOfTLD ) || (iParserState == EEndOfListtype), User::Invariant() ); + iParserState = aNewState; + break; + + case EEndOfListtype: + __ASSERT_DEBUG ( iParserState == EStartOfListtype, User::Invariant() ); + iParserState = aNewState; + break; + + default: + + // Do nothing + break; + } + } + +CTldListInitializer::TParserState CTldListInitializer::ParserStateL ( const RString& aTag, TBool aEndElement /* =EFalse */ ) + { + // Open a RString from the string pool + RString myTagString = iStringPool.OpenStringL ( aTag.DesC() ); + TInt tblIndex = myTagString.Index ( TLDXMLTAGS::Table ); + TParserState parserState( EInitial ); + switch ( tblIndex ) + { + case TLDXMLTAGS::EPolicyData: + { + parserState = aEndElement ? EEndOfPolicyData : EStartOfPolicyData; + break; + } + + case TLDXMLTAGS::EWhitelist: + case TLDXMLTAGS::EBlacklist: + { + parserState = aEndElement ? EEndOfListtype : EStartOfListtype; + SetListType ( tblIndex ); + break; + } + + case TLDXMLTAGS::ETLD: + { + parserState = aEndElement ? EEndOfTLD : EStartOfTLD; + break; + } + + default: + { + // Do nothing + break; + } + } + myTagString.Close (); + return parserState; + } + +void CTldListInitializer::SetListType ( TInt aIndex ) + { + switch ( aIndex ) + { + case TLDXMLTAGS::EWhitelist: + { + iTldUriImpl->SetListType(InetUriList::EWhiteList); + break; + } + case TLDXMLTAGS::EBlacklist: + { + iTldUriImpl->SetListType(InetUriList::EBlackList); + break; + } + default: + { + User::Invariant (); + } + } + } + +void CTldListInitializer::SetTldNameL ( ) + { + switch ( iParserState ) + { + case EStartOfListtype: + { + iTldUriImpl->SetTldNameL(iTldName); + break; + } + default: + { + //Do Nothing + break; + } + } + } + +void CTldListInitializer::SetValueL ( const TDesC8& aValue ) + { + switch ( iParserState ) + { + case EStartOfListtype: + { + iContent.Append ( aValue ); + break; + } + case EEndOfListtype: + { + if ( iContent.Length() > 0 ) + { + //Set initialize database(Blobs) + iTldUriImpl->SetCharacterSetL(iContent); + iContent.Zero (); + } + break; + } + default: + { + // do nothing + break; + } + } + } + +//Store the Tld name for later use +void CTldListInitializer::SaveTldName(const Xml::RAttributeArray& aAttributes) + { + _LIT8( KName, "name" ); + TInt nAttributes = aAttributes.Count(); + for(TInt index(0); index < nAttributes; index++) + { + const RAttribute& KAttribute = aAttributes[index]; + const RTagInfo& KNameInfo = KAttribute.Attribute(); + const TDesC8& KLocalName8 = KNameInfo.LocalName().DesC(); + if ( iParserState == EStartOfTLD ) + { + // Store the TLD name for later use + __ASSERT_ALWAYS(KLocalName8.CompareF( KName ) == 0, User::Invariant() ); + iTldName.Close(); + iTldName.Create( KAttribute.Value().DesC() ); + break; + } + } + } + +