--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/backupandrestore/backupengine/src/sbeparserproxy.cpp Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,230 @@
+// Copyright (c) 2006-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:
+// Implementation of CBackupRegistrationParser
+//
+//
+
+/**
+ @file
+*/
+#include "sbeparserproxy.h"
+
+// System includes
+#include <charconv.h>
+
+// User includes
+#include "sbeparserdefs.h"
+#include "sblog.h"
+
+namespace conn
+ {
+ CSBEParserProxy::CSBEParserProxy( RFs& aFsSession )
+ : iFsSession( aFsSession )
+ /** Standard C++ constructor
+
+ @param aSID secure id of data owner
+ @param apDataOwnerManager data owner manager to access resources
+ */
+ {
+ }
+
+ CSBEParserProxy::~CSBEParserProxy()
+ /** Standard C++ destructor
+ */
+ {
+ delete iConverter;
+ delete iParser;
+ }
+
+ void CSBEParserProxy::ConstructL()
+ /** Symbian 2nd stage constructor */
+ {
+ iParser = CParser::NewL(KMimeType, *this);
+
+ // We only convert from UTF-8 to UTF-16
+ iConverter = CCnvCharacterSetConverter::NewL();
+ if ( iConverter->PrepareToConvertToOrFromL( KCharacterSetIdentifierUtf8, iFsSession ) == CCnvCharacterSetConverter::ENotAvailable )
+ {
+ User::Leave(KErrNotFound);
+ }
+ }
+
+ CSBEParserProxy* CSBEParserProxy::NewL( RFs& aFsSession )
+ /** Symbian OS static constructor
+
+ @param aSID secure id of data owner
+ @param apDataOwnerManager data owner manager to access resources
+ @return a CBackupRegistrationParser object
+ */
+ {
+ CSBEParserProxy* self = new(ELeave) CSBEParserProxy( aFsSession );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+ void CSBEParserProxy::ParseL( const TDesC& aFileName, MContentHandler& aObserver )
+ /** Parsing API */
+ {
+ // Store transient observer (the entity that we will route callbacks to)
+ iTransientParsingError = KErrNone;
+ iTransientObserver = &aObserver;
+
+ // Do XML parsing of the specified file. Callbacks will occur to client via the XML
+ // callback API.
+ Xml::ParseL( *iParser, iFsSession, aFileName );
+
+ // Handle any errors received during callbacks
+ User::LeaveIfError( iTransientParsingError );
+ }
+
+ TInt CSBEParserProxy::ConvertToUnicodeL( TDes16& aUnicode, const TDesC8& aForeign )
+ {
+ const TInt error = iConverter->ConvertToUnicode( aUnicode, aForeign, iConverterState );
+
+#ifdef SBE_LOGGING_ENABLED
+ if ( error != KErrNone )
+ {
+ HBufC* copy = HBufC::NewL( aForeign.Length() * 2 );
+ copy->Des().Copy( aForeign );
+ __LOG2("CSBEParserProxy::ConvertToUnicode() - error: %d when converting: %S", error, copy );
+ delete copy;
+ }
+#endif
+
+ return error;
+ }
+
+ //
+ // MContentHandler Implementaion //
+ //
+
+ /** MContentHandler::OnStartDocumentL()
+ */
+ void CSBEParserProxy::OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode)
+ {
+ if (aErrorCode != KErrNone)
+ {
+ __LOG1("CBackupRegistrationParser::OnStartDocumentL() - error = %d", aErrorCode);
+ User::Leave(aErrorCode);
+ }
+
+ iTransientObserver->OnStartDocumentL( aDocParam, aErrorCode );
+ }
+
+ /** MContentHandler::OnEndDocumentL()
+ */
+ void CSBEParserProxy::OnEndDocumentL(TInt aErrorCode)
+ {
+ if (aErrorCode != KErrNone)
+ {
+ // just to satifsy UREL compiler
+ (void) aErrorCode;
+ __LOG1("CBackupRegistrationParser::OnEndDocumentL() - error = %d", aErrorCode);
+ }
+
+ iTransientObserver->OnEndDocumentL( aErrorCode );
+ }
+
+ /** MContentHandler::OnStartElementL()
+
+ @leave KErrUnknown an unknown element
+ */
+ void CSBEParserProxy::OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode)
+ {
+ if (aErrorCode != KErrNone)
+ {
+ __LOG1("CBackupRegistrationParser::OnStartElementL() - error = %d", aErrorCode);
+ User::LeaveIfError(aErrorCode);
+ }
+
+ iTransientObserver->OnStartElementL( aElement, aAttributes, aErrorCode );
+ }
+
+ /** MContentHandler::OnEndElementL()
+ */
+ void CSBEParserProxy::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode)
+ {
+ if (aErrorCode != KErrNone)
+ {
+ __LOG1("CBackupRegistrationParser::OnEndElementL() - error = %d", aErrorCode);
+ User::Leave(aErrorCode);
+ }
+
+ iTransientObserver->OnEndElementL( aElement, aErrorCode );
+ }
+
+ /** MContentHandler::OnContentL()
+ */
+ void CSBEParserProxy::OnContentL(const TDesC8& aBytes, TInt aErrorCode)
+ {
+ iTransientObserver->OnContentL( aBytes, aErrorCode );
+ }
+
+ /** MContentHandler::OnStartPrefixMappingL()
+ */
+ void CSBEParserProxy::OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode)
+ {
+ iTransientObserver->OnStartPrefixMappingL( aPrefix, aUri, aErrorCode );
+ }
+
+ /** MContentHandler::OnEndPrefixMappingL()
+ */
+ void CSBEParserProxy::OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode)
+ {
+ iTransientObserver->OnEndPrefixMappingL( aPrefix, aErrorCode );
+ }
+
+ /** MContentHandler::OnIgnorableWhiteSpaceL()
+ */
+ void CSBEParserProxy::OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode)
+ {
+ iTransientObserver->OnIgnorableWhiteSpaceL( aBytes, aErrorCode );
+ }
+
+ /** MContentHandler::OnSkippedEntityL()
+ */
+ void CSBEParserProxy::OnSkippedEntityL(const RString& aName, TInt aErrorCode)
+ {
+ iTransientObserver->OnSkippedEntityL( aName, aErrorCode );
+ }
+
+ /** MContentHandler::OnProcessingInstructionL()
+ */
+ void CSBEParserProxy::OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode)
+ {
+ iTransientObserver->OnProcessingInstructionL( aTarget, aData, aErrorCode );
+ }
+
+ /** MContentHandler::OnError()
+
+ @leave aErrorCode
+ */
+ void CSBEParserProxy::OnError(TInt aErrorCode)
+ {
+ __LOG1("CBackupRegistrationParser::OnError() - error = %d", aErrorCode);
+ iTransientParsingError = aErrorCode;
+ iTransientObserver->OnError( aErrorCode );
+ }
+
+ /** MContentHandler::OnEndPrefixMappingL()
+ */
+ TAny* CSBEParserProxy::GetExtendedInterface(const TInt32 aUid)
+ {
+ return iTransientObserver->GetExtendedInterface( aUid );
+ }
+
+ } // namespace conn