diff -r 000000000000 -r 71ca22bcf22a mmfenh/progressivedownload/ProgressiveDownloadSource/src/MmffilePriv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmfenh/progressivedownload/ProgressiveDownloadSource/src/MmffilePriv.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,188 @@ +/* +* Copyright (c) 2004 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: Progressive Download Utility +* +*/ + + +#ifndef __MMFFILEPRIV_H_ +#define __MMFFILEPRIV_H_ + +#include + +#include +#include + + +/** + * @publishedAll + * + * Represents a copy of a KUidMmfTransferBuffer used for reading/writting to the file server + */ + +class CTransferBufferCopy : public CBase + { +public: + static CTransferBufferCopy* NewL(TInt aMaxLength); + + virtual ~CTransferBufferCopy() + {delete iBuffer;} + + + TDes8& Des() {return iBufferDes;} + + TInt MaxLength() {return iBufferDes.MaxLength();} + + void ReUse(TInt aMaxLength) {iBufferDes.Set(iBuffer,0, Min(aMaxLength, iMaxLength));} + + TBool InUse() {return iInUse;} + + void SetInUse(TBool aInUse) {iInUse=aInUse;} + +private: + CTransferBufferCopy(TInt aMaxLength) : CBase(), iMaxLength(aMaxLength), iBufferDes(0,0,0), iInUse(EFalse){} + + void ConstructL(); + +private: + TUint8* iBuffer; + + //Holds the original MaxLength when class constructed. + //May be larger than MaxLength of iBufferDes + TInt iMaxLength; + + TPtr8 iBufferDes; + + TBool iInUse; + }; + + + + +/** + * @internalComponent + * + * A request is created when an external object requests or supplies data. Calls to the File Server are + * made asynchronously and a CReadWriteRequest created to notify the caller on completion. + * + * CReadWriteRequest is an abstract class. Concrete instances are of CReadRequest & CWriteRequest. + * Concrete instances need to know whether to call MDataSink::BufferFilledL() or MDataSource::BufferEmptiedL() + */ +class CReadWriteRequest : public CActive + { +public: + CReadWriteRequest(TAny* aSinkOrSource, CMMFBuffer* aBuffer,MAsyncEventHandler* aEventHandler) + : CActive(EPriorityStandard), + iSinkOrSource(aSinkOrSource), + iBuffer(aBuffer), + iEventHandler(aEventHandler) + { + CActiveScheduler::Add( this ); + } + + CReadWriteRequest(TAny* aSinkOrSource, CMMFBuffer* aBuffer, CTransferBufferCopy* aOptionalDataBuffer, MAsyncEventHandler* aEventHandler) + : CActive(EPriorityStandard), + iSinkOrSource(aSinkOrSource), + iBuffer(aBuffer), + iTransferBufferCopy(aOptionalDataBuffer), + iEventHandler(aEventHandler) + { + CActiveScheduler::Add( this ); + iTransferBufferCopy->SetInUse(ETrue); + } + + CReadWriteRequest(CReadWriteRequest& aRequest) + : CActive(EPriorityStandard), + iSinkOrSource(aRequest.iSinkOrSource), + iBuffer(aRequest.iBuffer), + iTransferBufferCopy(aRequest.iTransferBufferCopy), + iEventHandler(aRequest.iEventHandler) + { + CActiveScheduler::Add( this ); + iTransferBufferCopy->SetInUse(ETrue); + } + + + TBool Completed() ; + TDes8& BufferDes() ; + const TDesC8& BufferDesC() ; + + ~CReadWriteRequest() ; + + + // CActive functions. + // + void SetActive() ; + void DoCancel() ; + virtual void RunL() = 0 ; + virtual TInt RunError( TInt aError ) ; + + +protected : + TAny* iSinkOrSource; + CMMFBuffer* iBuffer; + CTransferBufferCopy* iTransferBufferCopy; + + MAsyncEventHandler* iEventHandler; + TBool iCompleted ; + TDes8* iBufferDes ; + TInt iError ; + TBool iUseTransferBuffer ; + void SetTransferBuffer (TBool aTBuffer) ; + TBool CanUseTransferBuffer () ; + } ; + +/** + * @internalComponent + */ +class CReadRequest : public CReadWriteRequest + { +public : + CReadRequest(TAny* aSinkOrSource, CMMFBuffer* aBuffer, TUint aPosition, TUint aFileSize, TInt aBytesDownloaded,MAsyncEventHandler* aEventHandler) + : CReadWriteRequest(aSinkOrSource, aBuffer, aEventHandler), + iPosition(aPosition), iFileSize(aFileSize),iBytesDownloaded(aBytesDownloaded) + { } + + CReadRequest(TAny* aSinkOrSource, CMMFBuffer* aBuffer, CTransferBufferCopy* aOptionalDataBuffer, TUint aPosition, TUint aFileSize,TInt aBytesDownloaded, MAsyncEventHandler* aEventHandler) + : CReadWriteRequest(aSinkOrSource, aBuffer, aOptionalDataBuffer,aEventHandler), + iPosition(aPosition), iFileSize(aFileSize),iBytesDownloaded(aBytesDownloaded) + { } + + void RunL(); +private: + TUint iPosition; + TUint iFileSize; + TInt iBytesDownloaded; + }; + +/** + * @internalComponent + */ +class CWriteRequest : public CReadWriteRequest + { +public : + CWriteRequest(TAny* aSinkOrSource, CMMFBuffer* aBuffer, MAsyncEventHandler* aEventHandler) + : CReadWriteRequest(aSinkOrSource, aBuffer, aEventHandler) + { } + + CWriteRequest(TAny* aSinkOrSource, CMMFBuffer* aBuffer, CTransferBufferCopy* aOptionalDataBuffer, MAsyncEventHandler* aEventHandler) + : CReadWriteRequest(aSinkOrSource, aBuffer, aOptionalDataBuffer, aEventHandler) + { } + + void RunL(); + }; + + +#endif +