mmfenh/progressivedownload/ProgressiveDownloadSource/src/MmffilePriv.h
changeset 0 71ca22bcf22a
--- /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 <f32file.h>
+
+#include <mmf/server/mmfclip.h>
+#include <mmf/server/mmfdatabuffer.h>
+
+
+/**
+ *  @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
+