diff -r 5cc91383ab1e -r 7333d7932ef7 installationservices/swinstallationfw/inc/siftransporttask.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/installationservices/swinstallationfw/inc/siftransporttask.h Tue Aug 31 15:21:33 2010 +0300 @@ -0,0 +1,161 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* The file defines a base class for SIF Transport tasks and a factory function for them. +* +*/ + + +/** + @file + @publishedAll + @released +*/ + +#ifndef SIFTRANSPORTTASK_H +#define SIFTRANSPORTTASK_H + +#include +#include + +namespace Usif + { + + /** An auxiliary data structure for passing task's parameters across the SIF Transport library. */ + struct TTransportTaskParams + { + IMPORT_C TTransportTaskParams(); + CComponentInfo* iComponentInfo; + TComponentId iComponentId; + const TDesC* iFileName; + RFile* iFileHandle; + const COpaqueNamedParams* iCustomArguments; + COpaqueNamedParams* iCustomResults; + const TSecurityContext* iSecurityContext; + TRequestStatus* iRequestStatus; + enum { EInvalidComponentId = -1 }; + }; + +// =========================================================================================================== + + /** + The core class of the SIF Transport library. + + It defines an abstract interface for SIF Transport tasks. These tasks are instantiated + and executed to handle processing of incoming software management requests. + + Each Transport task is executed in the context of the active object. If a task issues + a request to an asynchronous service provider, it should use a @see TRequestStatus + object provided in @see TTransportTaskParams. Otherwise, tasks that don't issue + asynchronous requests must complete this request status themselves before they leave + the @see CSifTransportTask::ExecuteImplL method. In order to simplify tasks that don't + deal with asynchronous service providers the AutoCompletion mode has been implementd. In this + mode the request status is completed automatically by the base class. The AutoCompletion + mode is enabled by default and should be disabled in constructors of tasks that issue + asynchronous requests. + + An implementation of the Transport Task Factory defined below is responsible for + instantiating Transport tasks. + */ + class CSifTransportTask : public CBase + { + protected: + /** + Constructs the object. + + @param aParams Parameters needed to execute the task. Please + see @see TTransportTaskParams for details. + @param aAutoCompletion Enables the AutoCompletion mode. + */ + IMPORT_C CSifTransportTask(TTransportTaskParams& aParams, TBool aAutoCompletion = ETrue); + + /** Destroys the object. */ + IMPORT_C virtual ~CSifTransportTask(); + + /** + Implementation of this abstract method is supposed to process an incoming software + management request. + + If this method leaves with any error code the execution of the task terminates + immediately. The leave code is passed to the user as a request completion code. + + @return TBool, ETrue it the processing of a software management request has been + completed and the task can be cleaned up, EFalse if the method must be called again + for further processing. + */ + IMPORT_C virtual TBool ExecuteImplL() = 0; + + /** + Cancels the execution of an asynchronous task. + + The default implementation is empty. Tasks that issue requests to asynchronous + service providers must implement this method in order to cancel them. + */ + IMPORT_C virtual void CancelImpl(); + + /** Gets the id of a component */ + IMPORT_C TComponentId ComponentId() const; + /** Gets the file name of a package */ + IMPORT_C const TDesC* FileName() const; + /** Gets the file handle of a package */ + IMPORT_C RFile* FileHandle(); + /** Gets custom arguments */ + IMPORT_C const COpaqueNamedParams* CustomArguments() const; + /** Gets custom results */ + IMPORT_C COpaqueNamedParams* CustomResults(); + /** Gets security context */ + IMPORT_C const TSecurityContext* SecurityContext() const; + /** Gets request status associated with the task */ + IMPORT_C TRequestStatus* RequestStatus(); + /** Gets component info */ + IMPORT_C CComponentInfo* ComponentInfo(); + + private: + // These methods are used only by the CSifTransportRequest class to execute and cancel SIF Transport tasks + friend class CSifTransportRequest; + TBool Execute(); + void Cancel(); + + private: + CSifTransportTask(const CSifTransportTask&); + CSifTransportTask& operator=(const CSifTransportTask&); + + TTransportTaskParams& iParams; + TBool iAutoCompletion; + }; + +// =========================================================================================================== + + /** + Definition of a factory function for the SIF Transport library. The @see SifTransportRequest class uses implementations + of this function to instantiate and execute appropriate SIF Transport tasks. It happens in response to incoming software + management requests. + */ + namespace TransportTaskFactory + { + enum TTaskType + { + EGetComponentInfo, + EInstall, + EUninstall, + EActivate, + EDeactivate + }; + + typedef CSifTransportTask* (*GenerateTask)(TTaskType aTaskType, TTransportTaskParams& aParams); + } + + } // namespace Usif + +#endif // SIFTRANSPORTTASK_H