diff -r 000000000000 -r 094583676ce7 IMPSengine/messageencoder/wbxml/inc/ImpsDecodeWbXml.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMPSengine/messageencoder/wbxml/inc/ImpsDecodeWbXml.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,271 @@ +/* +* Copyright (c) 2003 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: Imps engine wbxml message decoder +* +* +*/ + + +#ifndef CImpsDecodeWbXml_H +#define CImpsDecodeWbXml_H + +// INCLUDES +#include +#include +#include "ImpsDataAccessorApi.h" +#include "ImpsMessageInterpreterApi.h" +#include "ImpsWbXmlData.h" +#include "nw_encoder_domencoder.h" +#include "nw_wbxml_reader.h" +#include "ImpsXmlUtils.h" + +// CONSTANTS +const TInt KMaxDictionaries = 2; + +// DATA TYPES + + // decoding state + enum TImpsDecodeState + { + EImpsDecodeStateIdle, + EImpsDecodeStateTagStart, + EImpsDecodeStateTagEnd, + EImpsDecodeStateAttributeStart, + EImpsDecodeStateAttributeValue, + EImpsDecodeStateContent, + EImpsDecodeStateExtension, + EImpsDecodeStateExtensionValue, + EImpsDecodeStateLiteral, + EImpsDecodeIllegal + }; + +// FORWARD DECLARATIONS +class CImpsKey; +class MImpsCSPSession; + +// CLASS DECLARATION + +class CImpsDecodeWbXml :public CBase, public MImpsDecoder + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CImpsDecodeWbXml* NewL( MImpsCSPSession* aCallback ); + + public: // New functions + + /** + * IMPS wbxml message decoder + * @param aImpsData reference to MImpsDataAccessor class. + * @param aEncodeBuffer buffer to hold the decoded message, + */ + void DecodeMessageL( + MImpsDataAccessor& aImpsData, + HBufC8** aEncodeBuffer ); + + /** + * Method decodes (wb)xml message to internal data structures + * in asynchronous manner. The completion of the operation is signaled in + * MImpsCSPSession::TransportResponseParsedL() method. + * @param aEncodeBuffer buffer to hold the encoded message + * Please note that the buffer ownership is taken!!! + */ + TInt DecodeMsgAsyncL( + HBufC8** aBuffer); + + /** + * Method to cancel the asynchronous decoding + */ + void CancelDecoding(); + + private: + + /** + * Destructor + */ + virtual void Destroy(); + + /** + * Destructor. + */ + virtual ~CImpsDecodeWbXml(); + + /** + * C++ default constructor. + */ + CImpsDecodeWbXml(); + + /** + * method updates current parser state + * @param aState new state + */ + void SetState(TImpsDecodeState aState); + + /** + * method stores WBXML inline string + * @param aParser parser pointer + * @param aLength string length + * @return (parser) error code + */ + NW_Status_t StoreInlineStringL(NW_WBXML_Parser_t* aParser,TInt aLength); + + /** + * method stores WBXML table string + * @param aIndex string table index + * @return (parser) error code + */ + NW_Status_t StoreTableStringL(TUint32 aIndex); + + /** + * method stores WBXML opaque data + * @param aParser parser pointer + * @param aLength data length + * @return (parser) error code + */ + NW_Status_t StoreOpaqueData(NW_WBXML_Parser_t* aParser,TUint32 aLength); + + /** + * method verifies WBXML document header + * @param aDocument WBXML document pointer + * @return (parser) error code + */ + NW_Status_t StoreDocument(NW_WBXML_Document_t* aDocument); + + /** + * method for wbxml token handling + * @param aToken WBXML token value + * @return (parser) error code + */ + NW_Status_t StoreTokenL(TUint32 aToken); + + /** + * method for wbxml entity handling + * @param aValue value to be decoded + * @return (parser) error code + */ + NW_Status_t DecodeEntityL(TUint32 aValue); + + /** + * method stores parsed out data to data accessor and + * removes token from data access key + * @return (parser) error code + */ + NW_Status_t TagEndHandleL( ); + + /** + * parser exception handler + * @param aException exception value + */ + void ExceptionHandle(NW_WBXML_Exception_t aException); + + /** + * method stores parsed string + * @param aString string to be stored + */ + void StoreStringL(NW_String_t aString); + + /** + * method creates the correct index in case of multiple elements + * @param aImpsKey key of the element + */ + void CheckIfMultipleElementsL(TInt aImpsKey); + + + /** + * method checks if the given token is a presence transaction token + * @param aToken + */ + TBool IsPureTransaction(TInt aToken); + + + /** + * method makes a simple 16bit to 8bit conversion for DTD elements + * Use only if the unicode contains only ASCII characters! + * To avoid dynamic memory allocation the maximum length of the DTD + * element is set to be 100 characters! (Should be enough in WV DTDs) + * @param aToken + */ + void ConvertToDes8( TUint16* aElement, TDes8& aConverted ); + + + /** + * By default constructor is private. + */ + void ConstructL(); + + // By default, prohibit copy constructor + CImpsDecodeWbXml( const CImpsDecodeWbXml& ); + + // Prohibit assigment operator + CImpsDecodeWbXml& operator= ( const CImpsDecodeWbXml& ); + + private: // Data + TInt iError; + TInt iCurrentDictionary; + TInt iDictionaryCount; + NW_WBXML_Dictionary_t* iDictionaries[KMaxDictionaries]; + TInt iDecodingState; +// HBufC8* iDecodeBuffer; + NW_WBXML_Document_t* iDocument; + TInt iPreviousElement; + TInt iExtension; + TInt iAttribute; + MImpsDataAccessor* iImpsData; + MImpsKey* iAccessKey; + CImpsWbXmlData* iWbXmlData; + TInt iCurrentCodePage; + TInt iElementToken; + HBufC8* iStoreValue8; + HBufC8* iElementValue; + HBufC* iStoreValue; + TInt iExtensionValue; + TBuf8<4> iVersion; + NW_WBXML_Opaque_t iOpaque; + TInt iContentSize; + TImpsKeyType iKeyType; + TInt iNameSpace; + TInt iPreviousNameSpace; + CImpsXmlUtils* iXmlUtils; + TInt iPEC; + TBool iDecodeToXml; + TInt iTransactions; + TBool iTypeStatus; + CStack* iStack; + TInt iPureMessageType; + + public: // Friend classes + + friend NW_Status_t TagStart(NW_WBXML_Parser_t* aParser, void* aContext); + friend NW_Status_t FQTokenL(NW_WBXML_Parser_t* aParser,TUint32 aFqtoken, void* aContext); + friend NW_Status_t InlineStringL(NW_WBXML_Parser_t* aParser,TUint32 aLength, void* aContext); + friend NW_Status_t TableStringL(NW_WBXML_Parser_t* aParser,TUint32 aIndex, void* aContext); + friend NW_Status_t Extension(NW_WBXML_Parser_t* aParser,void* aContext); + friend NW_Status_t Opaque(NW_WBXML_Parser_t* aParser,TUint32 aLength, void* aContext); + friend NW_Status_t BinaryL(NW_WBXML_Parser_t* aParser,TUint32 aLength, void* aContext); + friend NW_Status_t AttributeStart(NW_WBXML_Parser_t* aParser, void* aContext); + friend NW_Status_t StartDocument(NW_WBXML_Parser_t* aParser,NW_WBXML_Document_t* aDocument, void* aContext); + friend NW_Status_t AttributeValue(NW_WBXML_Parser_t* aParser, void* aContext); + friend NW_Status_t TagEndL(NW_WBXML_Parser_t* aParser, void* aContext); + friend NW_Status_t Content(NW_WBXML_Parser_t* aParser, void* aContext); + friend NW_Status_t EntityL(NW_WBXML_Parser_t* aParser,TUint32 aLength, void* aContext); + friend NW_Status_t Exception(NW_WBXML_Parser_t* aParser,NW_WBXML_Exception_t aException, void* aContext); + friend NW_Status_t Binary(NW_WBXML_Parser_t* aParser,TUint32 aLength, void* aContext); + + }; + +#endif // ?INCLUDE_H + +// End of File