applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderCodec.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderCodec.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,301 @@
+// 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 __CWSPHEADERCODEC_H__
+#define __CWSPHEADERCODEC_H__
+
+// System Includes
+#include <e32std.h>
+#include <http.h>
+#include <http/framework/cheadercodec.h>
+
+
+/**
+@internalAll
+@since			7.0
+This class is the WSP specific header codec that is required to encode and decode
+WSP headers between a usable form and the form required for transport. The codec
+derives from CHeaderCodec interface and provided the WSP specific encoding and
+decoding of header fields following the specifications stated in the WSP specs
+available from http://www.wapforum.org and the RFC2616.
+*/
+//##ModelId=3C4C41B30305
+class CWspHeaderCodec : public CHeaderCodec
+	{
+public: // enums
+	/**
+	Enumeration defining the different WSP encoding versions that are supported
+	@since			7.0
+	*/
+	enum TWspVersion
+		{
+		EVersion1_1, // Version 1.1
+		EVersion1_2, // Version 1.2
+		EVersion1_3, // Version 1.3
+		EVersion1_4  // Version 1.4
+		};
+
+public: // methods
+
+	/**
+	Standard factory 2 phase construction
+	@leave			KErrNoMemory
+	@since			7.0
+	@param			aStrPool A handle to an open string pool with the string table 
+					that contains the header field names already open
+	@param			aStrTable The string table that contains the header field names
+	@return			A pointer to the newly created object
+	@pre 			None
+	@post			Fully constructed and initialized object
+	*/
+	//##ModelId=3C4C41B3037D
+	static CWspHeaderCodec* NewL(RStringPool aStrPool, const TStringTable& aStrTable);
+
+	/**
+	Standard virtual destructor
+	@since			7.0
+	@post			Object has been fully destroyed
+	*/
+	//##ModelId=3C4C41B30375
+	virtual ~CWspHeaderCodec();
+ 
+	/**
+	This method returns whether the header field passed in can
+					be encoded or not.
+	@since			7.0
+	@param			aHeaderField The header field to enquire about
+	@return			ETrue if the header can be encoded otherwise EFalse
+	*/
+	//##ModelId=3C4C41B30373
+	virtual TBool CanEncode(RStringF aHeaderField) const;
+
+	/**
+	This method returns whether the header field passed in can
+					be decoded or not.
+	@since			7.0
+	@param			aHeaderField The header field to enquire about
+	@return			ETrue if the header can be decoded otherwise EFalse
+	*/
+	//##ModelId=3C4C41B3036A
+	virtual TBool CanDecode(RStringF aHeaderField) const;
+ 
+	/**
+	This method should be used to find an alternative codec for the
+					header field name if this codec cannot handle the header field.
+					The caller takes ownership of the returned codec.
+	@since			7.0
+	@param			aHeaderField The header field name string
+	@return			A pointer to the newly created codec if one is found, otherwise
+					NULL is returned if a codec cannot be found. The caller takes
+					ownership of the returned codec.	
+	*/
+	//##ModelId=3C4C41B30360
+	virtual CHeaderCodec* FindDelegateCodecL(RStringF aHeaderField) const;
+
+	/**
+	This method gets the current encoding version that is being
+					used.
+	@since			7.0
+	@return			The encoding version enumeration
+	*/
+	//##ModelId=3C4C41B3035F
+	TWspVersion GetWspVersion() const;
+
+	/**
+	This method sets the encoding version to use. The encoding
+					version defaults to 1.2 if this method is not called.
+	@since			7.0
+	@param			aWspVersion The encoding version enumeration
+	@post			The encoding version is set to the version passed in
+	*/
+	//##ModelId=3C4C41B30357
+	void SetWspVersion(TWspVersion aWspVersion);
+
+	/**
+	This method encodes a header field name to its correct encoded
+					token value. For WSP the returned value must be then be encoded
+					to a short integer by flipping the first bit to a 1, this is NOT
+					done in this method.
+	@since			7.0
+	@param			aFieldName The header field name string
+	@return			The encoded token value of the header field name. KErrNotFound if
+					no encoding value could be found for the header field name
+	*/
+	//##ModelId=3C4C41B30355
+	TInt EncodeFieldName(RStringF aFieldName) const;
+
+protected: // methods
+
+	/**
+	Standard constructor
+	@since			7.0
+	@param			aStrPool A handle to an opened string pool with the string table 
+					that contains the header field names already open
+	@param			aStrTable The string table that contains the header field names
+	@pre 			None
+	@post			Object is constructed
+	*/
+	//##ModelId=3C4C41B30342 
+	CWspHeaderCodec(RStringPool aStrPool, const TStringTable& aStrTable);
+
+	/**
+	Standard 2nd phase construction
+	@leave		KErrNoMemory
+	@since			7.0
+	@pre 			Object is constructed
+	@post			Object is initialized and all the required string tables have
+					been opened in the string pool
+	*/
+	//##ModelId=3C4C41B30341
+	void ConstructL();
+
+private: // methods
+
+	/**
+	Standard default private constructor
+	@since			7.0
+	@pre 			None
+	@post			Object is constructed
+	*/
+	//##ModelId=3C4C41B3034D
+	CWspHeaderCodec();
+
+private: // attributes
+
+	/** 
+		Handle to an opened string pool with the header field names table open 
+	*/
+	//##ModelId=3C4C41B30339 
+	RStringPool iStrPool;
+
+	/** 
+		The string table that contains the header field names 
+	*/
+	//##ModelId=3C4C41B3032D
+	const TStringTable& iStrTable;
+
+	/**
+		The current encoding version that is to be used, defaults to 1.2 
+	*/
+	//##ModelId=3C4C41B3031C
+	TWspVersion iWspVersion;
+	};
+
+/**
+@internalAll
+@since			7.0
+This class is the default WSP Header Codec that is used if no codec can encode/
+decode a particular header. This codec will encode/decode headers with the default
+behaviour of treating the data as a text-string as defined in the WSP specifications
+at www.wapforum.org.
+*/
+class CWspDefaultHeaderCodec : public CHeaderCodec
+	{
+public:
+
+	/**
+	Standard factory 2 phase construction
+	@leave		KErrNoMemory
+	@since			7.0
+	@param			aStrPool A handle to an open string pool with the string table 
+					that contains the header field names already open
+	@return			A pointer to the newly created object
+	@pre 			None
+	@post			Fully constructed and initialized object
+	*/
+	static CWspDefaultHeaderCodec* NewL(RStringPool aStrPool);
+
+	/**
+	Standard virtual destructor
+	@since			7.0
+	@post			Object has been fully destroyed
+	*/
+	virtual ~CWspDefaultHeaderCodec();
+
+	/**
+	This method returns whether the header field passed in can
+					be encoded or not. Always returns true because it will
+					handle anything by design!
+	@since			7.0
+	@param			aHeaderField The header field to enquire about
+	@return			ETrue if the header can be encoded otherwise EFalse. In this
+					case ETrue is always returned
+	*/
+	virtual TBool CanEncode(RStringF aHeaderField) const;
+
+	/**
+	This method returns whether the header field passed in can
+					be decoded or not. Always returns true because it will
+					handle anything by design!
+	@since			7.0
+	@param			aHeaderField The header field to enquire about
+	@return			ETrue if the header can be decoded otherwise EFalse. In this
+					case ETrue is always returned
+	*/
+	virtual TBool CanDecode(RStringF aHeaderField) const;
+
+	/**
+	Find a delegate codec... always returns NULL, since this codec
+					handles anything by design.
+	@since			7.0
+	@param			aHeaderField The header field name string
+	@return			A pointer to the newly created codec if one is found, otherwise
+					NULL is returned if a codec cannot be found. The caller takes
+					ownership of the returned codec. In this case NULL is always
+					returned
+	*/
+	virtual CHeaderCodec* FindDelegateCodecL(RStringF aHeaderField) const;
+
+protected: // methods
+
+	/**
+	Standard constructor
+	@since			7.0
+	@param			aStrPool A handle to an opened string pool with the string table 
+					that contains the header field names already open
+	@pre 			None
+	@post			Object is constructed
+	*/
+	CWspDefaultHeaderCodec(RStringPool aStrPool);
+
+	/**
+	Standard 2nd phase construction
+	@leave		KErrNoMemory
+	@since			7.0
+	@pre 			Object is constructed
+	@post			Object is initialized and all the required string tables have
+					been opened in the string pool
+	*/
+	void ConstructL();
+
+private:// methods
+
+	/**
+	Standard default private constructor
+	@since			7.0
+	@pre 			None
+	@post			Object is constructed
+	*/
+	CWspDefaultHeaderCodec();
+
+private: // attributes
+
+	/** 
+		Handle to an opened string pool 
+	*/
+	RStringPool iStrPool;
+	};
+
+#endif // __CWSPHEADERCODEC_H__