diff -r 7b872347d83b -r 6d0b9f605b61 voipplugins/accountcreationplugin/engine/src/acpxmlhandler.cpp --- a/voipplugins/accountcreationplugin/engine/src/acpxmlhandler.cpp Tue Feb 02 00:05:57 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,509 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: Implements CAcpXmlHandler methods -* -*/ - - -#include -#include "acpprovider.h" -#include "acpxmlhandler.h" -#include "accountcreationpluginlogger.h" -#include "macpxmlhandlerobserver.h" -#include "accountcreationengineconstants.h" - - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::CAcpXmlHandler -// --------------------------------------------------------------------------- -// -CAcpXmlHandler::CAcpXmlHandler( MAcpXmlHandlerObserver& aObserver ) - : CActive( EPriorityStandard ), - iObserver( aObserver ) - { - // Add active scheduler. - CActiveScheduler::Add( this ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::ConstructL -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::ConstructL() - { - ACPLOG( "CAcpXmlHandler::ConstructL begin" ); - // Create XML parser - iParser = CParser::NewL( KXmlMimeType, *this ); - ACPLOG( "CAcpXmlHandler::ConstructL end" ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::NewL -// --------------------------------------------------------------------------- -// -CAcpXmlHandler* CAcpXmlHandler::NewL( MAcpXmlHandlerObserver& aObserver ) - { - CAcpXmlHandler* self = CAcpXmlHandler::NewLC( aObserver ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::NewLC -// --------------------------------------------------------------------------- -// -CAcpXmlHandler* CAcpXmlHandler::NewLC( MAcpXmlHandlerObserver& aObserver ) - { - CAcpXmlHandler* self = new ( ELeave ) CAcpXmlHandler( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::~CAcpXmlHandler -// --------------------------------------------------------------------------- -// -CAcpXmlHandler::~CAcpXmlHandler() - { - ACPLOG( "CAcpXmlHandler::~CAcpXmlHandler begin" ); - - Cancel(); // Ensures that the parsing is stopped - delete iParser; - delete iBuffer; - delete iOngoingAttr; - delete iProvider; - - ACPLOG( "CAcpXmlHandler::~CAcpXmlHandler end" ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::StartParsingL -// Starts parsing xml with given filename. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::StartParsingL( const TFileName& aFilename ) - { - ACPLOG( "CAcpXmlHandler::StartParsingL begin" ); - - // Save the filename because of deleting file later on. - iFilename.Append( aFilename ); - - // Leave if parsing is active. - if ( IsActive() ) - { - User::Leave( KErrInUse ); - } - - // Connect to fileserver and open xml file to be parsed. - User::LeaveIfError( iFileServer.Connect() ); - User::LeaveIfError( iFile.Open( iFileServer, aFilename, EFileRead ) ); - - delete iBuffer; - iBuffer = NULL; - - TEntry entry; - - // Get size of file. - User::LeaveIfError( iFileServer.Entry( aFilename, entry ) ); - - TInt fileSize = entry.iSize; - - // Create buffer for file reading and start process. - iBuffer = HBufC8::NewL( fileSize ); - - TPtr8 ptr( iBuffer->Des() ); - ptr.Zero(); - - iFile.Read( ptr, fileSize, iStatus ); - SetActive(); - - iParser->ParseBeginL(); - - ACPLOG( "CAcpXmlHandler::StartParsingL end" ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::HandleFinishedProviderL -// Handles finished provider and notifies observer. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::HandleFinishedProviderL() - { - ACPLOG( "CAcpXmlHandler::HandleFinishedProviderL" ); - - // Provider exists, save it by calling observer. - if ( iProvider ) - { - iObserver.NotifyParsedProviderL( *iProvider ); - delete iProvider; - iProvider = NULL; - } - - // Start new provider by creating instance from CAcpProvider. - iProvider = CAcpProvider::NewL(); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::DoCancel -// From CActive. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::DoCancel() - { - ACPLOG( "CAcpXmlHandler::DoCancel begin" ); - - ACPLOG( "CAcpXmlHandler::DoCancel - ReadCancel" ); - iFile.ReadCancel(); - - TRAP_IGNORE( iParser->ParseEndL() ); - - iFileServer.Delete( iFilename ); // Delete old file - - iFile.Close(); - iFileServer.Close(); - - delete iBuffer; - iBuffer = NULL; - - delete iOngoingAttr; - iOngoingAttr = NULL; - - ACPLOG( "CAcpXmlHandler::DoCancel end" ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::RunL -// From CActive. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::RunL() - { - ACPLOG( "CAcpXmlHandler::RunL begin" ); - - if ( KErrNone == iStatus.Int() ) - { - // When buffer length is zero, we have reached end of the document. - if ( !iBuffer->Length() ) - { - ACPLOG( " - end of XML document reached" ); - DoCancel(); - } - // Otherwise continue reading of Xml file. - else - { - iParser->ParseL( *iBuffer ); - TPtr8 ptr( iBuffer->Des() ); - iFile.Read( ptr, iStatus ); - SetActive(); - ACPLOG( " - continuing reading XML document" ); - } - } - else - { - iObserver.NotifyParsingCompleted( iStatus.Int() ); - } - - ACPLOG( "CAcpXmlHandler::RunL end" ); - } - - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnStartDocumentL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnStartDocumentL( - const RDocumentParameters& /*aDocParam*/, - TInt aErrorCode ) - { - if ( KErrNone != aErrorCode ) - { - ACPLOG2( "CAcpXmlHandler::OnStartDocumentL: error=%d", aErrorCode ); - iObserver.NotifyParsingCompleted( aErrorCode ); - } - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnEndDocumentL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnEndDocumentL( TInt aErrorCode ) - { - ACPLOG2( "CAcpXmlHandler::OnEndDocumentL begin: error=%d", aErrorCode ); - - if ( KErrNone == aErrorCode ) - { - // Save last one. - HandleFinishedProviderL(); - delete iProvider; - iProvider = NULL; - } - - iObserver.NotifyParsingCompleted( aErrorCode ); - - ACPLOG( "CAcpXmlHandler::OnEndDocumentL end" ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnStartElementL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnStartElementL( - const RTagInfo& aElement, - const RAttributeArray& , - TInt aErrorCode ) - { - TBufelement; - element.Copy(aElement.LocalName().DesC()); - - ACPLOG2( "CAcpXmlHandler::OnStartElementL: element=%S", &element ); - ACPLOG2( "CAcpXmlHandler::OnStartElementL: error=%d", aErrorCode ); - - if ( KErrNone == aErrorCode ) - { - // No need to go through attributes since they're not used. - // Parsing has reached to some of supported elements. - // Save element value to member data for further actions. - TPtrC8 ptr = aElement.LocalName().DesC(); - - if ( !ptr.Compare( KServiceProvider ) || - !ptr.Compare( KProviderName ) || - !ptr.Compare( KIconUrl ) || - !ptr.Compare( KSisUrl ) || - !ptr.Compare( KCreateUrl ) || - !ptr.Compare( KActivateUrl ) || - !ptr.Compare( KProviderDescription ) || - !ptr.Compare( KProviderType ) || - !ptr.Compare( KReportUrl ) ) - { - iOngoingAttr = HBufC8::NewL( ptr.Length() ); - iOngoingAttr->Des().Copy( ptr ); - iGetContentNow = ETrue; - // just for creating provider - if ( !ptr.Compare( KServiceProvider ) ) - { - iGetContentNow = EFalse; - } - } - - if ( iOngoingAttr ) - { - // Parsing of provider has been started. - // This means that old provider is ready for saving - // if it's not first one. In that case, new provider is started. - if ( !iOngoingAttr->Compare( KServiceProvider ) ) - { - HandleFinishedProviderL(); - delete iOngoingAttr; - iOngoingAttr = NULL; - } - } - } - else - { - ACPLOG2( "CAcpXmlHandler::OnStartElementL: error=%d", aErrorCode ); - iObserver.NotifyParsingCompleted( aErrorCode ); - } - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnEndElementL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnEndElementL( const RTagInfo& /*aElement*/, - TInt aErrorCode ) - { - if ( KErrNone == aErrorCode ) - { - // Reset member variables. - iGetContentNow = EFalse; - - delete iOngoingAttr; - iOngoingAttr = NULL; - } - else - { - ACPLOG2( "CAcpXmlHandler::OnEndElementL: error=%d", aErrorCode ); - iObserver.NotifyParsingCompleted( aErrorCode ); - } - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnContentL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnContentL( const TDesC8& aBytes, TInt aErrorCode ) - { - if ( KErrNone == aErrorCode ) - { - ACPLOG( "CAcpXmlHandler::OnContentL" ); - // We need to save content data if iGetContentNow is set. - if ( iGetContentNow ) - { - // Convert unicode data to 16-bit descriptor. - HBufC* bytes = EscapeUtils::ConvertToUnicodeFromUtf8L( aBytes ); - - // On the cleanup stack - CleanupStack::PushL( bytes ); - - ACPLOG2( "CAcpXmlHandler::OnContentL: aBytes=%S", bytes ); - - // Provider name. - if ( !iOngoingAttr->Compare( KProviderName ) ) - { - ACPLOG( "CAcpXmlHandler::SetProviderNameL" ); - iProvider->SetProviderNameL( *bytes ); - } - // Location of icons package. - else if ( !iOngoingAttr->Compare( KIconUrl ) ) - { - ACPLOG( "CAcpXmlHandler::SetIconUrlL" ); - iProvider->SetIconUrlL( aBytes ); - } - // Location of sis package. - else if ( !iOngoingAttr->Compare( KSisUrl ) ) - { - ACPLOG( "CAcpXmlHandler::SetSisUrlL" ); - iProvider->SetSisUrlL( aBytes ); - } - // Location to create settings. - else if ( !iOngoingAttr->Compare( KCreateUrl ) ) - { - ACPLOG( "CAcpXmlHandler::SetCreationUrlL" ); - iProvider->SetCreationUrlL( aBytes ); - } - // Location to activate settings. - else if ( !iOngoingAttr->Compare( KActivateUrl ) ) - { - ACPLOG( "CAcpXmlHandler::SetActivationUrlL" ); - iProvider->SetActivationUrlL( aBytes ); - } - // Provider description. - else if ( !iOngoingAttr->Compare( KProviderDescription ) ) - { - ACPLOG( "CAcpXmlHandler::SetProviderDescription" ); - iProvider->SetProviderDescriptionL( *bytes ); - } - // Provider type. - else if ( !iOngoingAttr->Compare( KProviderType ) ) - { - ACPLOG( "CAcpXmlHandler::SetProviderType" ); - iProvider->SetProviderTypeL( *bytes ); - } - // Location to activate settings. - else if ( !iOngoingAttr->Compare( KReportUrl ) ) - { - ACPLOG( " - Provider report url ignored" ); - } - // Should never happen. - else - { - User::Leave( KErrNotSupported ); - } - CleanupStack::PopAndDestroy( bytes ); - } - } - else - { - ACPLOG2( "CAcpXmlHandler::OnContentL: error=%d", aErrorCode ); - iObserver.NotifyParsingCompleted( aErrorCode ); - } - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnStartPrefixMappingL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnStartPrefixMappingL( - const RString& /*aPrefix*/, - const RString& /*aUri*/, - TInt /*aErrorCode*/ ) - { - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnEndPrefixMappingL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnEndPrefixMappingL( - const RString& /*aPrefix*/, - TInt /*aErrorCode*/ ) - { - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnIgnorableWhiteSpaceL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnIgnorableWhiteSpaceL( - const TDesC8& /*aBytes*/, - TInt /*aErrorCode*/ ) - { - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnSkippedEntityL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnSkippedEntityL( - const RString& /*aName*/, - TInt /*aErrorCode*/ ) - { - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnProcessingInstructionL -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnProcessingInstructionL( - const TDesC8& /*aTarget*/, - const TDesC8& /*aData*/, - TInt /*aErrorCode*/ ) - { - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::OnError -// From MContentHandler. -// --------------------------------------------------------------------------- -// -void CAcpXmlHandler::OnError( TInt aErrorCode ) - { - ACPLOG2( "CAcpXmlHandler::OnError: error=%d", aErrorCode ); - - // Send a notification that the parsing stopped because of error. - iObserver.NotifyParsingCompleted( aErrorCode ); - } - -// --------------------------------------------------------------------------- -// CAcpXmlHandler::GetExtendedInterface -// From MContentHandler. -// --------------------------------------------------------------------------- -// -TAny* CAcpXmlHandler::GetExtendedInterface( const TInt32 /*aUid*/ ) - { - return NULL; - } - -// End of file.