mtpfws/mtpfw/dataproviders/dputility/inc/cmtpsvccompoundprocessor.h
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mtpfws/mtpfw/dataproviders/dputility/inc/cmtpsvccompoundprocessor.h	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,135 @@
+// 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 "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:
+// mw/remoteconn/mtpfws/mtpfw/dataproviders/dputility/inc/cmtpsvccompoundprocessor.h
+
+
+/**
+ @file
+ @internalComponent
+ */
+
+#ifndef __CMTPSVCCOMPOUNDPROCESSOR_H__
+#define __CMTPSVCCOMPOUNDPROCESSOR_H__
+
+#include "cmtprequestprocessor.h"
+
+class MMTPServiceDataProvider;
+class MMTPSvcObjectHandler;
+class CMTPTypeObjectInfo;
+class CMTPTypeObjectPropList;
+class CMTPObjectMetaData;
+
+/** 
+Implements the service data provider's CMTPCompoundProcessor request processor.
+The processor is responsible for SendObjectInfo, SendObjectPropList, UpdateObjectPropList 
+and SendObject requests handling, it will create new object or update existing object. 
+@internalComponent
+*/
+class CMTPSvcCompoundProcessor : public CMTPRequestProcessor
+	{
+public:
+	IMPORT_C static MMTPRequestProcessor* NewL(MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMTPServiceDataProvider& aDataProvider);    
+	IMPORT_C ~CMTPSvcCompoundProcessor();
+
+private:
+	CMTPSvcCompoundProcessor(MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMTPServiceDataProvider& aDataProvider);
+	void ConstructL();
+
+	// From CMTPRequestProcessor
+	TBool Match(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) const;
+	TBool HasDataphase() const;
+	
+	TMTPResponseCode CheckRequestL();
+	TMTPResponseCode CheckSendingStateL();
+	TMTPResponseCode CheckRequestParametersL();
+	TMTPResponseCode CheckStoreAndParent();
+	
+	void ServiceL();
+	void ServiceObjectPropertiesL();
+	void ServiceSendObjectInfoL();
+	void ServiceSendObjectPropListL();
+	void ServiceSendObjectL();
+	
+	TBool DoHandleCompletingPhaseL();
+	TBool DoHandleResponsePhaseL();
+	TBool DoHandleResponseSendObjectInfoL();
+	TBool DoHandleResponseSendObjectPropListL();
+	TBool DoHandleResponseUpdateObjectPropListL();
+	TBool DoHandleResponseSendObjectL();
+	
+	/**
+	Extract objectsize property value from UpdateObjectPropList dataset
+	@return See MTP response code definition
+	*/
+	TMTPResponseCode ExtractObjectSizeL();
+	/**
+	Reserve object handle from framework for SendObjectInfo or SendObjectPropList
+	*/
+	void ReserveObjectL();
+	/**
+	Register route next SendObject from framework and send response code
+	*/
+	void RegisterRequestAndSendResponseL(TMTPResponseCode aResponseCode);
+	
+	// Cleanup Item operation for commit rollback including handle and temp object rollback
+	static void RollBackObject(TAny* aObject);
+	void RollBack();
+	
+	// Check object format and set object handler pointer
+	TMTPResponseCode CheckFmtAndSetHandler(TUint32 aFormatCode);
+	TMTPResponseCode SendObjectPropListL(const CMTPTypeObjectPropList& aObjectPropList, TUint32& aParentHandle, 
+															TUint32& aParameter, TDes& aSuid, TUint64 aObjectSize);
+	TMTPResponseCode UpdateObjectPropListL(CMTPObjectMetaData& aObjectMetaData, 
+															const CMTPTypeObjectPropList& aObjectPropList, 
+															TUint32& aParameter);
+
+private:
+	enum TMTPSendingObjectState
+		{
+		EIdle,
+		EObjectInfoProcessing,
+		EObjectInfoSucceed,
+		EObjectSendProcessing,
+		EObjectSendSucceed,
+		EObjectSendFail
+		};
+
+	TUint16                      iOperationCode;   // Current operation code
+	TUint16                      iLastInfoOperationCode;   // Last info category operation code
+	TUint32                      iFormatCode;
+	TUint32                      iStorageId;
+	TUint32                      iParentHandle;
+	TUint64                      iObjectSize;
+	
+	MMTPServiceDataProvider&     iDataProvider;
+	MMTPSvcObjectHandler*        iObjectHandler; // Not own
+	MMTPType*                    iObjectContent; // Not own
+	CMTPTypeObjectInfo*          iObjectInfo;
+	CMTPTypeObjectPropList*      iObjectPropList;
+	CMTPObjectMetaData*          iReceivedObjectMetaData;
+
+	TMTPSendingObjectState       iState; // Compound processor state machine
+	TMTPTypeRequest              iExpectedSendObjectRequest; // Use for register next SendObject
+	TUint32                      iLastTransactionID; // Last valid transaction id
+	TUint32                      iLastSessionID; // Last valid session id
+	TBool                        iIsCommited; // Is received ObjectInfo or ObjectPropList commited
+	TBool                        iIsRollBackHandlerObject; // Roll back handle which has been insert in handler db
+	/**
+	FLOGGER debug trace member variable.
+	*/
+	__FLOG_DECLARATION_MEMBER_MUTABLE;
+	};
+
+#endif // __CMTPSVCCOMPOUNDPROCESSOR_H__
+