--- /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