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 WSPDecoder.h williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: williamr@2: #ifndef __WSPDECODER_H__ williamr@2: #define __WSPDECODER_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: williamr@2: /** williamr@2: * This file contains the following classes: williamr@2: * TWspField williamr@2: * TWspHeaderSegmenter williamr@2: * TWspPrimitiveDecoder williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: /** williamr@2: enum DecoderPanic williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: enum TWspDecoderPanic williamr@2: { williamr@2: /** williamr@2: LongIntOverflow williamr@2: */ williamr@2: EWspDecoderLongIntOverflow, williamr@2: /** williamr@2: DateOverflow williamr@2: */ williamr@2: EWspDecoderDateOverflow williamr@2: }; williamr@2: williamr@2: /** williamr@2: TWspField class holds the pair williamr@2: This is a simple class that associates these values. williamr@2: No ownership is handed to this class. It is up to user of this class to williamr@2: open and close all resources used. williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: class TWspField williamr@2: { williamr@2: public: williamr@2: williamr@2: inline TWspField(); williamr@2: williamr@2: inline TWspField(RStringF aHdrName, TPtrC8 aValBuf); williamr@2: williamr@2: /** williamr@2: The header name of a opened RStringF - *Not Owned* williamr@2: This is externally opened. It must be externally williamr@2: closed. williamr@2: */ williamr@2: RStringF iHdrName; williamr@2: williamr@2: /** The raw value buffer - Note: Not owned by this */ williamr@2: TPtrC8 iValBuffer; williamr@2: }; williamr@2: williamr@2: /** williamr@2: TWspHeaderSegmenter segments a WSP buffer into WSP header/value pairs. williamr@2: It detects boundaries between header/values based on the WAP-WSP spec. williamr@2: - To construct, buffer and string pool is passed in williamr@2: - Call to NextL() to iterate through the buffer - this returns a TWspField williamr@2: - NextL() returns KErrNotFound when done williamr@2: williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: class TWspHeaderSegmenter williamr@2: { williamr@2: public: williamr@2: williamr@2: inline TWspHeaderSegmenter(RStringPool aPool, const TStringTable& aStringTable, TPtrC8 aBuffer); williamr@2: williamr@2: IMPORT_C TInt NextL(TWspField& aWspHeader); williamr@2: williamr@2: inline TInt Offset() const; williamr@2: williamr@2: private: williamr@2: /** Raw buffer that will be segmented - Not Owned */ williamr@2: TPtrC8 iBuffer; williamr@2: williamr@2: /** Segment offset into the buffer. */ williamr@2: TInt iOffset; williamr@2: williamr@2: /** Opened string pool to use with the string table already loaded - Not Owned */ williamr@2: RStringPool iPool; williamr@2: williamr@2: /** The string table to use in the string pool - Not Owned */ williamr@2: const TStringTable& iStringTable; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Decoder for WSP Primitves - WAP-WSP Section 8.4.1 williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: class TWspPrimitiveDecoder williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: * TWspHeaderType describe the types from WAP-WSP Section 8.4.1.2 williamr@2: */ williamr@2: enum TWspHeaderType williamr@2: { williamr@2: /** williamr@2: The type has not been set williamr@2: */ williamr@2: ENotSet, williamr@2: /** williamr@2: 0-31 - octet is a value length williamr@2: */ williamr@2: ELengthVal, williamr@2: /** williamr@2: 34 - value is a quoted text string, terminated by a Null williamr@2: */ williamr@2: EQuotedString, williamr@2: /** williamr@2: 32-127 - value is a text string, terminated by a Null williamr@2: */ williamr@2: EString, williamr@2: /** williamr@2: 128-255 - encoded 7 bit value, this header has no more data williamr@2: */ williamr@2: E7BitVal williamr@2: }; williamr@2: williamr@2: williamr@2: inline TWspPrimitiveDecoder(TPtrC8 aBuffer); williamr@2: williamr@2: IMPORT_C TWspHeaderType VarType() const; williamr@2: williamr@2: IMPORT_C TInt LengthVal(TInt& aVal); williamr@2: williamr@2: IMPORT_C TInt String(TPtrC8& aString); williamr@2: williamr@2: williamr@2: IMPORT_C TInt Val7Bit(TUint8& aVal); williamr@2: williamr@2: IMPORT_C TInt Integer(TUint32& aVal); williamr@2: williamr@2: IMPORT_C TInt LongInt(TUint32& aVal); williamr@2: williamr@2: IMPORT_C TInt UintVar(TUint32& aVal); williamr@2: williamr@2: IMPORT_C TInt VersionL(RStringPool aPool, RStringF& aVer); williamr@2: williamr@2: IMPORT_C TInt Date(TDateTime& aDateTime); williamr@2: williamr@2: private: williamr@2: /** The raw buffer */ williamr@2: TPtrC8 iBuffer; williamr@2: williamr@2: /** The current offset */ williamr@2: TInt iOffset; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Constructor williamr@2: williamr@2: */ williamr@2: inline TWspField::TWspField() williamr@2: { williamr@2: } williamr@2: williamr@2: /** williamr@2: Constructor williamr@2: williamr@2: @param aHdrName In - The Header Name. This must be an opened RStringF williamr@2: @param aValBuf In - the Buffer containing the header value in its raw format williamr@2: */ williamr@2: inline TWspField::TWspField(RStringF aHdrName, TPtrC8 aValBuf) : williamr@2: iHdrName(aHdrName), williamr@2: iValBuffer(aValBuf) williamr@2: { williamr@2: } williamr@2: williamr@2: /** williamr@2: Constructor williamr@2: williamr@2: @param aPool In - an opened RStringPool - owned by the caller williamr@2: @param aStringTable In - the string table in the string pool to use williamr@2: @param aBuffer In - the buffer containing the WSP header data - owned by the caller williamr@2: @pre The string table must be opened with the WSP Sting constants table williamr@2: */ williamr@2: inline TWspHeaderSegmenter::TWspHeaderSegmenter(RStringPool aPool, const TStringTable& aStringTable, TPtrC8 aBuffer) : williamr@2: iBuffer(aBuffer), williamr@2: iOffset(0), williamr@2: iPool(aPool), williamr@2: iStringTable(aStringTable) williamr@2: { williamr@2: } williamr@2: williamr@2: /** williamr@2: Offset returns the current offset into the buffer being parsed. williamr@2: williamr@2: @return TInt offset value. It will point to beginning of next segmented field. williamr@2: If NextL has not been called it will be set to 0. The beginning of the buffer. williamr@2: If buffer has been completely parsed, will return KErrNotFound. williamr@2: */ williamr@2: inline TInt TWspHeaderSegmenter::Offset() const williamr@2: { williamr@2: return (iOffset < iBuffer.Length()) ? iOffset : KErrNotFound; williamr@2: } williamr@2: williamr@2: /** williamr@2: Constructor williamr@2: williamr@2: @param aBuffer In - the buffer containing the value in its raw format williamr@2: */ williamr@2: inline TWspPrimitiveDecoder::TWspPrimitiveDecoder(TPtrC8 aBuffer) : williamr@2: iBuffer(aBuffer), williamr@2: iOffset(0) williamr@2: { williamr@2: } williamr@2: williamr@2: williamr@2: #endif // __WSPDECODER_H__ williamr@4: williamr@4: