diff -r 000000000000 -r 094583676ce7 IMPSengine/messageencoder/wbxml/inc/ImpsEncodeWbXml.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMPSengine/messageencoder/wbxml/inc/ImpsEncodeWbXml.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,324 @@ +/* +* 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 encoder +* +* +*/ + + +#ifndef CImpsEncodeWbXml_H +#define CImpsEncodeWbXml_H + +// INCLUDES +#include +#include "ImpsMessageInterpreterApi.h" +#include "nw_encoder_domencoder.h" +#include "ImpsXmlUtils.h" +#include "impscommonenums.h" + +// CONSTANTS +const TInt KImpsMaxDictionaries = 2; +const TInt KImpsValueListAlternative = 0x01; +const TInt KImpsValueListOptional = 0x02; +const TInt KImpsValueListMultiple = 0x04; +const TInt KImpsValueListOnceOrMore = 0x08; +const TInt KImpsValueListEnd = 0x10; +const TInt KImpsValueListEmpty = 0x20; +const TInt KImpsSubList = 0x40; +const TInt KImpsMaxTextItemCount = 2; +const TInt KImpsExtraElemEnd = -2; + +// FORWARD DECLARATIONS +class MImpsKey; + +// CLASS DECLARATION + +class CImpsEncodeWbXml :public CBase, public MImpsEncoder + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CImpsEncodeWbXml* NewL(); + + /** + * Destructor. + */ + virtual ~CImpsEncodeWbXml(); + + public: // New functions + + /** + * method builds wbxml encoded message based on data + * included in class aImpsData + * @param aImpsData reference to MImpsDataAccessor class. + * @param aEncodeBuffer buffer to hold the encoded message, + * @return (parser) error code + */ + void EncodeMessageL( + MImpsDataAccessor& aImpsData, + CBufFlat& aEncodeBuffer ); + + private: + + /** + * Destructor + */ + virtual void Destroy(); + + /** + * wbxml message MIME type + * @return MIME type + */ + virtual TPtrC8 MimeType(); + + + struct SImpsValueList { + TInt Begin; + TInt Length; + TInt Next; + TInt Current; + TInt CurrentLength; + TInt Flags; + }; + + /** + * C++ default constructor. + */ + CImpsEncodeWbXml( ); + + /** + * By default constructor is private. + */ + void ConstructL(); + + // By default, prohibit copy constructor + CImpsEncodeWbXml( const CImpsEncodeWbXml& ); + + // Prohibit assigment operator + CImpsEncodeWbXml& operator= ( const CImpsEncodeWbXml& ); + + /** + * method adds one element to DOM tree + * @param aElement element name + * @param aNode parent DOM node + * @param aNode element index if may exist multiple times + * @return error code + */ + TInt EncodeElementL(TDesC &aElement, NW_DOM_ElementNode_t* aNode, TInt aIndex); + + /** + * method creates dictionary, which maps WBXML tokens to DTD tags + * @return error code + */ + TInt CreateDictionary( ); + + /** + * method reads one element declaration from DTD + * @param aElement element name + * @return error code + */ + TPtrC ReadElementDeclaration(TDesC &aElement); + + /** + * method stores node value to DOM tree + * @param aToken element WBXML token value + * @param aNode element DOM node + * @param aValue element value + * @return error code + */ + TInt EncodeValueL(TInt aToken, NW_DOM_TextNode_t* aNode,TInt aValue); + + /** + * method reads next value in element declaration + * @param aValueList + * @return value + */ + TPtrC ReadNextValue(SImpsValueList* aValueList,TPtrC aValues); + + /** + * method adds attribute values to element DOM node + * @param aToken element WBXML token value + * @param aNode element DOM node + * @return error code + */ + TInt EncodeAttributes(TInt aToken, NW_DOM_ElementNode_t* aNode); + + /** + * method encodes alternative values in WV element decralation + * @param aToken element WBXML token value + * @param aNode parent DOM node + * @return error code + */ + TInt EncodeSubListL(TPtrC aValue, NW_DOM_TextNode_t* aNode); + + /** + * method encodes multibyte integer value + * @param aValue integer value + * @param aBuffer for encoded value + */ + void StoreInteger(TUint32 aValue, TPtr8 aBuffer); + + /** + * method sets DTD pointer + * @param aOffset offset in DTD buffer + * @param aLength string length + * @return new pointer value + */ + TPtrC SetPointer(TInt aOffset,TInt aLength ); + + /** + * method count string length + * @param aPtr contains string + * @return string length + */ + TInt CountContentSize(TDesC*& aPtr); + + /** + * method counts message content size + * @param aToken content size token + * @return success code + */ + TInt SetContentSizeL(TInt aToken, NW_DOM_ElementNode_t* aNode); + + /** + * method selects alternative value + * @param aToken element token + * @param aValue + * @return alternative value + */ +// TInt SelectAlternativeValueL(TInt aToken, TPtrC aValue); + + /** + * method updates data accessor key + * @param aToken element token + */ + void PopAccessKeyL(TInt aToken); + + /** + * method fetches next element + * @param aValueList + * @param aElementCounter + * @param aRcode + * @param aElementList + * @param aCurrentElement + * @return next element + */ + TPtrC FetchNextElement(SImpsValueList* aValueList,TInt& aElementCounter,TInt& aRcode, + TPtrC aElementList,TPtrC aCurrentElement); + + /** + * method updates data accessor key + * @param aToken element token + * @param aIndex element index + */ + TInt SetDataAccessorKeyL(TInt aToken,TInt aIndex); + + /** + * method reads sub element list + * @param aElement + * @param aValueList + */ + void ReadElementList(TPtrC aElement, SImpsValueList* aValueList); + + /** + * method reads wbxml token value + * @param aElement + * @return wbxml token + */ + TInt ReadToken(TPtrC aElement); + + /** + * method stores 8 bit string to DOM node + * @param aToken element token + * @param aElemCount + * @return + */ + TInt EncodeString8L(TInt aToken,TInt& aElemCount); + + /** + * method stores extension value to DOM node + * @param aToken element token + * @param aElemCount + * @return + */ + TInt EncodeExtL(TInt aToken,TInt& aElemCount); + + /** + * method stores string to DOM node + * @param aToken element token + * @param aElemCount + * @return + */ + TInt EncodeStringL(TInt aToken,TInt& aElemCount); + + /** + * method stores integer value to DOM node + * @param aToken element token + * @param aElemCount + * @return + */ + TInt EncodeIntegerL(TInt aToken,TInt& aElemCount); + + /** + * method stores boolean value to DOM node + * @param aToken element token + * @param aElemCount + * @return + */ + TInt EncodeBooleanL(TInt aToken,TInt& aElemCount); + + /** + * method searches possible prefix from string + * @param aString is given string + * @param aOffset + * @return possible prefix + */ + TInt SearchPrefix(TPtrC8 aString,TInt& aOffset); + + private: // Data + + TInt iError; + CBufFlat* iEncodeBuffer; + MImpsDataAccessor* iImpsData; + MImpsKey* iAccessKey; + NW_DOM_DocumentNode_t* iDocument; + TInt iPosition; + TInt iCurrentDictionary; + HBufC* iCspDtd; + HBufC* iContentDtd; + HBufC* iPresenceDtd; + TInt iValuePosition; + TInt iElementPosition; + TInt iDictionaryCount; + NW_WBXML_Dictionary_t* iDictionaries[KImpsMaxDictionaries]; + CImpsWbXmlData* iWbXmlData; + HBufC* iElementValue; + HBufC8* iStoreValue; + NW_String_t iString; + NW_WBXML_Opaque_t iOpaque; + NW_DOM_TextItem_t iTextItem[KImpsMaxTextItemCount]; + NW_DOM_AttrVal_t iAttribute; + TInt iNameSpace; + TImpsKeyType iKeyType; + TInt iPEC; + CImpsXmlUtils* iXmlUtils; + TImpsCspVersion iCspVersion; + + }; + +#endif // ?INCLUDE_H + +// End of File