|
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". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // |
|
15 |
|
16 #ifndef __THTTPHEADERVALUEVARIANT_H__ |
|
17 #define __THTTPHEADERVALUEVARIANT_H__ |
|
18 |
|
19 #include <http.h> |
|
20 class RStringPool; |
|
21 |
|
22 /** |
|
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 |
|
25 * for them. |
|
26 * |
|
27 * @publishedAll |
|
28 * @prototype |
|
29 */ |
|
30 |
|
31 class THttpHeaderValueVariant |
|
32 { |
|
33 friend class THttpHeaderParamIterator; |
|
34 friend class THttpHeaderElementIterator; |
|
35 friend class THttpHeaderIterator; |
|
36 friend class CHttpClient; |
|
37 friend class CHttpClientTransaction; |
|
38 public: |
|
39 /** |
|
40 * Enumeration type. |
|
41 * |
|
42 */ |
|
43 typedef enum |
|
44 { |
|
45 ENoType = 0x00, // No concrete datatype |
|
46 EIntType = 0x01, // Integer datatype |
|
47 EStrType = 0x02, // String datatype |
|
48 EDateTimeType = 0x03 // Datetime datatype |
|
49 }THttpVariantType; |
|
50 public: |
|
51 /** |
|
52 * Default constructor |
|
53 */ |
|
54 inline THttpHeaderValueVariant(); |
|
55 /** |
|
56 * Constructor |
|
57 */ |
|
58 inline THttpHeaderValueVariant(TInt aIntVariant); |
|
59 inline THttpHeaderValueVariant(const TDesC8& aStrVariant); |
|
60 inline THttpHeaderValueVariant(TDateTime aDateVariant); |
|
61 /** |
|
62 * Set the integer value |
|
63 * @param aIntVariant Integer value |
|
64 */ |
|
65 inline void SetInt(TInt aIntVariant); |
|
66 /** |
|
67 * Set the string value |
|
68 * @param aStrVariant String value |
|
69 */ |
|
70 inline void SetStr(const TDesC8& aStrVariant); |
|
71 /** |
|
72 * Set the datettime value |
|
73 * @param aDateVariant Datettime value |
|
74 */ |
|
75 inline void SetDateTime(TDateTime aDateVariant); |
|
76 |
|
77 /** |
|
78 * Return the type that is represented by "this" object |
|
79 * |
|
80 */ |
|
81 inline THttpVariantType Type() const; |
|
82 |
|
83 /** |
|
84 * Returns the contained integer. Will panic if the contained |
|
85 * datatype is not an ineger |
|
86 */ |
|
87 inline TInt Int() const; |
|
88 |
|
89 /** |
|
90 * Returns the contained string. Will panic if the contained |
|
91 * datatype is not an string |
|
92 */ |
|
93 inline TPtrC8 Str() const; |
|
94 |
|
95 /** |
|
96 * Returns the contained datetime value. Will panic if the contained |
|
97 * datatype is not a datettime value |
|
98 */ |
|
99 inline TDateTime DateTime() const; |
|
100 |
|
101 private: |
|
102 THttpVariantType iVariantType; |
|
103 TInt iVariantVal; |
|
104 TInt iMoreSpace; |
|
105 }; |
|
106 |
|
107 |
|
108 inline THttpHeaderValueVariant::THttpHeaderValueVariant() |
|
109 : iVariantVal(0), |
|
110 iVariantType(ENoType), |
|
111 iMoreSpace(0) |
|
112 { |
|
113 } |
|
114 |
|
115 inline THttpHeaderValueVariant::THttpHeaderValueVariant(TInt aInt) |
|
116 : iVariantVal(aInt), |
|
117 iVariantType(EIntType), |
|
118 iMoreSpace(0) |
|
119 { |
|
120 } |
|
121 |
|
122 inline THttpHeaderValueVariant::THttpHeaderValueVariant(const TDesC8& aStr) |
|
123 : iVariantVal(reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()))), |
|
124 iVariantType(EStrType), |
|
125 iMoreSpace(aStr.Length()) |
|
126 { |
|
127 } |
|
128 |
|
129 inline THttpHeaderValueVariant::THttpHeaderValueVariant(TDateTime aDateTime) |
|
130 : iVariantType(EDateTimeType), |
|
131 iMoreSpace(0) |
|
132 { |
|
133 *reinterpret_cast<TTime*>(&iVariantVal) = aDateTime; |
|
134 } |
|
135 |
|
136 inline void THttpHeaderValueVariant::SetInt(TInt aInt) |
|
137 { |
|
138 iVariantVal = aInt; |
|
139 iMoreSpace = 0; |
|
140 iVariantType = EIntType; |
|
141 } |
|
142 |
|
143 inline void THttpHeaderValueVariant::SetStr(const TDesC8& aStr) |
|
144 { |
|
145 iVariantVal = reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr())); |
|
146 iMoreSpace = aStr.Length(); |
|
147 iVariantType = EStrType; |
|
148 } |
|
149 |
|
150 inline void THttpHeaderValueVariant::SetDateTime(TDateTime aDateTime) |
|
151 { |
|
152 *reinterpret_cast<TTime*>(&iVariantVal) = aDateTime; |
|
153 iVariantType = EDateTimeType; |
|
154 iMoreSpace = 0; |
|
155 } |
|
156 |
|
157 inline THttpHeaderValueVariant::THttpVariantType THttpHeaderValueVariant::Type() const |
|
158 { |
|
159 return iVariantType; |
|
160 } |
|
161 |
|
162 inline TInt THttpHeaderValueVariant::Int() const |
|
163 { |
|
164 __ASSERT_DEBUG(iVariantType == EIntType, User::Invariant()); |
|
165 return iVariantVal; |
|
166 } |
|
167 |
|
168 inline TPtrC8 THttpHeaderValueVariant::Str() const |
|
169 { |
|
170 __ASSERT_DEBUG(iVariantType == EStrType, User::Invariant()); |
|
171 |
|
172 TUint8* actualAddr = reinterpret_cast<TUint8*>(iVariantVal); |
|
173 TPtrC8 ptr; |
|
174 ptr.Set(actualAddr, iMoreSpace); |
|
175 return ptr; |
|
176 } |
|
177 |
|
178 inline TDateTime THttpHeaderValueVariant::DateTime () const |
|
179 { |
|
180 __ASSERT_DEBUG(iVariantType == EDateTimeType, User::Invariant()); |
|
181 return reinterpret_cast<const TTime*>(&iVariantVal)->DateTime(); |
|
182 } |
|
183 #endif |