applayerprotocols/httpexamples/cookies/inc/ccookie.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httpexamples/cookies/inc/ccookie.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,151 @@
+// 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		__CCOOKIE_H__
+#define		__CCOOKIE_H__
+
+#include <e32std.h>
+#include <stringpool.h>
+#include <http/thttphdrval.h>
+
+/** Class to store the data that makes up a cookie
+*/
+class CCookie : public CBase
+	{
+public:
+	/** Enumeration of all the elements of data that make up a cookie
+	*/
+	enum TCookieAttributeName
+		{
+		EName,			// Name of the cookie - mandatory
+		EValue,			// Value associated with the name - mandatory
+		EComment,		// Comment which can be displayed to the user
+		ECommentURI,	// A URI which can be visited for more information
+		EDiscard,		// Flag indicating that the cookie should be discarded
+		EDomain,		// Domain which this cookie applies to
+		EMaxAge,		// Age after which this cookie should be deleted
+		EPath,			// Path which this cookie applies to
+		EPort,			// Port numbers that this cookie applies to
+		ESecure,		// Flag indicating this cookie should only be used for secure transactions
+		EVersion,		// Version of style of cookie
+		EExpires,		// Time after which this cookie should be deleted - Netscape cookies only
+		};
+
+	/** Standard C class construction method
+		@param	aStringPool	A string pool to be used by this cookie
+		@param	aName		Name attribute for this cookie
+		@param	aValue		Value attribute for this cookie
+		@param	aCookie2	Flag indicating if this cookie was received in a SetCookie2 header
+		@return	Pointer to a fully constructed CCookie
+	*/
+	static CCookie* NewL(RStringPool aStringPool, RString aName, RString aValue, TBool aCookie2);
+
+	/** Standard destructor
+	*/
+	~CCookie();
+	
+	/** SetAttributeL sets an attribute on the cookie. 
+		Adding an attribute where one exists will replace the existing one
+		This function may leave with a system wide error code if the type of the value is not correct
+		or if the attempt to append the attribute to an internal list fails.
+		@param aAttributeName identifies the attribute 
+		@param aAttributeVal the value being set
+		@leave KErrNoMemory if there is not enough memory
+	*/
+	void SetAttributeL(TCookieAttributeName aAttributeName, THTTPHdrVal aAttributeVal);
+	
+	/** Attribute retrieves the value of an attribute
+		@param	aAttributeName	Identifies the attribute 
+		@param	aAttributeVal	The value being retrieved
+		@return	An error code. KErrNotFound will indicate that the cookie doesn't 
+		contain the specified attribute.
+	*/
+	TInt Attribute(TCookieAttributeName aAttributeName, THTTPHdrVal& aAttributeVal) const;
+
+	/** Did this cookie come from a SetCookie2 header?
+		@return	Flag indicating if this cookie was received in SetCookie2 header (rather 
+				than a SetCookie header).
+	*/
+	TBool FromCookie2() const;
+
+private:
+	/** Class to store the name and value of an individual cookie attribute
+	*/
+	class TCookieAttribute
+		{
+	public:
+	/** Constructor that initialises name and value of attribute
+		@param	aName	Identifies the attribute to be set
+		@param	aHdrVal	The value of the attribute
+	*/
+		TCookieAttribute(TCookieAttributeName aName, THTTPHdrVal aHdrVal);
+
+	/** Default constructor
+	*/
+		TCookieAttribute();
+	public:
+		/** The cookie attribute
+		*/
+		TCookieAttributeName iName;
+
+		/** The value of this attribute
+		*/
+		THTTPHdrVal iValue;
+		};
+
+	/** Constructor for CCookie
+		@param	aStringPool	String pool to be used by this cookie
+		@param	aCookie2	Flag indicating if this cookie was received in a SetCookie2 header
+	*/
+	CCookie(RStringPool aStringPool, TBool aCookie2);
+
+	/** Standard C class second phase construction method
+		@param aName		Name attribute for this cookie
+		@param aValue		Value attribute for this cookie
+	*/
+	void ConstructL(RString aName, RString aValue);
+
+	/** Closes a cookie attribute - used to ensure string attributes are
+		properly closed on destruction
+		@param aCookieAttribute	The attribute to be closed
+	*/
+	void CloseAttribute(TCookieAttribute aCookieAttribute);
+
+	/** Finds the specified attribute in this cookie
+		@param aAttribute		
+		@param aAttributeName	
+		@return The index in iAttributes of the specified attribute. KErrNotFound indicates 
+		that the cookie does not contain the attribute.
+	*/
+	TInt FindAttribute(TCookieAttributeName aAttributeName, TCookieAttribute& aAttribute) const;
+
+private:
+	/** String pool that can be used by this cookie
+	*/
+	RStringPool iStringPool;
+	
+	/** Array of the attributes of this cookie
+	*/
+	RArray<TCookieAttribute> iAttributes;
+
+	/** Flag indicating whether this cookie was received in a SetCookie2 header
+	*/
+	TBool iSetCookie2;
+	};
+
+#include "ccookie.inl"
+
+#endif //	__CCOOKIE_H__
+