diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncddownloadoperationimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncddownloadoperationimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + + +#ifndef C_NCDDOWNLOADOPERATION_H +#define C_NCDDOWNLOADOPERATION_H + +#include "ncdbaseoperation.h" +#include "ncdoperationdatatypes.h" +#include "ncddownloadoperationstates.h" +#include "catalogshttptypes.h" +#include "catalogshttpobserver.h" + +class MCatalogsHttpSession; +class MCatalogsHttpConfig; +class MCatalogsHttpOperation; +class CNcdNodeManager; +class MNcdDownloadHandler; +class MNcdFileHandler; +class MNcdStorageClient; +class CNcdNodeIdentifier; +class MNcdSessionHandler; +class MNcdConfigurationManager; +class MCatalogsContext; +class MCatalogsAccessPointManager; +class MNcdOperationRemoveHandler; +class CNcdGeneralManager; + +/** + * Download operation + * + * @ Add username & password -handling + * @ Add observers if this is used by other operations + */ +class CNcdDownloadOperation : public CNcdBaseOperation, + public MCatalogsHttpObserver + { +public: + + /** + * NewL + * + * @param aHttpSession HTTP session used for creating download operations + * + * @note Preferably the HTTP session has suitable defaults but if not then + * Config() can be used to retrieve and change the settings for the download. + * @note At least the target directory and access point must be set to the + * configuration. + */ + static CNcdDownloadOperation* NewL( + MNcdOperationRemoveHandler& aRemoveHandler, + TNcdDownloadDataType aType, + const CNcdNodeIdentifier& aNodeId, + CNcdGeneralManager& aGeneralManager, + MCatalogsHttpSession& aHttpSession, + MNcdSessionHandler* aSessionHandler, + MNcdStorageClient* aStorageClient, + const TUid& aClientUid, + TInt aDownloadIndex, + MCatalogsSession& aSession ); + + + /** + * Destructor + */ + ~CNcdDownloadOperation(); + +public: // New methods + + /** + * HTTP configuration getter + */ + MCatalogsHttpConfig& Config(); + + /** + * Returns the identifier of the node that this operation relates to. + * + * @return Node identifier. + */ + const CNcdNodeIdentifier& NodeIdentifier() const; + + +public: // From CNcdBaseOperation + + /** + * @see CNcdBaseOperation::Cancel() + */ + void Cancel(); + + + /** + * @see CNcdBaseOperation::ReceiveMessage() + */ + void ReceiveMessage( + MCatalogsBaseMessage* aMessage, + TInt aFunctionNumber ); + + +public: // New methods + + TBool MatchDownload( const CNcdNodeIdentifier& aId, + TNcdDownloadDataType& aType, TInt aIndex ) const; + + +public: // From MCatalogsHttpObserver + + /** + * @see MCatalogsHttpObserver::HandleHttpEventL() + */ + void HandleHttpEventL( + MCatalogsHttpOperation& aOperation, + TCatalogsHttpEvent aEvent ); + + /** + * @see MCatalogsHttpObserver::HandleHttpError() + */ + TBool HandleHttpError( + MCatalogsHttpOperation& aOperation, + TCatalogsHttpError aError ); + +protected: // From CNcdBaseOperation + + /** + * @see CNcdBaseOperation::RunOperation() + */ + TInt RunOperation(); + + + /** + * @see CNcdBaseOperation::Initialize() + */ + TInt Initialize(); + +protected: + + // Constructor + CNcdDownloadOperation( + MNcdOperationRemoveHandler& aRemoveHandler, + CNcdGeneralManager& aGeneralManager, + MCatalogsHttpSession& aHttpSession, + MNcdSessionHandler* aSessionHandler, + TNcdDownloadDataType aType, + const TUid& aClientUid, + MCatalogsSession& aSession ); + + void ConstructL( const CNcdNodeIdentifier& aNodeId, + TInt aDownloadIndex, + MNcdStorageClient* aStorageClient = NULL ); + +protected: + + // Update the download request headers + void UpdateHeadersL( const MCatalogsContext& aContext ); + + void GetPausableStateL( MCatalogsBaseMessage& aMessage ); + +private: + + MCatalogsHttpSession& iHttpSession; + MNcdSessionHandler* iSessionHandler; + MNcdConfigurationManager& iConfigurationManager; + MCatalogsAccessPointManager& iAccessPointManager; + TNcdDownloadDataType iType; + MCatalogsHttpOperation* iDownload; + MNcdDownloadHandler* iDownloadHandler; + MNcdFileHandler* iFileHandler; + TNcdDownloadState iDownloadState; + HBufC* iSessionId; + TUid iClientUid; + TBool iUnhandledEvent; + TInt iTotalFileCount; + TInt iCurrentFile; + }; + +#endif // C_NCDDOWNLOADOPERATION_H