williamr@4: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: #ifndef __THTTPHEADERVALUEVARIANT_H__ williamr@4: #define __THTTPHEADERVALUEVARIANT_H__ williamr@4: williamr@4: #include williamr@4: class RStringPool; williamr@4: williamr@4: /** williamr@4: * THttpHeaderValueVariant represents a value found in the header element. The value of the header element williamr@4: * can be of the various datatype like integer, string and datetime hence THttpHeaderValueVariant is a container williamr@4: * for them. williamr@4: * williamr@4: * @publishedAll williamr@4: * @prototype williamr@4: */ williamr@4: williamr@4: class THttpHeaderValueVariant williamr@4: { williamr@4: friend class THttpHeaderParamIterator; williamr@4: friend class THttpHeaderElementIterator; williamr@4: friend class THttpHeaderIterator; williamr@4: friend class CHttpClient; williamr@4: friend class CHttpClientTransaction; williamr@4: public: williamr@4: /** williamr@4: * Enumeration type. williamr@4: * williamr@4: */ williamr@4: typedef enum williamr@4: { williamr@4: ENoType = 0x00, // No concrete datatype williamr@4: EIntType = 0x01, // Integer datatype williamr@4: EStrType = 0x02, // String datatype williamr@4: EDateTimeType = 0x03 // Datetime datatype williamr@4: }THttpVariantType; williamr@4: public: williamr@4: /** williamr@4: * Default constructor williamr@4: */ williamr@4: inline THttpHeaderValueVariant(); williamr@4: /** williamr@4: * Constructor williamr@4: */ williamr@4: inline THttpHeaderValueVariant(TInt aIntVariant); williamr@4: inline THttpHeaderValueVariant(const TDesC8& aStrVariant); williamr@4: inline THttpHeaderValueVariant(TDateTime aDateVariant); williamr@4: /** williamr@4: * Set the integer value williamr@4: * @param aIntVariant Integer value williamr@4: */ williamr@4: inline void SetInt(TInt aIntVariant); williamr@4: /** williamr@4: * Set the string value williamr@4: * @param aStrVariant String value williamr@4: */ williamr@4: inline void SetStr(const TDesC8& aStrVariant); williamr@4: /** williamr@4: * Set the datettime value williamr@4: * @param aDateVariant Datettime value williamr@4: */ williamr@4: inline void SetDateTime(TDateTime aDateVariant); williamr@4: williamr@4: /** williamr@4: * Return the type that is represented by "this" object williamr@4: * williamr@4: */ williamr@4: inline THttpVariantType Type() const; williamr@4: williamr@4: /** williamr@4: * Returns the contained integer. Will panic if the contained williamr@4: * datatype is not an ineger williamr@4: */ williamr@4: inline TInt Int() const; williamr@4: williamr@4: /** williamr@4: * Returns the contained string. Will panic if the contained williamr@4: * datatype is not an string williamr@4: */ williamr@4: inline TPtrC8 Str() const; williamr@4: williamr@4: /** williamr@4: * Returns the contained datetime value. Will panic if the contained williamr@4: * datatype is not a datettime value williamr@4: */ williamr@4: inline TDateTime DateTime() const; williamr@4: williamr@4: private: williamr@4: THttpVariantType iVariantType; williamr@4: TInt iVariantVal; williamr@4: TInt iMoreSpace; williamr@4: }; williamr@4: williamr@4: williamr@4: inline THttpHeaderValueVariant::THttpHeaderValueVariant() williamr@4: : iVariantVal(0), williamr@4: iVariantType(ENoType), williamr@4: iMoreSpace(0) williamr@4: { williamr@4: } williamr@4: williamr@4: inline THttpHeaderValueVariant::THttpHeaderValueVariant(TInt aInt) williamr@4: : iVariantVal(aInt), williamr@4: iVariantType(EIntType), williamr@4: iMoreSpace(0) williamr@4: { williamr@4: } williamr@4: williamr@4: inline THttpHeaderValueVariant::THttpHeaderValueVariant(const TDesC8& aStr) williamr@4: : iVariantVal(reinterpret_cast(const_cast(aStr.Ptr()))), williamr@4: iVariantType(EStrType), williamr@4: iMoreSpace(aStr.Length()) williamr@4: { williamr@4: } williamr@4: williamr@4: inline THttpHeaderValueVariant::THttpHeaderValueVariant(TDateTime aDateTime) williamr@4: : iVariantType(EDateTimeType), williamr@4: iMoreSpace(0) williamr@4: { williamr@4: *reinterpret_cast(&iVariantVal) = aDateTime; williamr@4: } williamr@4: williamr@4: inline void THttpHeaderValueVariant::SetInt(TInt aInt) williamr@4: { williamr@4: iVariantVal = aInt; williamr@4: iMoreSpace = 0; williamr@4: iVariantType = EIntType; williamr@4: } williamr@4: williamr@4: inline void THttpHeaderValueVariant::SetStr(const TDesC8& aStr) williamr@4: { williamr@4: iVariantVal = reinterpret_cast(const_cast(aStr.Ptr())); williamr@4: iMoreSpace = aStr.Length(); williamr@4: iVariantType = EStrType; williamr@4: } williamr@4: williamr@4: inline void THttpHeaderValueVariant::SetDateTime(TDateTime aDateTime) williamr@4: { williamr@4: *reinterpret_cast(&iVariantVal) = aDateTime; williamr@4: iVariantType = EDateTimeType; williamr@4: iMoreSpace = 0; williamr@4: } williamr@4: williamr@4: inline THttpHeaderValueVariant::THttpVariantType THttpHeaderValueVariant::Type() const williamr@4: { williamr@4: return iVariantType; williamr@4: } williamr@4: williamr@4: inline TInt THttpHeaderValueVariant::Int() const williamr@4: { williamr@4: __ASSERT_DEBUG(iVariantType == EIntType, User::Invariant()); williamr@4: return iVariantVal; williamr@4: } williamr@4: williamr@4: inline TPtrC8 THttpHeaderValueVariant::Str() const williamr@4: { williamr@4: __ASSERT_DEBUG(iVariantType == EStrType, User::Invariant()); williamr@4: williamr@4: TUint8* actualAddr = reinterpret_cast(iVariantVal); williamr@4: TPtrC8 ptr; williamr@4: ptr.Set(actualAddr, iMoreSpace); williamr@4: return ptr; williamr@4: } williamr@4: williamr@4: inline TDateTime THttpHeaderValueVariant::DateTime () const williamr@4: { williamr@4: __ASSERT_DEBUG(iVariantType == EDateTimeType, User::Invariant()); williamr@4: return reinterpret_cast(&iVariantVal)->DateTime(); williamr@4: } williamr@4: #endif