--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderReader.h Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,477 @@
+// Copyright (c) 2001-2009 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:
+//
+
+#ifndef __CWSPHEADERREADER_H__
+#define __CWSPHEADERREADER_H__
+
+// System Includes
+#include <e32std.h>
+#include <wspdecoder.h>
+#include <http/framework/cheadercodec.h>
+
+// User Includes
+#include "cwspheadercodec.h"
+
+// Forward declarations
+class CHeaderFieldPart;
+class CHeaderFieldParam;
+
+
+/**
+@internalAll
+@since 7.0
+This class is the by the WSP header codec to provide the decoding functionality required
+by WSP to decode header fields from a raw binary format to a useful parsed format. The
+decoding is done as stated in the WSP specifications avaialable from www.wapforum.org.
+*/
+//##ModelId=3C4C41AB029F
+class CWspHeaderReader : public CHeaderReader
+ {
+public: // methods
+
+ /**
+ Standard virtual destructor.
+ @since 7.0
+ @pre Object is constructed
+ @post Object is destroyed
+ */
+ //##ModelId=3C4C41AC0108
+ virtual ~CWspHeaderReader();
+
+ /**
+ Standard factory 2 phase construction.
+ Error Condition: Low memory conditions
+ @since 7.0
+ @param aStrPool A handle to an opened string pool with the WSP table opened
+ @param aStrTable The WSP table that contains the header field names
+ @param aCodec A reference to the parent owning codec
+ @return A pointer to the newly created object
+ @pre None
+ @post Object is fully constructed
+ @leave KErrNoMemory
+ */
+ //##ModelId=3C4C41AC00FD
+ static CWspHeaderReader* NewL(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec);
+
+ /**
+ Standard factory 2 phase construction leaving a handle on the cleanup stack.
+ Error Condition: Low memory conditions
+ @since 7.0
+ @param aStrPool A handle to an opened string pool with the WSP table opened
+ @param aStrTable The WSP table that contains the header field names
+ @param aCodec A reference to the parent owning codec
+ @return A pointer to the newly created object
+ @pre None
+ @post Object is fully constructed with a handle on the cleanup stack
+ @leave KErrNoMemory
+ */
+ //##ModelId=3C4C41AC00F3
+ static CWspHeaderReader* NewLC(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec);
+
+ /**
+ This method is used by the codec to decode any supported header field that
+ passed in.
+ Error Condition: Low memory conditions or invalid or corrupt data
+ @since 7.0
+ @param aHeader A reference to the header field to decode
+ @pre The header field is its raw format state
+ @post The header field is decoded and in its parsed state
+ @leave KErrNoMemory
+ KErrNotSupported if the header field is not supported
+ KErrCorrupt if the data is invalid or corrupt
+ */
+ //##ModelId=3C4C41AC00EA
+ virtual void DecodeHeaderL(RHeaderField& aHeader);
+
+protected: // methods
+
+ /**
+ Standard default constructor.
+ Error Condition: Low memory conditions
+ @since 7.0
+ @param aStrPool A handle to an opened string pool with the WSP table opened
+ @param aStrTable The WSP table that contains the header field names
+ @param aCodec A reference to the parent owning codec
+ @pre None
+ @post Object is constructed
+ */
+ //##ModelId=3C4C41AC00DF
+ CWspHeaderReader(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec);
+
+private: // methods
+
+ /** Decodes the Content-type header field
+ */
+ //##ModelId=3C4C41AC00D6RS
+ void DecodeContentTypeL(RHeaderField& aHeader) const;
+
+ /** Decodes the Date header field
+ */
+ //##ModelId=3C4C41AC00D4
+ void DecodeDateL(RHeaderField& aHeader) const;
+
+ /** Decodes the Last-modified header field
+ */
+ //##ModelId=3C4C41AC00CC
+ void DecodeLastModifiedL(RHeaderField& aHeader) const;
+
+ /** Decodes the Pragma header field
+ */
+ //##ModelId=3C4C41AC00CA
+ void DecodePragmaL(RHeaderField& aHeader) const;
+
+ /** Decodes the Vary header field
+ */
+ //##ModelId=3C4C41AC00C1
+ void DecodeVaryL(RHeaderField& aHeader) const;
+
+ /** Decodes the WWW-Authenticate header field
+ */
+ //##ModelId=3C4C41AC00B8
+ void DecodeWWWAuthenticateL(RHeaderField& aHeader) const;
+
+ /** Decodes the Set-Cookie header field
+ */
+ //##ModelId=3C4C41AC00B6
+ void DecodeSetCookieL(RHeaderField& aHeader) const;
+
+ /** Decodes the Content-location header field
+ */
+ //##ModelId=3C4C41AC00AC
+ void DecodeContentLocationL(RHeaderField& aHeader) const;
+
+ /** Decodes the Location header field
+ */
+ //##ModelId=3C4C41AC00A4
+ void DecodeLocationL(RHeaderField& aHeader) const;
+
+ /** Decodes the Encoding-version header field
+ */
+ //##ModelId=3C4C41AC00A2
+ void DecodeEncodingVersionL(RHeaderField& aHeader) const;
+
+ /** Decodes the Accept-ranges header field
+ */
+ //##ModelId=3C4C41AC0099
+ void DecodeAcceptRangesL(RHeaderField& aHeader) const;
+
+ /** Decodes the Content-encoding header field
+ */
+ //##ModelId=3C4C41AC0090
+ void DecodeContentEncodingL(RHeaderField& aHeader) const;
+
+ /** Decodes the Content-language header field
+ */
+ //##ModelId=3C4C41AC008E
+ void DecodeContentLanguageL(RHeaderField& aHeader) const;
+
+ /** Decodes the Content-MD5 header field
+ */
+ //##ModelId=3C4C41AC0085
+ void DecodeContentMD5L(RHeaderField& aHeader) const;
+
+ /** Decodes the Proxy-authenticate header field
+ */
+ //##ModelId=3C4C41AC007C
+ void DecodeProxyAuthenticateL(RHeaderField& aHeader) const;
+
+ /** Decodes the Server header field
+ */
+ //##ModelId=3C4C41AC007A
+ void DecodeServerL(RHeaderField& aHeader) const;
+
+ /** Decodes the Retry-after header field
+ */
+ //##ModelId=3C4C41AC0071
+ void DecodeRetryAfterL(RHeaderField& aHeader) const;
+
+ /** Decodes the Via header field
+ */
+ //##ModelId=3C4C41AC0068
+ void DecodeViaL(RHeaderField& aHeader) const;
+
+ /** Decodes the Trailer header field
+ */
+ //##ModelId=3C4C41AC0066
+ void DecodeTrailerL(RHeaderField& aHeader) const;
+
+ /** Decodes the Content-range header field
+ */
+ //##ModelId=3C4C41AC005E
+ void DecodeContentRangeL(RHeaderField& aHeader) const;
+
+ /** Decodes the X-Wap-Application-Id header field
+ */
+ //##ModelId=3C4C41AC005C
+ void DecodeXWapApplicationIdL(RHeaderField& aHeader) const;
+
+ /** Decodes the X-Wap-Initiator-URI header field
+ */
+ //##ModelId=3C4C41AC0053
+ void DecodeXWapInitiatorURIL(RHeaderField& aHeader) const;
+
+ /** Decodes the Push-flag header field
+ */
+ //##ModelId=3C4C41AC0049
+ void DecodePushFlagL(RHeaderField& aHeader) const;
+
+ /** Decodes the Allow header field
+ */
+ //##ModelId=3C4C41AC0040
+ void DecodeAllowL(RHeaderField& aHeader) const;
+
+ /** Decodes the Upgrade header field
+ */
+ //##ModelId=3C4C41AC003E
+ void DecodeUpgradeL(RHeaderField& aHeader) const;
+
+ /** Decodes the Warning header field
+ */
+ //##ModelId=3C4C41AC0035
+ void DecodeWarningL(RHeaderField& aHeader) const;
+
+ /** Decodes the Profile-Warning header field
+ */
+ void DecodeProfileWarningL(RHeaderField& aHeader) const;
+
+// utility helper methods
+
+ /** Decodes the warn codes
+ */
+ //##ModelId=3C4C41AC002C
+ void DecodeGenericWarnCodeL(RHeaderField& aHeader, TWspPrimitiveDecoder& aDecoder) const;
+
+ /** Checks for NULL strings, ie strings with no but data with a NULL terminator
+ */
+ //##ModelId=3C4C41AB03CE
+ TBool CheckForNullStringL(TPtrC8& aRawData, TInt& aBytesRead, TWspPrimitiveDecoder& aDecoder) const;
+
+ /** Decodes version values
+ */
+ //##ModelId=3C4C41AB03C3
+ void DecodeGenericVersionL(RHeaderField& aHeader, TWspPrimitiveDecoder& aDecoder, TInt aIndex) const;
+
+ /** Check the length of data is greater than a required minimum
+ */
+ //##ModelId=3C4C41AB03B9
+ inline void CheckLengthL(TPtrC8& aRawData, TInt aMinLength) const;
+
+ /** Check for a NULL data part and adds a NULL descriptor part to the parsed data
+ */
+ //##ModelId=3C4C41AB03AE
+ TBool CheckNullDesPartL(RHeaderField& aHeader, TPtrC8& aRawData, TInt aPartIndex) const;
+
+ /** Adds a new string part to the parsed data
+ */
+ //##ModelId=3C4C41AB039C
+ TInt AddNewDecoderStringPartL(RHeaderField& aHeader, TWspPrimitiveDecoder& aDecoder, TInt aIndex=0) const;
+
+// generic encoding methods
+
+ /** Decodes generic integer values
+ */
+ //##ModelId=3C4C41AB039A
+ void DecodeGenericIntegerValueL(RHeaderField& aHeader) const;
+
+ /** Decodes generic new string values
+ */
+ //##ModelId=3C4C41AB0390
+ void DecodeGenericNewStringValueL(RHeaderField& aHeader) const;
+
+ /** Decodes generic data values
+ */
+ //##ModelId=3C4C41AB0387
+ void DecodeGenericDateValueL(RHeaderField& aHeader) const;
+
+ /** Decodes generic field names
+ */
+ //##ModelId=3C4C41AB037E
+ void DecodeGenericFieldNameL(RHeaderField& aHeader) const;
+
+ /** Decodes generic string parameter types
+ */
+ //##ModelId=3C4C41AB0374
+ TInt DecodeGenericSingleParameterL(TPtrC8& aRawParam, CHeaderFieldPart& aHeaderFieldPart) const;
+
+ /** Decodes well known parameter tokens
+ */
+ //##ModelId=3C4C41AB0368
+ void DecodeWellKnownParamTokenL(TWspPrimitiveDecoder& aDecoder, TInt& aBytesRead,
+ TPtrC8& aRawParamBlock, CHeaderFieldPart& aHeaderFieldPart) const;
+
+ /** Decodes untyped parameter types
+ */
+ //##ModelId=3C4C41AB0355
+ void DecodeUntypedParamL(TWspPrimitiveDecoder& aDecoder, TInt& aBytesRead,
+ TPtrC8& aRawParamBlock, CHeaderFieldPart& aHeaderFieldPart) const;
+
+ /** Decodes generic parameter tokens
+ */
+ //##ModelId=3C4C41AB034A
+ TInt DecodeGenericParamTokenL(TWspPrimitiveDecoder& aDecoder, const TStringTable& aStrTable,
+ THTTPHdrVal& aParamValue, RStringF& aParamDesValue) const;
+
+ /** Decodes character-sets
+ */
+ //##ModelId=3C4C41AB033F
+ void GetCharacterSetFromValueL(TInt aValue, RStringF& aCharSetStr) const;
+
+ /** Decodes generic challenge data
+ */
+ //##ModelId=3C4C41AB0335
+ void DecodeGenericChallengeL(RHeaderField& aHeader) const;
+
+// generic part methods
+
+ /** Sets a new part
+ */
+ //##ModelId=3C4C41AB032B
+ CHeaderFieldPart& SetNewPartL(RHeaderField& aHeader, TInt aPartIndex, THTTPHdrVal& aPartVal) const;
+
+ /** Sets a new integer part
+ */
+ //##ModelId=3C4C41AB0318
+ CHeaderFieldPart& SetNewIntegerPartL(RHeaderField& aHeader, TInt aPartIndex, TInt aValue) const;
+
+ /** Sets a new case insensitive string part
+ */
+ //##ModelId=3C4C41AB030D
+ CHeaderFieldPart& SetNewFStringPartL(RHeaderField& aHeader, TInt aPartIndex, TPtrC8 aValue) const;
+
+ /** Sets a new case sensitive string part
+ */
+ //##ModelId=3C4C41AB02FB
+ CHeaderFieldPart& SetNewStringPartL(RHeaderField& aHeader, TInt aPartIndex, TPtrC8 aValue) const;
+
+ /** Sets an existing case insensitive string part
+ */
+ //##ModelId=3C4C41AB02F0
+ CHeaderFieldPart& SetFStringPartL(RHeaderField& aHeader, TInt aPartIndex, RStringF aStrVal) const;
+
+ /** Sets a new date value part
+ */
+ //##ModelId=3C4C41AB02E5
+ CHeaderFieldPart& SetNewDatePartL(RHeaderField& aHeader, TInt aPartIndex, TDateTime& aValue) const;
+
+ /** Adds a new param to the supplied part
+ */
+ //##ModelId=3C4C41AB02D1
+ CHeaderFieldParam& SetNewParamL(CHeaderFieldPart& aHeaderPart, TPtrC8 aParamName, THTTPHdrVal aParamValue) const;
+
+private: // attributes
+
+ /** Handle to an opened string pool with the WSP header field names table opened
+ */
+ //##ModelId=3C4C41AB02C9
+ RStringPool iStrPool;
+
+ /** Reference to the WSP header field names table
+ */
+ //##ModelId=3C4C41AB02BF
+ const TStringTable& iStrTable;
+
+ /** Reference to the parent owning codec
+ */
+ //##ModelId=3C4C41AB02B3
+ CWspHeaderCodec& iCodec;
+ };
+
+inline void CWspHeaderReader::CheckLengthL(TPtrC8& aRawData, TInt aMinLength) const
+ {
+ if(aRawData.Length() < aMinLength)
+ User::Leave(KErrCorrupt);
+ }
+
+/**
+@internalAll
+@since 7.0
+This class is the by the WSP header codec to provide the decoding functionality required
+by WSP to decode header fields from a raw binary format to a useful parsed format. This
+decoder is the default decoder for headers that have no specific decoding pattern and
+expects text-string format data as defined WSP specifications avaialable from www.wapforum.org.
+*/
+class CWspDefaultHdrReader : public CHeaderReader
+ {
+public: // methods
+
+ /**
+ Standard virtual destructor.
+ @since 7.0
+ @pre Object is constructed
+ @post Object is destroyed
+ */
+ //##ModelId=3C4C41AC0108
+ virtual ~CWspDefaultHdrReader();
+
+ /**
+ Standard factory 2 phase construction.
+ Error Condition: Low memory conditions
+ @since 7.0
+ @param aStrPool A handle to an opened string pool
+ @return A pointer to the newly created object
+ @pre None
+ @post Object is fully constructed
+ @leave KErrNoMemory
+ */
+ static CWspDefaultHdrReader* NewL(RStringPool aStrPool);
+
+ /**
+ Standard factory 2 phase construction leaving a handle on the cleanup stack.
+ Error Condition: Low memory conditions
+ @since 7.0
+ @param aStrPool A handle to an opened string pool
+ @return A pointer to the newly created object
+ @pre None
+ @post Object is fully constructed with a handle on the cleanup stack
+ @leave KErrNoMemory
+ */
+ static CWspDefaultHdrReader* NewLC(RStringPool aStrPool);
+
+ /**
+ This method is used by the codec to decode any header field that is
+ passed in. Assumes the header field value is a text-string.
+ Error Condition: Low memory conditions or invalid or corrupt data
+ @since 7.0
+ @param aHeader A reference to the header field to decode
+ @pre The header field is its raw format state
+ @post The header field is decoded and in its parsed state
+ @leave KErrNoMemory
+ KErrNotSupported if the header field is not supported
+ KErrCorrupt if the data is invalid or corrupt
+ */
+ virtual void DecodeHeaderL(RHeaderField& aHeader);
+
+protected: // methods
+
+ /**
+ Standard default constructor.
+ Error Condition: Low memory conditions
+ @since 7.0
+ @param aStrPool A handle to an opened string pool
+ @pre None
+ @post Object is constructed
+ */
+ //##ModelId=3C4C41AC00DF
+ CWspDefaultHdrReader(RStringPool aStrPool);
+
+private: // attributes
+
+ /**
+ Handle to an opened string pool
+ */
+ RStringPool iStrPool;
+ };
+
+#endif // __CWSPHEADERREADER_H__