mtpfws/mtpfw/dataproviders/dputility/inc/cmtprequestchecker.h
changeset 0 d0791faffa3f
child 4 60a94a45d437
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mtpfws/mtpfw/dataproviders/dputility/inc/cmtprequestchecker.h	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,154 @@
+// Copyright (c) 2006-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:
+// cmtpequestchecker.h
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef __CMTPREQUESTCHECKER_H__
+#define __CMTPREQUESTCHECKER_H__
+
+#include <e32base.h>
+#include <mtp/mtpprotocolconstants.h>
+#include <mtp/tmtptyperequest.h>
+#include "mtpdebug.h"
+
+class CMTPObjectMetaData;
+class MMTPDataProviderFramework;
+class MMTPConnection;
+
+/**
+element type in the request
+@internalTechnology
+*/        
+enum TMTPElementType
+    {
+    /**
+    Session ID type
+    */
+    EMTPElementTypeSessionID,			
+    
+    /**
+    Object Handle type
+    */    
+    EMTPElementTypeObjectHandle,		
+    
+    /**
+    Format code type	
+    */    
+    EMTPElementTypeFormatCode,			
+    
+    /**
+    Storeage Id type
+    */    
+    EMTPElementTypeStorageId,			
+    }; 
+
+/**
+element attribute to check in the reqeust
+@internalTechnology
+*/
+enum TMTPElementAttr
+	{
+	/**
+	no attribute to check
+	*/
+	EMTPElementAttrNone		=  	0x0000,		
+	
+	/**
+	the object/storage should be readable
+	*/
+	EMTPElementAttrRead		=	0x0001,	
+	
+	/**
+	the object/storage should be writable
+	*/		
+	EMTPElementAttrWrite	=	0x0002,		
+	
+	/**
+	the object should be a file
+	*/
+	EMTPElementAttrFile 	= 	0x0004,		
+	
+	/**
+	the object should be a directory
+	*/
+	EMTPElementAttrDir		=	0x0008,	
+	
+	/**
+	supported format array
+	*/	
+	EMTPElementAttrFormatEnums = 0x0010,
+	
+	/**
+	The object can be either a file or directory.
+	*/
+	EMTPElementAttrFileOrDir = 0x0020,
+	};
+
+/**
+defines the verification data structure
+@internalTechnology
+*/
+struct TMTPRequestElementInfo
+    {
+    TMTPTypeRequest::TElements  iElementIndex;		//which element in the request to check
+    TMTPElementType 		    iElementType;		//the type of the element
+    TInt 				        iElementAttr;		//the attribute of the element
+    TInt 					    iCount;				//number of special values (0, 1, 2)
+    TUint32 				    iValue1;			//special value 1
+    TUint32 					iValue2;			//special value 2
+    }; 
+
+/**
+defines a generic request verification class.  It iterates through the verification data elements,
+and performs the check based on the element type/attribute.
+@internalTechnology
+*/    
+class CMTPRequestChecker : public CBase 
+    {
+public:
+	IMPORT_C static CMTPRequestChecker* NewL(MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection);
+	IMPORT_C ~CMTPRequestChecker();
+      
+    IMPORT_C TMTPResponseCode VerifyRequestL(const TMTPTypeRequest& aRequest, TInt aCount, const TMTPRequestElementInfo* aElementInfo);
+	IMPORT_C CMTPObjectMetaData* GetObjectInfo(TUint32 aHandle) const; 
+
+private:	    
+    TMTPResponseCode CheckRequestHeader(const TMTPTypeRequest& aRequest) const;
+    TMTPResponseCode VerifySessionId(TUint32 aSessionId, const TMTPRequestElementInfo& aElementInfo) const;    
+    TMTPResponseCode VerifyObjectHandleL(TUint32 aHandle, const TMTPRequestElementInfo& aElementInfo);
+    TMTPResponseCode VerifyStorageIdL(TUint32 aStorageId, const TMTPRequestElementInfo& aElementInfo) const;  
+    TMTPResponseCode VerifyFormatCode(TUint32 aFormatCode, const TMTPRequestElementInfo& aElementInfo) const;
+	TBool IsSpecialValue(TUint32 aParameter, const TMTPRequestElementInfo& aElementInfo) const;
+private:
+	CMTPRequestChecker(MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection);	
+	
+private:
+    MMTPDataProviderFramework&		    iFramework;
+    MMTPConnection& 				    iConnection;
+	RArray<TUint32>					    iHandles;			//these two arrays contain the mapping from the handle to objectinfo 
+	RPointerArray<CMTPObjectMetaData>   iObjectArray; 
+	/**
+    FLOGGER debug trace member variable.
+    */
+    __FLOG_DECLARATION_MEMBER_MUTABLE;
+    };
+	
+#endif 
+