00001
00002
00003
00004
00005 #ifndef __CLIENTENGINE_H__
00006 #define __CLIENTENGINE_H__
00007
00008 #include <coecntrl.h>
00009 #include <http\mhttpdatasupplier.h>
00010 #include <http\mhttptransactioncallback.h>
00011 #include <http\mhttpauthenticationcallback.h>
00012 #include <es_sock.h>
00013 #include <comms-infras/cs_mobility_apiext.h>
00014 #include <cmapplicationsettingsui.h>
00015
00016 class RHTTPSession;
00017 class RHTTPTransaction;
00018
00019 const TInt KDefaultBufferSize = 256;
00020
00021
00022
00023
00024
00025
00026 class MClientObserver
00027 {
00028 public:
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 virtual void ClientEvent(const TDesC& aEventDescription) = 0;
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 virtual void ClientBodyReceived(const TDesC8& aBodyData) = 0;
00058 };
00059
00060
00061
00062
00063 class CClientEngine : public CActive,
00064 public MHTTPTransactionCallback,
00065 public MHTTPDataSupplier,
00066 public MHTTPAuthenticationCallback,
00067 public MMobilityProtocolResp
00068 {
00069 public:
00070
00071 enum EngineState
00072 {
00073 EIdle = 0,
00074 EGet,
00075 EPost
00076 };
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 static CClientEngine* NewL(MClientObserver& iObserver);
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 static CClientEngine* NewLC(MClientObserver& iObserver);
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 ~CClientEngine();
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 void IssueHTTPGetL(const TDesC8& aUri);
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 void IssueHTTPPostL(const TDesC8& aUri,
00149 const TDesC8& aContentType,
00150 const TDesC8& aBody);
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 void CancelTransaction();
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 TBool IsRunning();
00179
00180 private:
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 void ConstructL();
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 CClientEngine(MClientObserver& iObserver);
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223 void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField,
00224 const TDesC8& aHdrValue);
00225
00226 void SetupConnectionL();
00227
00231 TBool CClientEngine::FindExistingConnection();
00232
00233
00234
00235
00236 private:
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270 TInt MHFRunError( TInt aError,
00271 RHTTPTransaction aTransaction,
00272 const THTTPEvent& aEvent);
00273
00274
00275
00276
00277 private:
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291 void ReleaseData();
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 TBool GetNextDataPart(TPtrC8& aDataPart);
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320 TInt Reset();
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336 TInt OverallDataSize();
00337
00338
00339
00340
00341 private:
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359 TBool GetCredentialsL( const TUriC8& aURI,
00360 RString aRealm,
00361 RStringF aAuthenticationType,
00362 RString& aUsername,
00363 RString& aPassword);
00364
00365
00366 private:
00367 void PreferredCarrierAvailable(TAccessPointInfo aOldAPInfo,
00368 TAccessPointInfo aNewAPInfo,
00369 TBool aIsUpgrade,
00370 TBool aIsSeamless);
00371 void NewCarrierActive(TAccessPointInfo aNewAPInfo, TBool aIsSeamless);
00372 void Error(TInt aError);
00373
00374 private:
00375 void RunL();
00376 void DoCancel();
00377
00378 private:
00379 void DoHTTPGetL();
00380 void DoHTTPPostL();
00381
00382 private:
00383
00384 RSocketServ iSocketServ;
00385 RConnection iConnection;
00386 TUint32 iSelectedIap;
00387
00388 RHTTPSession iSession;
00389 RHTTPTransaction iTransaction;
00390
00391 MClientObserver& iObserver;
00392 HBufC8* iPostData;
00393 TBool iRunning;
00394 TBool iConnectionSetupDone;
00395
00396 TInt iPrevProfileId;
00397
00398 CActiveCommsMobilityApiExt* iMobility;
00399 TBool iTransactionOpen;
00400 EngineState iEngineState;
00401 HBufC8* iUri;
00402 HBufC8* iContentType;
00403 HBufC8* iBody;
00404
00405
00406 };
00407
00408 #endif // __CLIENTENGINE_H__