--- a/connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmlhandler.cpp Thu Aug 19 10:44:03 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,474 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: ConML parser/generator
-*
-*/
-
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-#include <s32mem.h>
-
-#include "sconconmlhandler.h"
-#include "debug.h"
-
-// -----------------------------------------------------------------------------
-// CreateCSConConMLHandlerL
-// Creates a new instance of CSConConMLHandler
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CSConConMLHandler* CreateCSConConMLHandlerL()
- {
- LOGGER_ENTERFN( "CreateCSConConMLHandlerL()" );
- LOGGER_LEAVEFN( "CreateCSConConMLHandlerL()" );
- return CSConConMLHandler::NewL();
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::CSConConMLHandler()
-// Default constructor
-// -----------------------------------------------------------------------------
-//
-CSConConMLHandler::CSConConMLHandler()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::CSConConMLHandler()
-// Default constructor
-// -----------------------------------------------------------------------------
-//
-CSConConMLHandler::~CSConConMLHandler()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::~CSConConMLHandler()" );
-
- if ( iParseBuffer )
- {
- LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 1/4 " );
- delete iParseBuffer;
- iParseBuffer = NULL;
- }
-
- if ( iBuffer )
- {
- LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 2/4 " );
- delete iBuffer;
- iBuffer = NULL;
- }
-
- if ( iGenerator )
- {
- LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 3/4 " );
- delete iGenerator;
- iGenerator = NULL;
- }
-
- if ( iStringTable )
- {
- LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 4/4 " );
- delete iStringTable;
- iStringTable = NULL;
- }
-
- iElemStack.Close();
-
- LOGGER_LEAVEFN( "CSConConMLHandler::~CSConConMLHandler()" );
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::CSConConMLHaNewL()
-// Creates a new instance of CSConConMLHandler
-// -----------------------------------------------------------------------------
-//
-CSConConMLHandler* CSConConMLHandler::NewL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::NewL()" );
- CSConConMLHandler* self = new ( ELeave ) CSConConMLHandler();
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(); // self
- LOGGER_LEAVEFN( "CSConConMLHandler::NewL()" );
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ConstructL()
-// 2nd phase constructor
-// -----------------------------------------------------------------------------
-//
-void CSConConMLHandler::ConstructL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ConstructL()" );
- iGenerator = CSConConMLGenerator::NewL();
- iBuffer = CBufFlat::NewL( KSConBufferGranularity );
- iParseBuffer = CBufFlat::NewL( KSConDefaultDocumentSize );
- LOGGER_LEAVEFN( "CSConConMLHandler::ConstructL()" );
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ParseDocumentL()
-// Handles the document parsing, document in aInput
-// -----------------------------------------------------------------------------
-//
-TInt CSConConMLHandler::ParseDocumentL(
- CBufFlat& aInput, MWBXMLConMLCallback* aCallback )
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ParseDocument()" );
- TInt ret ( KErrNone );
-
- iPos = 0;
- iParseBuffer->Reset();
- iParseBuffer->ResizeL( aInput.Size() );
- iParseBuffer->Write( 0, aInput.Ptr(0) );
- iHeaderParsed = EFalse;
- iGenerator->SetCallback( aCallback );
-
- while (ret == KWBXMLParserErrorOk )
- {
- ret = ParseL();
- }
-
- if ( ret == KWBXMLParserErrorEof )
- {
- ret = KErrNone;
- }
- LOGGER_WRITE_1( "CSConConMLHandler::ParseDocument()\
- returned %d", ret );
- return ( ret );
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::GenerateDocument()
-// Starts the generating of a document
-// -----------------------------------------------------------------------------
-//
-TInt CSConConMLHandler::GenerateDocument( ConML_ConMLPtr_t aContent )
- {
- LOGGER_ENTERFN( "CSConConMLHandler::GenerateDocument()" );
- iGenerator->GenerateConMLDocument ( aContent );
- LOGGER_LEAVEFN( "CSConConMLHandler::GenerateDocument()" );
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::WBXMLDocument()
-// Returns the generated WBXML -document
-// -----------------------------------------------------------------------------
-//
-TPtrC8 CSConConMLHandler::WBXMLDocument()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::WBXMLDocument()" );
- LOGGER_LEAVEFN( "CSConConMLHandler::WBXMLDocument()" );
- return iGenerator->WBXMLDocument();
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::XMLDocument()
-// Returns the generated XML -document
-// -----------------------------------------------------------------------------
-//
-TPtrC8 CSConConMLHandler::XMLDocument()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::XMLDocument()" );
- LOGGER_LEAVEFN( "CSConConMLHandler::XMLDocument()" );
- return iGenerator->XMLDocument();
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ParseL()
-// Parses the next document tag / header if not parsed yet
-// -----------------------------------------------------------------------------
-//
-TInt CSConConMLHandler::ParseL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ParseL()" );
- if( !iHeaderParsed )
- {
- TConMLParserError result(KWBXMLParserErrorOk);
- TRAPD(err, result = DoParseDocumentHeaderL());
- if( err == KErrEof )
- {
- LOGGER_WRITE( "CSConConMLHandler::ParseL() : KWBXMLParserErrorEofTooEarly " );
- return KWBXMLParserErrorEofTooEarly;
- }
- return result;
- }
- LOGGER_LEAVEFN( "CSConConMLHandler::ParseL()" );
- return DoParseDocumentBodyL();
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::DoParseDocumentHeaderL()
-// Parses the document header
-// -----------------------------------------------------------------------------
-//
-TConMLParserError CSConConMLHandler::DoParseDocumentHeaderL()
- {
- LOGGER_ENTERFN( "CSConConMLParser::DoParseDocumentHeaderL()" );
- iHeaderParsed = ETrue;
-
- // Version
- TUint8 version = ReadUint8L();
-
- // PublicId
- TInt32 publicId = ReadMUint32L();
-
- if( publicId == 0 )
- {
- publicId = ReadMUint32L();
- }
- else
- {
- publicId = -publicId;
- }
-
- // Charset
- TUint32 charSet = ReadMUint32L();
-
- // String table
- ReadStringTableL();
-
- // Document begins now
- if( publicId < 0 )
- {
- iGenerator->StartDocument(version, -publicId, charSet);
- }
- else
- {
- iGenerator->StartDocument(version,
- StringTableString(publicId), charSet);
- }
- LOGGER_LEAVEFN( "CSConConMLHandler::DoParseDocumentHeaderL()" );
- return KWBXMLParserErrorOk;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::DoParseDocumentBodyL()
-// Parses the next element of the document
-// -----------------------------------------------------------------------------
-//
-TConMLParserError CSConConMLHandler::DoParseDocumentBodyL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::DoParseDocumentBodyL()" );
- TUint8 id(0);
- TRAPD(err, id = ReadUint8L());
-
- if( err != KErrNone )
- {
- if( err == KErrEof )
- {
- iGenerator->EndDocument();
- if( iElemStack.Count() > 0 )
- {
- LOGGER_WRITE( "CSConConMLHandler::DoParseDocumentBodyL() : KWBXMLParserErrorEofTooEarly " );
- return KWBXMLParserErrorEofTooEarly;
- }
- return KWBXMLParserErrorEof;
- }
- User::Leave(err);
- }
-
- switch (id)
- {
- case END:
- {
- if( !iElemStack.Count() )
- {
- LOGGER_WRITE( "CSConConMLHandler::DoParseDocumentBodyL() : KWBXMLParserErrorinvalidDocument " );
- User::Leave( KWBXMLParserErrorinvalidDocument );
- }
- TUint8 tag( iElemStack.operator[](iElemStack.Count() - 1 ));
- iGenerator->EndElementL( tag );
- iElemStack.Remove(iElemStack.Count() - 1);
- }
- break;
-
- case STR_I:
- iGenerator->CharactersL(ReadStrIL());
- break;
-
- case OPAQUE:
- iGenerator->CharactersL(ReadOpaqueL());
- break;
-
- default:
- HandleElementL(id);
- break;
- }
- LOGGER_LEAVEFN( "CSConConMLHandler::DoParseDocumentBodyL()" );
- return KWBXMLParserErrorOk;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ReadUint8L()
-// Reads one byte from the document
-// -----------------------------------------------------------------------------
-//
-TUint8 CSConConMLHandler::ReadUint8L()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ReadUint8L()" );
- if ( iPos == iParseBuffer->Size())
- {
- User::Leave ( KErrEof );
- }
- TUint8 value;
- HBufC8* data = HBufC8::NewLC( sizeof(TUint8) );
- TPtr8 ptr = data->Des();
- iParseBuffer->Read(iPos, ptr, sizeof(TUint8));
- iPos+= sizeof(TUint8);
- value = ptr[0];
- CleanupStack::PopAndDestroy(1); //data
- LOGGER_WRITE_1( "CSConConMLHandler::ReadUint8L()\
- : returned %d ", value );
- return value;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ReadMUint32L()
-// Reads multibyte coding from the document
-// -----------------------------------------------------------------------------
-//
-TUint32 CSConConMLHandler::ReadMUint32L()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ReadMUint32L()" );
- TUint32 result = 0;
- TUint8 c;
-
- do {
- c = ReadUint8L();
- result = (result << 7) | (c & 0x7f);
- } while ( c & 0x80 );
-
- LOGGER_WRITE_1( "CSConConMLHandler::ReadMUint32L()\
- : returned %d ", result );
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ReadStrIL()
-// Reads string data from the document
-// -----------------------------------------------------------------------------
-//
-TPtrC8 CSConConMLHandler::ReadStrIL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ReadStrIL()" );
- iBuffer->Reset();
- RBufWriteStream bws(*iBuffer);
- TUint8 c;
- while( (c = ReadUint8L()) != 0 )
- {
- bws.WriteUint8L(c);
- }
- bws.CommitL();
- LOGGER_LEAVEFN( "CSConConMLParser::ReadStrIL()" );
- return iBuffer->Ptr(0);
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ReadStringTableL()
-// Handles the document's string table
-// -----------------------------------------------------------------------------
-//
-void CSConConMLHandler::ReadStringTableL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ReadStringTableL()" );
- delete iStringTable;
- iStringTable = NULL;
- TUint32 strTblLen = ReadMUint32L();
-
- if( strTblLen > 0 )
- {
- if( iPos+strTblLen > iParseBuffer->Size())
- {
- LOGGER_WRITE( "CSConConMLHandler::ReadStringTableL() : LEAVE KErrEof " );
- User::Leave ( KErrEof );
- }
- iStringTable = HBufC8::NewL(strTblLen);
- TPtr8 ptr = iStringTable->Des();
- iParseBuffer->Read(iPos, ptr, strTblLen);
- iPos+=strTblLen;
- }
- LOGGER_LEAVEFN( "CSConConMLHandler::ReadStringTableL()" );
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::StringTableString()
-// Returns a value from the string table according to the given index
-// -----------------------------------------------------------------------------
-//
-TPtrC8 CSConConMLHandler::StringTableString( TUint32 aIndex )
- {
- LOGGER_ENTERFN( "CSConConMLHandler::StringTableString()" );
- TPtrC8 temp(iStringTable->Mid(aIndex));
- TInt pos = temp.Find(KWBXMLNull());
- if( pos != KErrNotFound )
- {
- temp.Set(temp.Left(pos));
- }
- LOGGER_LEAVEFN( "CSConConMLHandler::StringTableString()" );
- return temp;
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::HandleElementL()
-// Starts a new element in the document
-// -----------------------------------------------------------------------------
-//
-void CSConConMLHandler::HandleElementL( TUint8 aId )
- {
- LOGGER_ENTERFN( "CSConConMLHandler::HandleElementL()" );
- TUint8 tag(TUint8(aId & 0x3f));
-
- iGenerator->StartElementL( tag );
-
- if( aId & 0x40 )
- {
- iElemStack.Append( tag );
- }
- else
- {
- iGenerator->EndElementL(tag);
- }
- LOGGER_LEAVEFN( "CSConConMLHandler::HandleElementL()" );
- }
-
-// -----------------------------------------------------------------------------
-// CSConConMLHandler::ReadOpaqueL()
-// Reads opaque data from the document
-// -----------------------------------------------------------------------------
-//
-TPtrC8 CSConConMLHandler::ReadOpaqueL()
- {
- LOGGER_ENTERFN( "CSConConMLHandler::ReadOpaqueL()" );
- iBuffer->Reset();
- RBufWriteStream bws(*iBuffer);
- TUint32 length = ReadMUint32L();
- if( iPos+length > iParseBuffer->Size())
- {
- LOGGER_WRITE( "CSConConMLHandler::ReadOpaqueL() : LEAVE KErrEof " );
- User::Leave ( KErrEof );
- }
- HBufC8* data = HBufC8::NewLC( length );
- TPtr8 ptr = data->Des();
- iParseBuffer->Read( iPos, ptr, length );
- iPos+= length;
- bws.WriteL(ptr, length);
- bws.CommitL();
- CleanupStack::PopAndDestroy(1); // data
-
- LOGGER_LEAVEFN( "CSConConMLHandler::ReadOpaqueL()" );
- return iBuffer->Ptr(0);
- }
-