1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #ifndef __THTTPHEADERVALUEVARIANT_H__
17 #define __THTTPHEADERVALUEVARIANT_H__
23 * THttpHeaderValueVariant represents a value found in the header element. The value of the header element
24 * can be of the various datatype like integer, string and datetime hence THttpHeaderValueVariant is a container
31 class THttpHeaderValueVariant
33 friend class THttpHeaderParamIterator;
34 friend class THttpHeaderElementIterator;
35 friend class THttpHeaderIterator;
36 friend class CHttpClient;
37 friend class CHttpClientTransaction;
45 ENoType = 0x00, // No concrete datatype
46 EIntType = 0x01, // Integer datatype
47 EStrType = 0x02, // String datatype
48 EDateTimeType = 0x03 // Datetime datatype
54 inline THttpHeaderValueVariant();
58 inline THttpHeaderValueVariant(TInt aIntVariant);
59 inline THttpHeaderValueVariant(const TDesC8& aStrVariant);
60 inline THttpHeaderValueVariant(TDateTime aDateVariant);
62 * Set the integer value
63 * @param aIntVariant Integer value
65 inline void SetInt(TInt aIntVariant);
67 * Set the string value
68 * @param aStrVariant String value
70 inline void SetStr(const TDesC8& aStrVariant);
72 * Set the datettime value
73 * @param aDateVariant Datettime value
75 inline void SetDateTime(TDateTime aDateVariant);
78 * Return the type that is represented by "this" object
81 inline THttpVariantType Type() const;
84 * Returns the contained integer. Will panic if the contained
85 * datatype is not an ineger
87 inline TInt Int() const;
90 * Returns the contained string. Will panic if the contained
91 * datatype is not an string
93 inline TPtrC8 Str() const;
96 * Returns the contained datetime value. Will panic if the contained
97 * datatype is not a datettime value
99 inline TDateTime DateTime() const;
102 THttpVariantType iVariantType;
108 inline THttpHeaderValueVariant::THttpHeaderValueVariant()
110 iVariantType(ENoType),
115 inline THttpHeaderValueVariant::THttpHeaderValueVariant(TInt aInt)
117 iVariantType(EIntType),
122 inline THttpHeaderValueVariant::THttpHeaderValueVariant(const TDesC8& aStr)
123 : iVariantVal(reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()))),
124 iVariantType(EStrType),
125 iMoreSpace(aStr.Length())
129 inline THttpHeaderValueVariant::THttpHeaderValueVariant(TDateTime aDateTime)
130 : iVariantType(EDateTimeType),
133 *reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
136 inline void THttpHeaderValueVariant::SetInt(TInt aInt)
140 iVariantType = EIntType;
143 inline void THttpHeaderValueVariant::SetStr(const TDesC8& aStr)
145 iVariantVal = reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()));
146 iMoreSpace = aStr.Length();
147 iVariantType = EStrType;
150 inline void THttpHeaderValueVariant::SetDateTime(TDateTime aDateTime)
152 *reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
153 iVariantType = EDateTimeType;
157 inline THttpHeaderValueVariant::THttpVariantType THttpHeaderValueVariant::Type() const
162 inline TInt THttpHeaderValueVariant::Int() const
164 __ASSERT_DEBUG(iVariantType == EIntType, User::Invariant());
168 inline TPtrC8 THttpHeaderValueVariant::Str() const
170 __ASSERT_DEBUG(iVariantType == EStrType, User::Invariant());
172 TUint8* actualAddr = reinterpret_cast<TUint8*>(iVariantVal);
174 ptr.Set(actualAddr, iMoreSpace);
178 inline TDateTime THttpHeaderValueVariant::DateTime () const
180 __ASSERT_DEBUG(iVariantType == EDateTimeType, User::Invariant());
181 return reinterpret_cast<const TTime*>(&iVariantVal)->DateTime();