applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderWriter.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderWriter.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,456 @@
+// 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 __CWSPHEADERWRITER_H__
+#define __CWSPHEADERWRITER_H__
+
+// System Includes
+#include <e32std.h>
+#include <wspencoder.h>
+#include <http/framework/cheadercodec.h>
+
+// User Includes
+#include "cwspheadercodec.h"
+
+// Forward declarations
+class CHeaderFieldParam;
+
+/**
+@since			7.0
+This class provides the encoding functionality for encoding all of the supported
+headers. The single method EncodeHeaderL() is used passing in the header field
+and the particular header field is then encoded into its faw format.
+*/
+//##ModelId=3C4C41A600FD
+class CWspHeaderWriter : public CHeaderWriter
+	{
+public: // methods
+
+	/**
+	Standard virtual destructor
+	@since			7.0
+	@pre 			Fully constructed object
+	@post			Object is destroyed
+	*/
+	//##ModelId=3C4C41A6027C
+	virtual ~CWspHeaderWriter();
+
+	/**
+	Standard factory 2 phase construction
+	Error Condition: Low memory conditions
+	@since			7.0
+	@param			aStrPool Handle to an opened string pool with the WSP string table already opened
+	@param			aStrTable The WSP string table to use for the header field names
+	@param			aCodec The codec that owns this header writer
+	@return			A pointer to the newly constructed class
+	@pre 			None
+	@post			Object is constructed
+	*/
+	//##ModelId=3C4C41A60272
+	static CWspHeaderWriter* 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 Handle to an opened string pool with the WSP string table already opened
+	@param			aStrTable The WSP string table to use for the header field names
+	@param			aCodec The codec that owns this header writer
+	@return			A pointer to the newly constructed class
+	@pre 			None
+	@post			Object is constructed with a handle on the cleanup stack
+	*/
+	//##ModelId=3C4C41A60267
+	static CWspHeaderWriter* NewLC(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec);
+
+	/**
+	This method will encode the header field that is passed in into its raw
+					form.
+	Error Condition: Invalid or corrupt data formats and out of memeory conditions
+	@since			7.0
+	@param			aHeader The header field to encode
+	@pre 			The header field is in its parsed state
+	@post			The header field is in its raw format state
+	@leave		KErrNotSupported If the header field is not supported
+					KErrNoMemory Out of memory conditions
+					KErrCorrupt If the data is invalid or is corrupt
+	*/
+	//##ModelId=3C4C41A6025E
+	virtual void EncodeHeaderL(RHeaderField& aHeader);
+
+	/**
+	This method encodes the field name into its encoded token value. For WSP
+					transport the encoded token must be a short integer where the top bit is
+					set to 1. This method will NOT set the top bit to 1.
+	@since			7.0
+	@param			aFieldName The name of the field to encode
+	@return			The encoded token value for the header field name. This value will always be
+					between 0 and 127 inclusive or KErrNotFound if the header name does not have
+					an encoded token value.
+	*/
+	//##ModelId=3C4C41A6025C
+	TInt EncodeFieldName(RStringF aFieldName) const;
+
+protected: // methods
+
+	/**
+	Standard default constructor.
+	@since			7.0
+	@param			aStrPool Handle to an opened string pool with the WSP string table already opened
+	@param			aStrTable The WSP string table to use for the header field names
+	@param			aCodec The codec that owns this header writer
+	@pre 			None
+	@post			Object is constructed
+	*/
+	//##ModelId=3C4C41A60252
+	CWspHeaderWriter(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec);
+
+private: // methods
+
+	/**
+	Encodes the 'Accept' header
+	*/
+	//##ModelId=3C4C41A60249
+	void EncodeAcceptL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Accept-charset' header
+	*/
+	//##ModelId=3C4C41A60240
+	void EncodeAcceptCharsetL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Accept-encoding' header
+	*/
+	//##ModelId=3C4C41A6023E
+	void EncodeAcceptEncodingL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Accept-language' header
+	*/
+	//##ModelId=3C4C41A60235
+	void EncodeAcceptLanguageL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Allow' header
+	*/
+	//##ModelId=3C4C41A6022C
+	void EncodeAllowL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Authorization' header
+	*/
+	//##ModelId=3C4C41A6022A
+	void EncodeAuthorizationL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Content-encoding' header
+	*/
+	//##ModelId=3C4C41A60222
+	void EncodeContentEncodingL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Content-language' header
+	*/
+	//##ModelId=3C4C41A60220
+	void EncodeContentLanguageL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Content-location' header
+	*/
+	//##ModelId=3C4C41A60217
+	void EncodeContentLocationL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Content-MD5' header
+	*/
+	//##ModelId=3C4C41A6020E
+	void EncodeContentMD5L(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Content-range' header
+	*/
+	//##ModelId=3C4C41A6020C
+	void EncodeContentRangeL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Content-type' header
+	*/
+	//##ModelId=3C4C41A60203
+	void EncodeContentTypeL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Cookie' header
+	*/
+	//##ModelId=3C4C41A601FA
+	void EncodeCookieL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Date' header
+	*/
+	//##ModelId=3C4C41A601F8
+	void EncodeDateL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Encoding-version' header
+	*/
+	//##ModelId=3C4C41A601F0
+	void EncodeEncodingVersionL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Expect' header
+	*/
+	//##ModelId=3C4C41A601EE
+	void EncodeExpectL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'From' header
+	*/
+	//##ModelId=3C4C41A601E4
+	void EncodeFromL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Last-modified' header
+	*/
+	//##ModelId=3C4C41A601DA
+	void EncodeLastModifiedL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Pragma' header
+	*/
+	//##ModelId=3C4C41A601D2
+	void EncodePragmaL(RHeaderField& aHeader) const;
+	
+	/**
+	Encodes the 'Profile' header
+	*/
+	void EncodeProfileL(RHeaderField& aHeader) const;
+	
+	/**
+	Encodes the 'Profile-Diff' header
+	*/
+	void EncodeProfileDiffL(RHeaderField& aHeader) const;
+ 
+	/**
+	Encodes the 'Range' header
+	*/
+	//##ModelId=3C4C41A601D0
+	void EncodeRangeL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Referer' header
+	*/
+	//##ModelId=3C4C41A601C7
+	void EncodeRefererL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'TE' header
+	*/
+	//##ModelId=3C4C41A601BE
+	void EncodeTEL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Trailer' header
+	*/
+	//##ModelId=3C4C41A601BC 
+	void EncodeTrailerL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Upgrade' header
+	*/
+	//##ModelId=3C4C41A601B2
+	void EncodeUpgradeL(RHeaderField& aHeader) const;
+ 
+	/**
+	Encodes the 'User-agent' header
+	*/
+	//##ModelId=3C4C41A601A9
+	void EncodeUserAgentL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Via' header
+	*/
+	//##ModelId=3C4C41A601A0
+	void EncodeViaL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'Warning' header
+	*/
+	//##ModelId=3C4C41A6019E
+	void EncodeWarningL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes the 'X-Wap-Application-Id' header
+	*/
+	//##ModelId=3C4C41A60195
+	void EncodeXWapApplicationIdL(RHeaderField& aHeader) const;
+
+// Generic encoding methods
+ 
+	/**
+	Encodes generic headers that have a date value
+	*/
+	//##ModelId=3C4C41A6018C
+	void GenericEncodeDateL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes generic headers that have a text string value
+	*/
+	//##ModelId=3C4C41A6018A
+	void GenericEncodeTextStringL(RHeaderField& aHeader) const;
+
+// Helper methods
+
+	/**
+	Encodes a parameter value. The method returns a heap based descriptor containing
+	the encoded buffer. The caller takes ownership of the buffer.
+	*/
+	//##ModelId=3C4C41A60180
+	void EncodeParameterL(const CHeaderFieldParam& aHeaderFieldParam, CWspHeaderEncoder& aEncoder) const;
+ 
+	/**
+	Encodes a single 'Q' value. The method returns a heap based descriptor containing
+	the encoded buffer. The caller takes ownership of the buffer.
+	*/
+	//##ModelId=3C4C41A60177
+	HBufC8* EncodeQValueL(RStringF aQValue) const;
+
+	/**
+	Encodes a single version value. The method returns the encoded version value of the
+	version passed in as a parameter in a string format. The method will return 0 if
+	the version should be encoded as a text-value.
+	*/
+	//##ModelId=3C4C41A6016E
+	TUint8 EncodeVersionValueL(RStringF aVersionValue) const;
+
+	/**
+	Encodes a header name. The method returns an integer value of the length of the
+	header name.
+	*/
+	//##ModelId=3C4C41A60164
+	TInt EncodeHeaderNameL(RHeaderField& aHeader) const;
+
+	/**
+	Encodes a single character set value. The method returns the encoded charset value
+	of the passed in string.
+	*/
+	//##ModelId=3C4C41A60150
+	TInt GetCharacterSetValue(RStringF aCharSet) const;
+
+	/**
+	Checks the passed in string for any invalid characters as specified in RFC2616.
+	*/
+	//##ModelId=3C4C41A6014E
+	TInt CheckTokenText(RStringF aTokenText) const;
+
+	/**
+	Checks the passed in string for any invalid characters as specified in RFC2616.
+	*/
+	//##ModelId=3C4C41A60144
+	TInt CheckTextString(RStringF aTextString) const;
+
+	/**
+	Gets encoding for content-type text value with correct WSP version control.
+	Returns KErrNotFound if no encoding is available
+	*/
+	TInt EncodeContentTypeValue(THTTPHdrVal& aContentType) const;
+
+	TInt EncodeParameterTokenValue(RStringF aParameterName) const;
+
+
+private: // attributes
+
+	//##ModelId=3C4C41A6013C
+	RStringPool iStrPool;
+
+	//##ModelId=3C4C41A60130
+	const TStringTable& iStrTable;
+
+	//##ModelId=3C4C41A6011F
+	CWspHeaderCodec& iCodec;
+	};
+
+/**
+@since			7.0
+This class provides the encoding functionality for headers that are supported
+by the WSP Header Codec. This encoder provides default functionality and 
+encodes the header field as a text-string as defined in the WSP specifications
+at www.wapforum.org.
+*/
+class CWspDefaultHdrWriter : public CHeaderWriter
+	{
+public: // methods
+
+	/**
+	Standard virtual destructor
+	@since			7.0
+	@pre 			Fully constructed object
+	@post			Object is destroyed
+	*/
+	virtual ~CWspDefaultHdrWriter();
+
+	/**
+	Standard factory 2 phase construction
+	Error Condition: Low memory conditions
+	@since			7.0
+	@param			aStrPool Handle to an opened string pool with the WSP string table already opened
+	@return			A pointer to the newly constructed class
+	@pre 			None
+	@post			Object is constructed
+	*/
+	static CWspDefaultHdrWriter* 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 Handle to an opened string pool with the WSP string table already opened
+	@return			A pointer to the newly constructed class
+	@pre 			None
+	@post			Object is constructed with a handle on the cleanup stack
+	*/
+	static CWspDefaultHdrWriter* NewLC(RStringPool aStrPool);
+
+	/**
+	This method will encode the header field that is passed in into its raw
+					form.
+	Error Condition: Invalid or corrupt data formats and out of memeory conditions
+	@since			7.0
+	@param			aHeader The header field to encode
+	@pre 			The header field is in its parsed state
+	@post			The header field is in its raw format state
+	@leave		KErrNotSupported If the header field is not supported
+					KErrNoMemory Out of memory conditions
+					KErrCorrupt If the data is invalid or is corrupt
+	*/
+	virtual void EncodeHeaderL(RHeaderField& aHeader);
+
+protected: // methods
+
+	/**
+	Standard default constructor.
+	@since			7.0
+	@param			aStrPool Handle to an opened string pool with the WSP string table already opened
+	@pre 			None
+	@post			Object is constructed
+	*/
+	CWspDefaultHdrWriter(RStringPool aStrPool);
+
+private: // attributes
+
+	RStringPool iStrPool;
+	};
+
+#endif // __CWSPHEADERWRITER_H__