|
1 // Copyright (c) 2001-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 /** |
|
17 @file |
|
18 @warning : This file contains Rose Model ID comments - please do not delete |
|
19 */ |
|
20 |
|
21 #ifndef __RHTTPTRANSACTION_H__ |
|
22 #define __RHTTPTRANSACTION_H__ |
|
23 |
|
24 // System includes |
|
25 #include <http/thttpevent.h> |
|
26 #include <http/rhttpresponse.h> |
|
27 #include <http/rhttprequest.h> |
|
28 #include <http/rhttptransactionpropertyset.h> |
|
29 #include <http/thttpfilterhandle.h> |
|
30 #include <http/mhttpdataoptimiser.h> |
|
31 |
|
32 // Forward declarations |
|
33 class CHTTPTransaction; |
|
34 class CTransaction; |
|
35 class MHTTPTransactionCallback; |
|
36 class RHTTPSession; |
|
37 class TCertInfo; |
|
38 class CCertificate; |
|
39 |
|
40 |
|
41 //##ModelId=3C4C18860091 |
|
42 class RHTTPTransaction |
|
43 /** |
|
44 A HTTP Transaction. This encapsulates 1 HTTP request and |
|
45 response. A Transaction is associated with a session, and must be |
|
46 created using the session's CreateTransactionL method. |
|
47 @publishedAll |
|
48 @released |
|
49 @see RHTTPSession |
|
50 @see RHTTPSession::CreateTransactionL |
|
51 */ |
|
52 { |
|
53 public: |
|
54 /** |
|
55 Default (uninitialised) constructor |
|
56 */ |
|
57 //##ModelId=3C4C188600F5 |
|
58 inline RHTTPTransaction(); |
|
59 |
|
60 /** Submits a transaction. Once all the headers and other details |
|
61 have been set up, this call actualy causes the request to be |
|
62 made. |
|
63 @leave KErrNoMemory There was not enough memory. |
|
64 */ |
|
65 //##ModelId=3C4C188600ED |
|
66 IMPORT_C void SubmitL(THTTPFilterHandle aStart = |
|
67 THTTPFilterHandle::EClient); |
|
68 |
|
69 IMPORT_C TInt Submit(THTTPFilterHandle aStart = THTTPFilterHandle::EClient); |
|
70 /** Notify HTTP of the availability of more request body data, |
|
71 when submitting body data in several parts. |
|
72 |
|
73 @param aStart The filter supplying the new data. This will almost always be the client (default value) |
|
74 @leave KErrNoMemory There was not enough memory. |
|
75 */ |
|
76 //##ModelId=3C4C188600EB |
|
77 IMPORT_C void NotifyNewRequestBodyPartL(THTTPFilterHandle aStart = |
|
78 THTTPFilterHandle::EClient); |
|
79 |
|
80 /** Sends a status message to all relevant filters. This function |
|
81 is predominantly used by filters, rather than by the client. |
|
82 @param aStatus The status message to send. |
|
83 @param aDirection The direction down the filter queue that this event |
|
84 will be propogated. |
|
85 @leave KErrNoMemory There was not enough memory. |
|
86 */ |
|
87 //##ModelId=3C4C188600E2 |
|
88 IMPORT_C void SendEventL(THTTPEvent aStatus, |
|
89 THTTPEvent::TDirection aDirection, |
|
90 THTTPFilterHandle aStart); |
|
91 |
|
92 IMPORT_C TInt SendEvent(THTTPEvent aStatus, THTTPEvent::TDirection aDirection, THTTPFilterHandle aStart); |
|
93 /** Gets the response. Note that the returned response may not be |
|
94 valid if it hasn't been created yet. |
|
95 @see RHTTPMessage::IsValid() |
|
96 */ |
|
97 //##ModelId=3C4C188600E1 |
|
98 IMPORT_C RHTTPResponse Response() const; |
|
99 |
|
100 // Gets the request. |
|
101 //##ModelId=3C4C188600DA |
|
102 IMPORT_C RHTTPRequest Request() const; |
|
103 |
|
104 // Returns the session associated with the transaction. |
|
105 //##ModelId=3C4C188600D9 |
|
106 IMPORT_C RHTTPSession Session() const; |
|
107 |
|
108 /** Returns the transaction's property set. This is used by filters |
|
109 to store transaction-specific information, and by clients to |
|
110 specify things like reload or no cache behaviour. |
|
111 */ |
|
112 //##ModelId=3C4C188600D8 |
|
113 IMPORT_C RHTTPTransactionPropertySet PropertySet() const; |
|
114 |
|
115 /** Cancels the transaction. |
|
116 |
|
117 @param aStart The entity that is initiating the cancel (defaults |
|
118 to the client). See THTTPFilterHandle for the values this can take. |
|
119 */ |
|
120 //##ModelId=3C4C188600CF |
|
121 IMPORT_C void Cancel(THTTPFilterHandle aStart = |
|
122 THTTPFilterHandle::EClient); |
|
123 |
|
124 /** Closes the transaction and frees all owned resources. |
|
125 Transactions must be opened using RHTTPSession::OpenTransactionL. |
|
126 It is also closed when you close the session. |
|
127 */ |
|
128 //##ModelId=3C4C188600CE |
|
129 IMPORT_C void Close(); |
|
130 |
|
131 /** This function should be called by filters when they have |
|
132 failed due to running out of memory. It cancels the transaction |
|
133 and sends the synchronous events EUnrecoverableError and EFailed |
|
134 to the client to inform it of the failure. For instance in a |
|
135 filter that attempts to send an event to the client from a |
|
136 MHFRunError to inform the client of a failure, if the call to |
|
137 SendEventL leaves, Fail() may be used to 'give up'. */ |
|
138 //##ModelId=3C4C188600C7 |
|
139 IMPORT_C void Fail(THTTPFilterHandle aStart = |
|
140 THTTPFilterHandle::ECurrentFilter); |
|
141 |
|
142 /** Equality operator to check if this transaction is the same as that one. |
|
143 @param aTrans The transaction to compare this one to. |
|
144 */ |
|
145 //##ModelId=3C4C188600C5 |
|
146 TBool operator==(RHTTPTransaction aTrans) const; |
|
147 /** Inequality operator |
|
148 @param aTrans The transaction to compare this one to. |
|
149 */ |
|
150 //##ModelId=3C4C188600C3 |
|
151 TBool operator!=(RHTTPTransaction aTrans) const; |
|
152 /** Obtain this transaction's ID, which is unique within its |
|
153 session. This is mostly used for producing a |
|
154 slightly-meaningful way of identifying transactions in logging |
|
155 code. |
|
156 @return The transaction ID. |
|
157 */ |
|
158 //##ModelId=3C4C188600BB |
|
159 IMPORT_C TInt Id() const; |
|
160 |
|
161 /** Obtain the server certificate information for this transaction. This function |
|
162 should only be used for text-mode, for WSP use RHttpSession::ServerCert. |
|
163 @see RHttpSession::ServerCert |
|
164 @param aServerCert A client supplied object into which the certificate |
|
165 information will be placed. |
|
166 @return KErrNone if certificate has been completed, KErrNotSupported if |
|
167 this function is called for WSP. |
|
168 @deprecated v9.2 onwards - maintained for compatibility with v9.1 and before |
|
169 TCertInfo has been deprecated since v9.2. CCertificate may be used as an alternative. |
|
170 */ |
|
171 //##ModelId=3C4C188600B9 |
|
172 IMPORT_C TInt ServerCert(TCertInfo& aServerCert); |
|
173 |
|
174 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
|
175 /** Obtain the server certificate information for this transaction. This function |
|
176 should only be used for HTTP. WSP should use RHttpSession::ServerCert. |
|
177 @see RHttpSession::ServerCert |
|
178 @prototype |
|
179 @return a CCertificate pointer to an CX509Certificate object. |
|
180 Calling code can safely cast to CX509Certificate if using "HTTP/TCP". |
|
181 NULL returned if certificate information not found. |
|
182 */ |
|
183 #else |
|
184 /** Obtain the server certificate information for this transaction. This function |
|
185 should only be used for HTTP. WSP should use RHttpSession::ServerCert. |
|
186 @see RHttpSession::ServerCert |
|
187 @internalAll |
|
188 @prototype |
|
189 @return a CCertificate pointer to an CX509Certificate object. |
|
190 Calling code can safely cast to CX509Certificate if using "HTTP/TCP". |
|
191 NULL returned if certificate information not found. |
|
192 */ |
|
193 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS |
|
194 IMPORT_C const CCertificate* ServerCert(); |
|
195 |
|
196 |
|
197 /** Obtain the cipher suite information for this transaction. |
|
198 @return RString containing the cipher suite as per RFC2246. |
|
199 */ |
|
200 IMPORT_C RString CipherSuite(); |
|
201 |
|
202 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
|
203 /**Sets the HTTP data optimiser for the transaction. |
|
204 @param aHttpOptimiser An object of the implementation of interface, MHttpDataOptimiser, supplied by the client. |
|
205 */ |
|
206 #else |
|
207 /**Sets the HTTP data optimiser for the transaction. |
|
208 @param aHttpOptimiser An object of the implementation of interface, MHttpDataOptimiser, supplied by the client. |
|
209 @publishedPartner |
|
210 @released |
|
211 */ |
|
212 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS |
|
213 IMPORT_C void SetupHttpDataOptimiser (MHttpDataOptimiser& aHttpOptimiser); |
|
214 |
|
215 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
|
216 /**Returns the object of the MHttpDataOptimiser implementation class. |
|
217 */ |
|
218 #else |
|
219 /**Returns the object of the MHttpDataOptimiser implementation class. |
|
220 @internalTechnology |
|
221 */ |
|
222 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS |
|
223 IMPORT_C MHttpDataOptimiser* HttpDataOptimiser (); |
|
224 |
|
225 private: |
|
226 friend class RHTTPSession; |
|
227 friend class CTransaction; |
|
228 friend class CProtocolHandler; |
|
229 |
|
230 inline CTransaction* Implementation(); |
|
231 private: |
|
232 //##ModelId=3C4C188600A7 |
|
233 CTransaction* iImplementation; |
|
234 }; |
|
235 |
|
236 inline TBool RHTTPTransaction::operator==(RHTTPTransaction aTrans) const |
|
237 { |
|
238 return (iImplementation == aTrans.iImplementation); |
|
239 }; |
|
240 inline TBool RHTTPTransaction::operator!=(RHTTPTransaction aTrans) const |
|
241 { |
|
242 return !(*this == aTrans); |
|
243 }; |
|
244 |
|
245 inline RHTTPTransaction::RHTTPTransaction() |
|
246 : iImplementation(NULL) |
|
247 { |
|
248 } |
|
249 |
|
250 inline CTransaction* RHTTPTransaction::Implementation() |
|
251 { |
|
252 return iImplementation; |
|
253 } |
|
254 |
|
255 #endif // __RHTTPTRANSACTION_H__ |