applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderReader.h
changeset 0 b16258d2340f
--- /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__