applayerprotocols/httpservice/inc/thttpheadervaluevariant.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httpservice/inc/thttpheadervaluevariant.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,183 @@
+// Copyright (c) 2003-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 __THTTPHEADERVALUEVARIANT_H__
+#define __THTTPHEADERVALUEVARIANT_H__
+
+#include <http.h>
+class RStringPool;
+
+/**
+ * THttpHeaderValueVariant represents a value found in the header element. The value of the header element 
+ * can be of the various datatype like integer, string and datetime hence THttpHeaderValueVariant is a container
+ * for them.  
+ * 
+ * @publishedAll
+ * @prototype
+ */
+
+class THttpHeaderValueVariant
+	{
+friend class THttpHeaderParamIterator;
+friend class THttpHeaderElementIterator;
+friend class THttpHeaderIterator;
+friend class CHttpClient;
+friend class CHttpClientTransaction;
+public:
+    /**
+     * Enumeration type.
+     * 
+     */
+	typedef enum
+			{
+			ENoType 			= 0x00,  // No concrete datatype
+			EIntType			= 0x01,  // Integer datatype
+			EStrType 			=	0x02, // String datatype
+			EDateTimeType	= 0x03 // Datetime datatype
+			}THttpVariantType;
+public:
+	/**
+	 * Default constructor
+	 */
+	inline THttpHeaderValueVariant();
+	/**
+	 * Constructor 
+	 */
+	inline THttpHeaderValueVariant(TInt aIntVariant);
+	inline THttpHeaderValueVariant(const TDesC8& aStrVariant);
+	inline THttpHeaderValueVariant(TDateTime aDateVariant);
+	/**
+	 * Set the integer value
+	 * @param aIntVariant Integer value
+	 */
+	inline void SetInt(TInt aIntVariant);
+	/**
+	 * Set the string value
+	 * @param aStrVariant String value
+	 */
+	inline void SetStr(const TDesC8& aStrVariant);
+	/**
+	 * Set the datettime value
+	 * @param aDateVariant Datettime value
+	 */
+	inline void SetDateTime(TDateTime aDateVariant);
+	
+	/**
+	 * Return the type that is represented by "this" object
+	 * 
+	 */
+	inline THttpVariantType Type() const;
+	
+	/**
+	 * Returns the contained integer. Will panic if the contained
+	 * datatype is not an ineger
+	 */
+	inline TInt Int() const;
+    
+	/**
+     * Returns the contained string. Will panic if the contained
+     * datatype is not an string
+     */	
+	inline TPtrC8 Str() const;
+	
+    /**
+     * Returns the contained datetime value. Will panic if the contained
+     * datatype is not a datettime value
+     */ 
+	inline TDateTime DateTime() const;
+
+private:	
+	THttpVariantType	               iVariantType;
+	TInt                               iVariantVal;
+	TInt							   iMoreSpace;
+	};
+
+
+inline THttpHeaderValueVariant::THttpHeaderValueVariant()
+: iVariantVal(0),
+iVariantType(ENoType),
+iMoreSpace(0)
+	{
+	}
+
+inline THttpHeaderValueVariant::THttpHeaderValueVariant(TInt aInt)
+: iVariantVal(aInt),
+iVariantType(EIntType),
+iMoreSpace(0)
+	{
+	}
+
+inline THttpHeaderValueVariant::THttpHeaderValueVariant(const TDesC8& aStr)
+: iVariantVal(reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()))),
+iVariantType(EStrType),
+iMoreSpace(aStr.Length())
+	{
+	}
+
+inline THttpHeaderValueVariant::THttpHeaderValueVariant(TDateTime aDateTime)
+: iVariantType(EDateTimeType),
+	iMoreSpace(0)
+	{
+	*reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
+	}
+	
+inline void THttpHeaderValueVariant::SetInt(TInt aInt)
+	{
+	iVariantVal = aInt;
+	iMoreSpace = 0;
+	iVariantType = EIntType;
+	}
+		
+inline void THttpHeaderValueVariant::SetStr(const TDesC8& aStr)
+	{	
+	iVariantVal = reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()));	
+	iMoreSpace = aStr.Length();	
+	iVariantType = EStrType;	
+	}
+	
+inline void THttpHeaderValueVariant::SetDateTime(TDateTime aDateTime)
+	{
+	*reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
+	iVariantType = EDateTimeType;
+	iMoreSpace = 0;
+	}
+	
+inline THttpHeaderValueVariant::THttpVariantType THttpHeaderValueVariant::Type() const
+	{
+	return iVariantType;
+	}
+
+inline TInt THttpHeaderValueVariant::Int() const
+	{
+	__ASSERT_DEBUG(iVariantType == EIntType, User::Invariant());
+	return iVariantVal;
+	}
+
+inline TPtrC8 THttpHeaderValueVariant::Str() const
+	{
+	__ASSERT_DEBUG(iVariantType == EStrType, User::Invariant());
+	
+	TUint8* actualAddr = reinterpret_cast<TUint8*>(iVariantVal);
+	TPtrC8 ptr;
+	ptr.Set(actualAddr, iMoreSpace);	
+	return ptr;
+	}
+	
+inline TDateTime THttpHeaderValueVariant::DateTime () const
+	{
+	__ASSERT_DEBUG(iVariantType == EDateTimeType, User::Invariant());
+	return reinterpret_cast<const TTime*>(&iVariantVal)->DateTime();	
+	}
+#endif