epoc32/include/mw/thttpheadervaluevariant.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     2
// All rights reserved.
williamr@4
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@4
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4
     7
//
williamr@4
     8
// Initial Contributors:
williamr@4
     9
// Nokia Corporation - initial contribution.
williamr@4
    10
//
williamr@4
    11
// Contributors:
williamr@4
    12
//
williamr@4
    13
// Description:
williamr@4
    14
//
williamr@4
    15
williamr@4
    16
#ifndef __THTTPHEADERVALUEVARIANT_H__
williamr@4
    17
#define __THTTPHEADERVALUEVARIANT_H__
williamr@4
    18
williamr@4
    19
#include <http.h>
williamr@4
    20
class RStringPool;
williamr@4
    21
williamr@4
    22
/**
williamr@4
    23
 * THttpHeaderValueVariant represents a value found in the header element. The value of the header element 
williamr@4
    24
 * can be of the various datatype like integer, string and datetime hence THttpHeaderValueVariant is a container
williamr@4
    25
 * for them.  
williamr@4
    26
 * 
williamr@4
    27
 * @publishedAll
williamr@4
    28
 * @prototype
williamr@4
    29
 */
williamr@4
    30
williamr@4
    31
class THttpHeaderValueVariant
williamr@4
    32
	{
williamr@4
    33
friend class THttpHeaderParamIterator;
williamr@4
    34
friend class THttpHeaderElementIterator;
williamr@4
    35
friend class THttpHeaderIterator;
williamr@4
    36
friend class CHttpClient;
williamr@4
    37
friend class CHttpClientTransaction;
williamr@4
    38
public:
williamr@4
    39
    /**
williamr@4
    40
     * Enumeration type.
williamr@4
    41
     * 
williamr@4
    42
     */
williamr@4
    43
	typedef enum
williamr@4
    44
			{
williamr@4
    45
			ENoType 			= 0x00,  // No concrete datatype
williamr@4
    46
			EIntType			= 0x01,  // Integer datatype
williamr@4
    47
			EStrType 			=	0x02, // String datatype
williamr@4
    48
			EDateTimeType	= 0x03 // Datetime datatype
williamr@4
    49
			}THttpVariantType;
williamr@4
    50
public:
williamr@4
    51
	/**
williamr@4
    52
	 * Default constructor
williamr@4
    53
	 */
williamr@4
    54
	inline THttpHeaderValueVariant();
williamr@4
    55
	/**
williamr@4
    56
	 * Constructor 
williamr@4
    57
	 */
williamr@4
    58
	inline THttpHeaderValueVariant(TInt aIntVariant);
williamr@4
    59
	inline THttpHeaderValueVariant(const TDesC8& aStrVariant);
williamr@4
    60
	inline THttpHeaderValueVariant(TDateTime aDateVariant);
williamr@4
    61
	/**
williamr@4
    62
	 * Set the integer value
williamr@4
    63
	 * @param aIntVariant Integer value
williamr@4
    64
	 */
williamr@4
    65
	inline void SetInt(TInt aIntVariant);
williamr@4
    66
	/**
williamr@4
    67
	 * Set the string value
williamr@4
    68
	 * @param aStrVariant String value
williamr@4
    69
	 */
williamr@4
    70
	inline void SetStr(const TDesC8& aStrVariant);
williamr@4
    71
	/**
williamr@4
    72
	 * Set the datettime value
williamr@4
    73
	 * @param aDateVariant Datettime value
williamr@4
    74
	 */
williamr@4
    75
	inline void SetDateTime(TDateTime aDateVariant);
williamr@4
    76
	
williamr@4
    77
	/**
williamr@4
    78
	 * Return the type that is represented by "this" object
williamr@4
    79
	 * 
williamr@4
    80
	 */
williamr@4
    81
	inline THttpVariantType Type() const;
williamr@4
    82
	
williamr@4
    83
	/**
williamr@4
    84
	 * Returns the contained integer. Will panic if the contained
williamr@4
    85
	 * datatype is not an ineger
williamr@4
    86
	 */
williamr@4
    87
	inline TInt Int() const;
williamr@4
    88
    
williamr@4
    89
	/**
williamr@4
    90
     * Returns the contained string. Will panic if the contained
williamr@4
    91
     * datatype is not an string
williamr@4
    92
     */	
williamr@4
    93
	inline TPtrC8 Str() const;
williamr@4
    94
	
williamr@4
    95
    /**
williamr@4
    96
     * Returns the contained datetime value. Will panic if the contained
williamr@4
    97
     * datatype is not a datettime value
williamr@4
    98
     */ 
williamr@4
    99
	inline TDateTime DateTime() const;
williamr@4
   100
williamr@4
   101
private:	
williamr@4
   102
	THttpVariantType	               iVariantType;
williamr@4
   103
	TInt                               iVariantVal;
williamr@4
   104
	TInt							   iMoreSpace;
williamr@4
   105
	};
williamr@4
   106
williamr@4
   107
williamr@4
   108
inline THttpHeaderValueVariant::THttpHeaderValueVariant()
williamr@4
   109
: iVariantVal(0),
williamr@4
   110
iVariantType(ENoType),
williamr@4
   111
iMoreSpace(0)
williamr@4
   112
	{
williamr@4
   113
	}
williamr@4
   114
williamr@4
   115
inline THttpHeaderValueVariant::THttpHeaderValueVariant(TInt aInt)
williamr@4
   116
: iVariantVal(aInt),
williamr@4
   117
iVariantType(EIntType),
williamr@4
   118
iMoreSpace(0)
williamr@4
   119
	{
williamr@4
   120
	}
williamr@4
   121
williamr@4
   122
inline THttpHeaderValueVariant::THttpHeaderValueVariant(const TDesC8& aStr)
williamr@4
   123
: iVariantVal(reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()))),
williamr@4
   124
iVariantType(EStrType),
williamr@4
   125
iMoreSpace(aStr.Length())
williamr@4
   126
	{
williamr@4
   127
	}
williamr@4
   128
williamr@4
   129
inline THttpHeaderValueVariant::THttpHeaderValueVariant(TDateTime aDateTime)
williamr@4
   130
: iVariantType(EDateTimeType),
williamr@4
   131
	iMoreSpace(0)
williamr@4
   132
	{
williamr@4
   133
	*reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
williamr@4
   134
	}
williamr@4
   135
	
williamr@4
   136
inline void THttpHeaderValueVariant::SetInt(TInt aInt)
williamr@4
   137
	{
williamr@4
   138
	iVariantVal = aInt;
williamr@4
   139
	iMoreSpace = 0;
williamr@4
   140
	iVariantType = EIntType;
williamr@4
   141
	}
williamr@4
   142
		
williamr@4
   143
inline void THttpHeaderValueVariant::SetStr(const TDesC8& aStr)
williamr@4
   144
	{	
williamr@4
   145
	iVariantVal = reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()));	
williamr@4
   146
	iMoreSpace = aStr.Length();	
williamr@4
   147
	iVariantType = EStrType;	
williamr@4
   148
	}
williamr@4
   149
	
williamr@4
   150
inline void THttpHeaderValueVariant::SetDateTime(TDateTime aDateTime)
williamr@4
   151
	{
williamr@4
   152
	*reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
williamr@4
   153
	iVariantType = EDateTimeType;
williamr@4
   154
	iMoreSpace = 0;
williamr@4
   155
	}
williamr@4
   156
	
williamr@4
   157
inline THttpHeaderValueVariant::THttpVariantType THttpHeaderValueVariant::Type() const
williamr@4
   158
	{
williamr@4
   159
	return iVariantType;
williamr@4
   160
	}
williamr@4
   161
williamr@4
   162
inline TInt THttpHeaderValueVariant::Int() const
williamr@4
   163
	{
williamr@4
   164
	__ASSERT_DEBUG(iVariantType == EIntType, User::Invariant());
williamr@4
   165
	return iVariantVal;
williamr@4
   166
	}
williamr@4
   167
williamr@4
   168
inline TPtrC8 THttpHeaderValueVariant::Str() const
williamr@4
   169
	{
williamr@4
   170
	__ASSERT_DEBUG(iVariantType == EStrType, User::Invariant());
williamr@4
   171
	
williamr@4
   172
	TUint8* actualAddr = reinterpret_cast<TUint8*>(iVariantVal);
williamr@4
   173
	TPtrC8 ptr;
williamr@4
   174
	ptr.Set(actualAddr, iMoreSpace);	
williamr@4
   175
	return ptr;
williamr@4
   176
	}
williamr@4
   177
	
williamr@4
   178
inline TDateTime THttpHeaderValueVariant::DateTime () const
williamr@4
   179
	{
williamr@4
   180
	__ASSERT_DEBUG(iVariantType == EDateTimeType, User::Invariant());
williamr@4
   181
	return reinterpret_cast<const TTime*>(&iVariantVal)->DateTime();	
williamr@4
   182
	}
williamr@4
   183
#endif