williamr@2: // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: /** williamr@2: @file WSPEncoder.h williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: williamr@2: #ifndef __WSPENCODER_H__ williamr@2: #define __WSPENCODER_H__ williamr@2: williamr@2: #include williamr@2: #include // RFs williamr@2: #include // arrays etc. williamr@2: #include williamr@2: williamr@2: /** williamr@2: enum CodecPanic williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: enum TWspCodecPanic williamr@2: { williamr@2: /** Due to failure to call StartValueLength function */ williamr@2: EWspCodecPanicStartValueLengthNotCalled=0, williamr@2: /** Due to failure to call EndValueLength matching a call to StartValueLength */ williamr@2: EWspCodecPanicEndValueLengthNotCalled, williamr@2: /** Due to failure to call StartHeaderL function */ williamr@2: EWspCodecPanicStartHeaderLNotCalled, williamr@2: /** Due to StartHeaderL function being called twice without EndHeaderL */ williamr@2: EWspCodecPanicStartHeaderCalledTwice, williamr@2: /** Due to parameter Token not having the top bit set */ williamr@2: EWspCodecPanicInvalidToken williamr@2: }; williamr@2: williamr@2: /** williamr@2: This class can be used to encode one header field at a time, williamr@2: with all its values and parameters. williamr@2: williamr@2: It has no knowledge of encoding the BNF of a particular header field, but williamr@2: the functions provided can be used in combination, producing an 8-bit buffer williamr@2: containing the encoded header. williamr@2: williamr@2: Intended usage would be to call a series of functions. The first one being StartHeader, williamr@2: The final one being EndHeader, which would return a buffer containing williamr@2: the complete encoded header field. williamr@2: eg: williamr@2: encoder->StartHeaderL(); williamr@2: encoder->AddLongIntL(); williamr@2: encoder->AddTextStringL(); williamr@2: HBufC8* output = encoder->EndHeaderL(); williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: class CWspHeaderEncoder : public CBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CWspHeaderEncoder* NewL(); williamr@2: williamr@2: IMPORT_C static CWspHeaderEncoder* NewLC(); williamr@2: williamr@2: williamr@2: IMPORT_C virtual ~CWspHeaderEncoder(); williamr@2: williamr@2: IMPORT_C void StartHeaderL(TUint8 aToken); williamr@2: williamr@2: williamr@2: IMPORT_C void StartHeaderL(const TDesC8& aString); williamr@2: williamr@2: IMPORT_C void StartHeaderL(const RStringF aString); williamr@2: williamr@2: williamr@2: IMPORT_C HBufC8* EndHeaderL(); williamr@2: williamr@2: williamr@2: williamr@2: IMPORT_C void AddIntegerL(const TUint aInt); williamr@2: williamr@2: williamr@2: IMPORT_C void AddShortIntL(const TUint8 aValue); williamr@2: williamr@2: IMPORT_C void AddShortLengthL(const TUint8 aValue); williamr@2: williamr@2: williamr@2: IMPORT_C void AddLongIntL(const TUint32 aValue); williamr@2: williamr@2: williamr@2: IMPORT_C void AddUintVarL(const TUint aInt); williamr@2: williamr@2: williamr@2: IMPORT_C void AddTextStringL(const RString& aText); williamr@2: williamr@2: IMPORT_C void AddTextStringL(const TDesC8& aText); williamr@2: williamr@2: IMPORT_C void AddDateL(const TDateTime aDate); williamr@2: williamr@2: IMPORT_C void AddTokenL(const TUint8 aToken); williamr@2: williamr@2: IMPORT_C void AddTokenTextL(const TDesC8& aTokenText); williamr@2: williamr@2: IMPORT_C void AddDataL(const TDesC8& aData); williamr@2: williamr@2: williamr@2: williamr@2: IMPORT_C void StartValueLengthL(); williamr@2: williamr@2: IMPORT_C void EndValueLengthL(); williamr@2: williamr@2: private: williamr@2: williamr@2: CWspHeaderEncoder(); williamr@2: williamr@2: void Init(); williamr@2: williamr@2: williamr@2: void ConstructL(); williamr@2: williamr@2: private: williamr@2: /** williamr@2: Array for storing the partial encoded header. williamr@2: Each time StartValueLength is called a new array williamr@2: element is used. When EndValueLength is called, williamr@2: the array is decremented, data from the last williamr@2: element being added to the one before. williamr@2: */ williamr@2: RPointerArray iArray; williamr@2: williamr@2: /** williamr@2: Value incremented as the encoded header increases in size. williamr@2: Used to allocate the buffer for storing the final williamr@2: encoded header, output when EndHeader is called. williamr@2: */ williamr@2: TInt iTotalLength; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Class encapsulating primitive encoding methods which are defined in the WSP standard. williamr@2: Input will be encoded and returned in an 8 bit buffer. williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: class TWspPrimitiveEncoder williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TUint8 ShortInt(const TUint8 aValue); williamr@2: williamr@2: IMPORT_C static HBufC8* LongIntL(const TUint32 aValue); williamr@2: williamr@2: IMPORT_C static HBufC8* UintVarL(const TUint32 aInt); williamr@2: williamr@2: IMPORT_C static HBufC8* TextStringL(const RString aText); williamr@2: williamr@2: IMPORT_C static HBufC8* TextStringL(const TDesC8& aText); williamr@2: williamr@2: IMPORT_C static HBufC8* DateL(const TDateTime aDate); williamr@2: }; williamr@2: williamr@2: #endif // __WSPENCODER_H__