homescreenpluginsrv/hspsmanager/client/hspsrequestclient.cpp
changeset 0 79c6a41cd166
equal deleted inserted replaced
-1:000000000000 0:79c6a41cd166
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Client-side API implementation of Client Request Services of
       
    15 *                hsps Application Management Service APIs. 
       
    16 *                For details, see hspsThemeManagement.h.
       
    17 *
       
    18 *
       
    19 */
       
    20 
       
    21 
       
    22 #include <e32svr.h>
       
    23 #include <s32strm.h>
       
    24 #include <s32mem.h>
       
    25 #include <e32cmn.h> 
       
    26 #include <f32file.h>
       
    27 #include <s32file.h>
       
    28 
       
    29 #include "hspsrequestclient.h"
       
    30 #include "hspsodt.h"
       
    31 #include "hspsresource.h"
       
    32 #include "hspsresult.h"
       
    33 #include "hspsreqnotifparam.h"
       
    34 #include "hspsdomdocument.h"
       
    35 #include "hspsdomnode.h"
       
    36 #include "hspsdomdepthiterator.h"
       
    37 #include "hsps_builds_cfg.hrh"
       
    38 #ifdef _hsps_PERFORMANCE_TEST_
       
    39 #include "hspstimemon.h"
       
    40 #endif
       
    41 
       
    42 #ifdef HSPS_LOG_ACTIVE
       
    43 #include <hspslogbus.h>
       
    44 #endif
       
    45 
       
    46 _LIT( KPrivateFolderPrefix, "c:\\private\\" ); 
       
    47 _LIT( KDoubleBackSlash, "\\" );
       
    48 
       
    49 // ========================= MEMBER FUNCTIONS ==================================
       
    50 
       
    51 // -----------------------------------------------------------------------------
       
    52 // ChspsRequestClient::NewL()
       
    53 // Two-phased constructor.
       
    54 // -----------------------------------------------------------------------------
       
    55 EXPORT_C ChspsRequestClient* ChspsRequestClient::NewL( MhspsClientRequestServiceObserver& aObserver )
       
    56     {
       
    57     ChspsRequestClient* self = NewLC( aObserver );
       
    58     CleanupStack::Pop( self );
       
    59     return( self ) ;
       
    60     }
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 // ChspsRequestClient::NewLC()
       
    64 // Two-phased constructor.
       
    65 // -----------------------------------------------------------------------------
       
    66 EXPORT_C ChspsRequestClient* ChspsRequestClient::NewLC( MhspsClientRequestServiceObserver& aObserver )
       
    67     {
       
    68 #ifdef _hsps_PERFORMANCE_TEST_
       
    69     ChspsTimeMon::PrintUserMem( _L("ChspsRequestClient::NewLC(): - initialising..") );
       
    70 #endif//_hsps_PERFORMANCE_TEST_
       
    71     ChspsRequestClient* self = new ( ELeave ) ChspsRequestClient( aObserver );
       
    72     CleanupStack::PushL( self );
       
    73     self->ConstructL();
       
    74 #ifdef _hsps_PERFORMANCE_TEST_
       
    75     ChspsTimeMon::PrintUserMem( _L("CLIENT: - ChspsRequestClient::NewLC(): - done.") );
       
    76 #endif//_hsps_PERFORMANCE_TEST_    
       
    77     return self;
       
    78     }
       
    79 
       
    80 // -----------------------------------------------------------------------------
       
    81 // ChspsRequestClient::ConstructL()
       
    82 // Symbian 2nd phase constructor can leave.
       
    83 // -----------------------------------------------------------------------------
       
    84 //
       
    85 void ChspsRequestClient::ConstructL()
       
    86     {
       
    87 #ifdef HSPS_LOG_ACTIVE
       
    88     if( iLogBus )
       
    89         {
       
    90         iLogBus->LogText( _L( "ChspsRequestClient::ConstructL(): - connecting to hspsThemeServer .." ) );
       
    91         }
       
    92 #endif
       
    93     
       
    94     User::LeaveIfError( iSession.Connect() );
       
    95 
       
    96 #ifdef HSPS_LOG_ACTIVE
       
    97     if( iLogBus )
       
    98         {
       
    99         iLogBus->LogText( _L( "ChspsRequestClient::ConstructL(): - connected." ) );
       
   100         }
       
   101 #endif
       
   102     
       
   103     iODTValid = EFalse;
       
   104     iResult = ChspsResult::NewL();
       
   105     iReqNotifParams = ChspsRequestNotificationParams::NewL();
       
   106     }
       
   107 
       
   108 // -----------------------------------------------------------------------------
       
   109 // ChspsRequestClient::ChspsRequestClient()
       
   110 // C++ default constructor can NOT contain any code, that might leave.
       
   111 // -----------------------------------------------------------------------------
       
   112 ChspsRequestClient::ChspsRequestClient( MhspsClientRequestServiceObserver& aObserver)
       
   113     : CActive( EPriorityStandard ), iObserver( aObserver )
       
   114     {
       
   115     CActiveScheduler::Add( this );
       
   116     }
       
   117 
       
   118 // -----------------------------------------------------------------------------
       
   119 // ChspsRequestClient::~ChspsRequestClient()
       
   120 // Destructor.
       
   121 // -----------------------------------------------------------------------------
       
   122 //
       
   123 ChspsRequestClient::~ChspsRequestClient()
       
   124     {
       
   125     Cancel(); // Causes call to DoCancel()
       
   126     iSession.Close();
       
   127     delete iElement;
       
   128     delete iResult;
       
   129     delete iReqNotifParams;
       
   130     }
       
   131 
       
   132 // -----------------------------------------------------------------------------
       
   133 // ChspsRequestClient::hspsGetODT()
       
   134 // Sends a request to the server for getting ODT for application.
       
   135 // (other items were commented in a header).
       
   136 // -----------------------------------------------------------------------------
       
   137 //
       
   138 EXPORT_C ThspsServiceCompletedMessage ChspsRequestClient::hspsGetODT(TInt aAppUid, ChspsODT& aODT)
       
   139     {
       
   140     ThspsServiceCompletedMessage ret = EhspsGetODTFailed;
       
   141     
       
   142     iODTValid = EFalse;    
       
   143     
       
   144     // Cancel any possibly outstanding requests
       
   145    // hspsCancelGetODTUpdate();
       
   146 
       
   147    
       
   148     // Input validation
       
   149     if ( aAppUid > 0 )
       
   150     	{
       
   151         	        
       
   152 	    // Trying to find a theme configuration with the specified application uid,
       
   153 	    // active theme is not known yet (fetched from cenrep at server side)
       
   154 	    ThspsConfiguration configuration;
       
   155 	    configuration.rootUid = aAppUid;
       
   156 	    configuration.themeUid = 0;
       
   157 	    configuration.type = EhspsAppConfiguration;
       
   158 	    
       
   159 	    // Retrieve the application configuration	    
       
   160 	    TRAPD( err, CallGetOdtInFileL( configuration, aODT ) );
       
   161 	    if ( !err )
       
   162 	        {
       
   163 	        ret = EhspsGetODTSuccess;    
       
   164 	        }
       
   165     	}
       
   166            
       
   167     return ret;
       
   168     }
       
   169     
       
   170 // -----------------------------------------------------------------------------
       
   171 // ChspsRequestClient::hspsGetODTUpdate()
       
   172 // Sends a request to the server
       
   173 // (other items were commented in a header).
       
   174 // -----------------------------------------------------------------------------
       
   175 //
       
   176 EXPORT_C ThspsServiceCompletedMessage ChspsRequestClient::hspsGetODTUpdate()
       
   177     {
       
   178     ThspsServiceCompletedMessage ret = EhspsServiceRequestError;
       
   179     
       
   180     iResult->ResetData();
       
   181     iReqNotifParams->ResetData();
       
   182     
       
   183     if ( !IsActive() && iODTValid )
       
   184         {
       
   185         iStatus = KRequestPending;
       
   186         SetActive();          
       
   187                 
       
   188         
       
   189         iSession.GetODTUpdate( iResultData, iReqNotifData, iHeaderData,  iStatus );
       
   190         
       
   191 #ifdef _hsps_PERFORMANCE_TEST_
       
   192     ChspsTimeMon::PrintUserMem( _L("ChspsRequestClient::hspsGetODTUpdate(): - theme changes subscribed.") );
       
   193 #endif//_hsps_PERFORMANCE_TEST_
       
   194         ret = EhspsServiceRequestSheduled; 
       
   195         }
       
   196     else
       
   197     	{
       
   198 #ifdef HSPS_LOG_ACTIVE
       
   199     	if( iLogBus )
       
   200     	    {
       
   201     	    if ( iODTValid )
       
   202     	        {
       
   203                 iLogBus->LogText( _L( "ChspsRequestClient::hspsGetODTUpdate(): - error, theme is not valid." ) );
       
   204                 }
       
   205     	    else
       
   206     	        {
       
   207     	        iLogBus->LogText( _L( "ChspsRequestClient::hspsGetODTUpdate(): - error, allready subscribed." ) );
       
   208     	        }
       
   209     	    }
       
   210 #endif
       
   211 		ret = EhspsServiceRequestError; 
       
   212     	}
       
   213 
       
   214     return ret;
       
   215     } 
       
   216     
       
   217     
       
   218 // -----------------------------------------------------------------------------
       
   219 // ChspsRequestClient::hspsCancelGetODTUpdate()
       
   220 // Sends a cancel request to the server ...
       
   221 // (other items were commented in a header).
       
   222 // -----------------------------------------------------------------------------
       
   223 //
       
   224 
       
   225 EXPORT_C ThspsServiceCompletedMessage ChspsRequestClient::hspsCancelGetODTUpdate()
       
   226     {
       
   227     ThspsServiceCompletedMessage ret = EhspsServiceRequestCanceled; 
       
   228     iResult->ResetData();
       
   229     iReqNotifParams->ResetData();
       
   230     if ( IsActive() )
       
   231         {
       
   232         Cancel();
       
   233         
       
   234 #ifdef HSPS_LOG_ACTIVE
       
   235 	    if( iLogBus )
       
   236 	        {
       
   237 	        iLogBus->LogText( _L( "ChspsRequestClient::hspsCancelGetODTUpdate(): - subscription cancelled." ) );
       
   238 	        }
       
   239 #endif
       
   240         
       
   241         ret = EhspsServiceRequestCanceled;
       
   242         }
       
   243     return ret; 
       
   244     }   
       
   245 
       
   246 
       
   247 // -----------------------------------------------------------------------------
       
   248 // ChspsRequestClient::hspsAccessResourceFile()
       
   249 // Sends a request to the server to get access to a resource file
       
   250 // Access a private file in the hspsThemeServer private area
       
   251 // This function cooperates with the server to get a file handle
       
   252 // (other items were commented in a header).
       
   253 // -----------------------------------------------------------------------------
       
   254 //
       
   255 EXPORT_C ThspsServiceCompletedMessage ChspsRequestClient::hspsAccessResourceFile( 
       
   256 		const TDesC& aResourceFileName, 
       
   257 		const ThspsConfiguration& aConfiguration, 
       
   258 		RFile& aFile )
       
   259     {                    
       
   260 #ifdef HSPS_LOG_ACTIVE
       
   261     if( iLogBus )
       
   262         {
       
   263         iLogBus->LogText( 
       
   264             _L( "ChspsRequestClient::hspsAccessResourceFile(): - %S." ),
       
   265             &aResourceFileName 
       
   266             );
       
   267         }
       
   268 #endif   
       
   269     
       
   270     // Get the file handle and fileserver handle for the file we want from the server
       
   271     TInt fileSubSessionHandle;
       
   272     TInt fileServerHandle = iSession.AccessResourceFile( 
       
   273     		iResultData, 
       
   274     		aConfiguration, 
       
   275     		aResourceFileName, 
       
   276     		fileSubSessionHandle);
       
   277                             
       
   278     // If we got valid handles
       
   279     TInt errorCode = KErrNotFound;
       
   280     if ( fileServerHandle > 0 && fileSubSessionHandle > 0 )
       
   281         {
       
   282         // Adopt the file
       
   283         errorCode = aFile.AdoptFromServer( fileServerHandle, fileSubSessionHandle );
       
   284         }            
       
   285     
       
   286     ThspsServiceCompletedMessage ret = EhspsServiceRequestError;
       
   287     if ( !errorCode )
       
   288         {
       
   289         // Success
       
   290         UpdatehspsResult();
       
   291         ret = EhspsAccessResourceFileSuccess;
       
   292         }
       
   293     else
       
   294         {         
       
   295         // Failure        
       
   296         iResult->iSystemError = errorCode;
       
   297         iResult->iXuikonError = errorCode;
       
   298         }
       
   299     
       
   300     return ret;
       
   301     } 
       
   302      
       
   303 // -----------------------------------------------------------------------------
       
   304 // ChspsRequestClient::GethspsResultL
       
   305 // Fetch latest result data on service request return.
       
   306 // (other items were commented in a header).
       
   307 // -----------------------------------------------------------------------------
       
   308 //
       
   309 EXPORT_C void ChspsRequestClient::GethspsResult(ChspsResult& aResult)
       
   310     {
       
   311     aResult.iSystemError = iResult->iSystemError; 
       
   312     aResult.iXuikonError = iResult->iXuikonError; 
       
   313     aResult.iIntValue1 = iResult->iIntValue1;
       
   314     aResult.iIntValue2 = iResult->iIntValue2;  
       
   315     }  
       
   316              
       
   317 // -----------------------------------------------------------------------------
       
   318 // ChspsRequestClient::SetLogBus
       
   319 // Set log bus.
       
   320 // -----------------------------------------------------------------------------
       
   321 #ifdef HSPS_LOG_ACTIVE
       
   322 EXPORT_C void ChspsRequestClient::SetLogBus( void* aLogBus )
       
   323     {
       
   324     iLogBus = (ChspsLogBus*)aLogBus;
       
   325     }
       
   326 #else
       
   327 EXPORT_C void ChspsRequestClient::SetLogBus( void* /*aLogBus*/ )
       
   328     {
       
   329     }
       
   330 #endif
       
   331 
       
   332 // -----------------------------------------------------------------------------
       
   333 // ChspsRequestClient::UpdatehspsResultL
       
   334 // Constructs hspsResult-object from return data.
       
   335 // (other items were commented in a header).
       
   336 // -----------------------------------------------------------------------------
       
   337 //
       
   338 void ChspsRequestClient::UpdatehspsResult()
       
   339     {
       
   340     TInt errorCode = KErrNone;
       
   341     if ( iResultData.Length() )
       
   342     	{
       
   343 	    RDesReadStream readBuf( iResultData );
       
   344 	    TRAP( errorCode, iResult->InternalizeL( readBuf ) );
       
   345 	    readBuf.Close();
       
   346 	    if ( errorCode )
       
   347 	    	{
       
   348 	    	iResult->ResetData();
       
   349 	    	}
       
   350     	}
       
   351     else
       
   352     	{
       
   353     	iResult->ResetData();
       
   354     	}
       
   355     }  
       
   356 
       
   357 // -----------------------------------------------------------------------------
       
   358 // ChspsRequestClient::UpdatehspsResultL
       
   359 // Constructs hspsResult-object from return data.
       
   360 // (other items were commented in a header).
       
   361 // -----------------------------------------------------------------------------
       
   362 //
       
   363 void ChspsRequestClient::UpdatehspsReqNotifParams()
       
   364     {
       
   365     TInt errorCode = KErrNone;
       
   366     if ( iReqNotifData.Length() )
       
   367     	{
       
   368 	    RDesReadStream readBuf(iReqNotifData);
       
   369 	    TRAP (errorCode, iReqNotifParams->InternalizeL(readBuf));
       
   370 	    readBuf.Close();
       
   371 	    if ( errorCode )
       
   372 	    	{
       
   373 	    	iReqNotifParams->ResetData();
       
   374 	    	}
       
   375     	}
       
   376     else
       
   377     	{
       
   378     	iReqNotifParams->ResetData();
       
   379     	}
       
   380     }  
       
   381 
       
   382 // -----------------------------------------------------------------------------
       
   383 // ChspsRequestClient::CallGetOdtInFileL()
       
   384 // -----------------------------------------------------------------------------
       
   385 //
       
   386 void ChspsRequestClient::CallGetOdtInFileL( 		
       
   387 		const ThspsConfiguration& aConfiguration, 
       
   388 		ChspsODT& aODT )
       
   389     {
       
   390     iODT = &aODT;         
       
   391     HBufC8* requestData = aODT.MarshalHeaderL();
       
   392     CleanupStack::PushL(requestData);
       
   393         
       
   394     TFileName odtPath;
       
   395     ThspsServiceCompletedMessage ret = (ThspsServiceCompletedMessage) iSession.GetODT( 
       
   396     			iResultData, 
       
   397     			aConfiguration, 
       
   398     			requestData->Des(), 
       
   399     			odtPath );    
       
   400     
       
   401     CleanupStack::Pop(requestData); 
       
   402     delete requestData;
       
   403     
       
   404     if ( ret != EhspsGetODTSuccess )
       
   405         {
       
   406         User::Leave( EhspsGetODTFailed );
       
   407         }
       
   408     
       
   409     // Constructs or resets iResult -object from iResultData data
       
   410     UpdatehspsResult();
       
   411     
       
   412     iODTValid = ETrue;
       
   413     
       
   414     // Get a handle to the file object
       
   415     RFile odtfile;
       
   416     ret = hspsAccessResourceFile( odtPath, aConfiguration, odtfile );
       
   417     if ( ret != EhspsAccessResourceFileSuccess )
       
   418         {
       
   419         User::Leave( EhspsAccessResourceFileFailed );
       
   420         }        
       
   421     CleanupClosePushL( odtfile );
       
   422     
       
   423     // set stream on file
       
   424     CFileStore* store = CDirectFileStore::FromLC( odtfile );
       
   425     RStoreReadStream instream;
       
   426     CleanupClosePushL( instream );
       
   427 
       
   428     // stream in the ODT
       
   429 	instream.OpenLC( *store, store->Root() );	
       
   430 	instream >> aODT;
       
   431     
       
   432     CleanupStack::PopAndDestroy( 2, &instream ); // stream object and instream
       
   433 	CleanupStack::PopAndDestroy( 2, &odtfile ); // store, odtfile     
       
   434       
       
   435     // copy resources if found
       
   436 	if( aODT.ResourceCount() )
       
   437 		{        		
       
   438 		/* c:\\private\\"application uid"\\resources\\ */
       
   439 		TPath destinationPath( KPrivateFolderPrefix );
       
   440 		destinationPath.AppendNum( aODT.RootUid(), EHex ); 	// application uid
       
   441 		destinationPath.Append( KDoubleBackSlash );
       
   442 
       
   443 		// Copy resource files        		 
       
   444 		ret = (ThspsServiceCompletedMessage)iSession.CopyResourceFiles( 
       
   445 		             iResultData, 
       
   446 		             odtPath, 
       
   447 		             destinationPath );
       
   448 		if( ret != EhspsResourceCopySuccess )
       
   449 			{
       
   450 			User::Leave( EhspsResourceCopyFailed );
       
   451 			}
       
   452 		}        
       
   453     }
       
   454  
       
   455 // -----------------------------------------------------------------------------
       
   456 // ChspsRequestClient::RunError
       
   457 // From CActive. Called when error occurred in asynchronous request
       
   458 // Notifies the observer
       
   459 // (other items were commented in a header).
       
   460 // -----------------------------------------------------------------------------
       
   461 //
       
   462 TInt ChspsRequestClient::RunError( TInt aError )
       
   463     {
       
   464     iResult->iSystemError = aError;
       
   465     iResult->iXuikonError = aError;
       
   466     TRAPD( err, iObserver.HandlehspsRequestClientMessageL( EhspsServiceRequestError, *iReqNotifParams) ) ;
       
   467     return err;
       
   468     }
       
   469 
       
   470 // -----------------------------------------------------------------------------
       
   471 // ChspsRequestClient::RunL()
       
   472 // Invoked to handle responses from the server.
       
   473 // -----------------------------------------------------------------------------
       
   474 //
       
   475 void ChspsRequestClient::RunL()
       
   476     {
       
   477     switch ( iStatus.Int() )
       
   478         {
       
   479         case EhspsGetODTUpdateSuccess:
       
   480         	{
       
   481             // server informs that the update process has completed successfully
       
   482             UpdatehspsResult();
       
   483             UpdatehspsReqNotifParams();
       
   484             // inform observer
       
   485             iObserver.HandlehspsRequestClientMessageL(EhspsGetODTUpdateSuccess, *iReqNotifParams);
       
   486         	}
       
   487             break;   
       
   488             
       
   489         case EhspsGetODTUpdateFailed:
       
   490         	{
       
   491             // server informs that the update process has failed
       
   492             UpdatehspsResult();
       
   493             UpdatehspsReqNotifParams();
       
   494             // inform observer
       
   495             iObserver.HandlehspsRequestClientMessageL(EhspsGetODTUpdateFailed, *iReqNotifParams);
       
   496         	}
       
   497             break;        
       
   498              
       
   499         case EhspsGetODTUpdateStatus:
       
   500         	{
       
   501             // server ask to reload the theme, possible activation lost or other change in status
       
   502 #ifdef HSPS_LOG_ACTIVE
       
   503             if( iLogBus )
       
   504                 {
       
   505                 iLogBus->LogText( _L( "ChspsRequestClient::RunL(): - EhspsGetODTUpdateStatus received." ) );
       
   506                 }
       
   507 #endif
       
   508             
       
   509             UpdatehspsResult();
       
   510             UpdatehspsReqNotifParams();
       
   511             // inform observer
       
   512             iObserver.HandlehspsRequestClientMessageL(EhspsGetODTUpdateStatus, *iReqNotifParams);
       
   513         	}
       
   514             break;   
       
   515             
       
   516         case EhspsGetODTUpdateHot:
       
   517         case EhspsSetActivePluginSuccess:
       
   518         	{
       
   519             // hot update, new theme available on server, reload
       
   520 #ifdef HSPS_LOG_ACTIVE
       
   521             if( iLogBus )
       
   522                 {
       
   523                 iLogBus->LogText( _L( "ChspsRequestClient::RunL(): - EhspsGetODTUpdateHot received." ) );
       
   524                 }
       
   525 #endif
       
   526             
       
   527             UpdatehspsResult();
       
   528             UpdatehspsReqNotifParams();
       
   529             // inform observer
       
   530             iObserver.HandlehspsRequestClientMessageL(EhspsGetODTUpdateHot, *iReqNotifParams);
       
   531         	}
       
   532             break;   
       
   533 
       
   534         case EhspsGetODTUpdateEmpty:
       
   535         	{
       
   536         	UpdatehspsResult();
       
   537         	UpdatehspsReqNotifParams();
       
   538         	// no update available
       
   539             iObserver.HandlehspsRequestClientMessageL(EhspsGetODTUpdateEmpty, *iReqNotifParams);
       
   540         	}
       
   541             break ;
       
   542             
       
   543         case EhspsServiceRequestCanceled:
       
   544             // the request was canceled
       
   545             // flow through
       
   546         case EhspsServiceNotSupported:
       
   547         	{
       
   548             // the request was not supported
       
   549             UpdatehspsResult();
       
   550             UpdatehspsReqNotifParams();
       
   551             iObserver.HandlehspsRequestClientMessageL(EhspsServiceRequestCanceled, *iReqNotifParams);
       
   552         	}
       
   553             break;        
       
   554         case EhspsSettingsUpdated:
       
   555         	{
       
   556             // server informs that the update process has completed successfully
       
   557             UpdatehspsResult();
       
   558             UpdatehspsReqNotifParams();
       
   559             // inform observer
       
   560             iObserver.HandlehspsRequestClientMessageL(EhspsSettingsUpdated, *iReqNotifParams);
       
   561         	}
       
   562             break;
       
   563         case EhspsSetPluginSettingsSuccess:    
       
   564         case EhspsAddPluginSuccess:
       
   565         case EhspsReplacePluginSuccess:
       
   566         case EhspsRemovePluginSuccess:
       
   567             {
       
   568             // server informs that the update process has completed successfully
       
   569             UpdatehspsResult();
       
   570             UpdatehspsReqNotifParams();
       
   571             // inform observer
       
   572             iObserver.HandlehspsRequestClientMessageL(EhspsGetODTUpdateHot, *iReqNotifParams);
       
   573             }
       
   574             break;
       
   575         default:
       
   576         	{
       
   577             UpdatehspsResult();
       
   578             UpdatehspsReqNotifParams();
       
   579             iObserver.HandlehspsRequestClientMessageL(EhspsServiceRequestError, *iReqNotifParams);
       
   580         	}
       
   581         }
       
   582     }
       
   583 
       
   584 
       
   585 // -----------------------------------------------------------------------------
       
   586 // ChspsRequestClient::DoCancel()
       
   587 // Cancels any outstanding operation.
       
   588 // -----------------------------------------------------------------------------
       
   589 //
       
   590 void ChspsRequestClient::DoCancel()
       
   591     {
       
   592     // rootUid (application or interface uid) is not used at the server side, thus passed as zero
       
   593     const TInt rootUid = 0;
       
   594     iSession.CancelRequest( (TInt) EhspsCancelGetODTUpdate, iResultData, rootUid );
       
   595     iResult->ResetData();
       
   596     iReqNotifParams->ResetData();
       
   597     }
       
   598     
       
   599 // End of File