diff -r 000000000000 -r a2952bb97e68 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestchecker.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestchecker.h Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,225 @@ +/* +* Copyright (c) 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: +* +*/ + + +#ifndef CREQUESTCHECKER_H +#define CREQUESTCHECKER_H + +#include +#include +#include + +class CMTPObjectMetaData; +class MMTPDataProviderFramework; +class MMTPConnection; + +/** +* element type in the request +*/ +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 +*/ +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 +*/ +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. +*/ +class CRequestChecker : public CBase + { +public: + /** + * Two-phase construction method + * @param aFramework The data provider framework + * @param aConnection The connection object + * @return a pointer to the created request checker object + */ + static CRequestChecker* NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection ); + + /** + * Destructor + */ + ~CRequestChecker(); + + /** + * Verfiy the request. It check the request header first (session id and transaction code), and check for special values, last + * it iterates through the verification elements for checking individul parameters in the request + * @param aRequest The request object to verify + * @param aCount The number of verification elements + * @param aElementInfo The array of verification elements + * @return reponse code to return to the initiator + */ + TMTPResponseCode VerifyRequestL( const TMTPTypeRequest& aRequest, + TInt aCount, + const TMTPRequestElementInfo* aElementInfo ); + + /** + * Return the object info for the handle. + * This is to remove extra expensive DMBS retrieval operations. + * @param aHandle the handle of the object requested + * @return an object info for the handle + */ + CMTPObjectMetaData* GetObjectInfo( TUint32 aHandle ) const; + +private: + /** + * Check the request header portion (session Id and transaction code) + * @param aRequest the request object to check + * @return repsonse code to return to initiator + */ + TMTPResponseCode CheckRequestHeader( const TMTPTypeRequest& aRequest ) const; + + /** + * Check the session id in the request parameter (NOTE the session id is different from the one in the request header), + * this usually only applies to the OpenSession request + * @param aSessionId Session id of the request. + * @param aElementInfo ElementInfo data array to check against. + * @return repsonse code to return to initiator + */ + TMTPResponseCode VerifySessionId( TUint32 aSessionId, + const TMTPRequestElementInfo& aElementInfo ) const; + + /** + * Check the object handle in the request parameter, whether the handle is in the object store, read/write, file/dir + * @param aHandle Object handle to be checked. + * @param aElementInfo Element info array to be checked against. + * @return repsonse code to return to initiator + */ + TMTPResponseCode VerifyObjectHandleL( TUint32 aHandle, + const TMTPRequestElementInfo& aElementInfo ); + + /** + * Check the storage id parameter in the request, read/write attributes + * @param aStorageId Storage id to be checked. + * @param aElementInfo Element info array to be checked against. + * @return repsonse code to return to initiator + */ + TMTPResponseCode VerifyStorageIdL( TUint32 aStorageId, + const TMTPRequestElementInfo& aElementInfo ) const; + + /** + * Check the format code parameter in the request, + * @param aStorageId aFormatCode to be checked. + * @param aElementInfo Element info array to be checked against. + * @return repsonse code to return to initiator + */ + TMTPResponseCode VerifyFormatCode( TUint32 aFormatCode, + const TMTPRequestElementInfo& aElementInfo ) const; + + /** + * Check if the parameter is one of the special values + * @param aParameter The parameter value in the request + * @param aElementInfo The ElementInfo for the parameter + * @return ETrue if the parameter is one of the special values, otherwise, EFalse + */ + TBool IsSpecialValue( TUint32 aParameter, + const TMTPRequestElementInfo& aElementInfo ) const; + +private: + /** + * Standard c++ constructor + */ + CRequestChecker( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection ); + + /** + * Two-phase construction + */ + void ConstructL(); + +private: + MMTPDataProviderFramework& iFramework; + MMTPConnection& iConnection; + RArray iHandles; //these two arrays contain the mapping from the handle to objectinfo + RPointerArray iObjectArray; + + }; + +#endif // CREQUESTCHECKER_H