williamr@4: /* williamr@4: * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of the License "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * Types required to use the UPS server. williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef UPSTYPES_H williamr@4: #define UPSTYPES_H williamr@4: #include williamr@4: williamr@4: #ifdef __WINS__ williamr@4: // Work around broken TRAP handling.......... See DEF108105 williamr@4: #undef TRAP_INSTRUMENTATION_END williamr@4: #define TRAP_INSTRUMENTATION_END (void)User::Allocator() williamr@4: #endif williamr@4: williamr@4: class RWriteStream; williamr@4: class RReadStream; williamr@4: williamr@4: enum TUpsDecision williamr@4: /** williamr@4: Decisions which can be returned by the UPS server to the williamr@4: system server. williamr@4: */ williamr@4: { williamr@4: /** williamr@4: The action can be performed. This response does not distinguish williamr@4: between a one-shot or an always approval. williamr@4: */ williamr@4: EUpsDecYes, williamr@4: /** williamr@4: The action cannot be performed. williamr@4: */ williamr@4: EUpsDecNo, williamr@4: /** williamr@4: The action can be performed for a session, as defined by the williamr@4: system server. williamr@4: */ williamr@4: EUpsDecSessionYes, williamr@4: /** williamr@4: The action can not be performed for a session, as defined by the williamr@4: system server. williamr@4: */ williamr@4: EUpsDecSessionNo williamr@4: williamr@4: }; williamr@4: williamr@4: /** williamr@4: Convenience typedef wraps up an instance of TUpsDecision which williamr@4: can be supplied to a server. Note the APIs themselves take TDes8& williamr@4: arguments, not specifically references to an instance of this type. williamr@4: */ williamr@4: typedef TPckgBuf TUpsDecisionPckgBuf; williamr@4: williamr@4: /** williamr@4: Uniquely identifies a service. UIDs should be reserved via Symbian Signed. williamr@4: */ williamr@4: typedef TUid TServiceId; williamr@4: williamr@4: namespace UserPromptService williamr@4: { williamr@4: williamr@4: //Number of columns exist in a filter key williamr@4: static const TUint8 KFilterKeysNumber = 0x0B; williamr@4: williamr@4: /** Comparision types used in the querying of the decision database. */ williamr@4: //4 bytes on the right side are used to indicate whether a columns is set. williamr@4: enum TComparisonOp williamr@4: { williamr@4: EEqual = 0x00010000, williamr@4: ENotEqual = 0x00020000, williamr@4: ELessThan = 0x00040000, williamr@4: EGreaterThan = 0x00080000, williamr@4: ELessThanOrEqual = 0x00100000, williamr@4: EGreaterThanOrEqual = 0x00200000 williamr@4: }; williamr@4: williamr@4: NONSHARABLE_CLASS(CDecisionFilter):public CBase williamr@4: /** williamr@4: Stores the filter key values that used to query the database. williamr@4: A filter object can be created in one phase by supplying all required parameters, williamr@4: or an empty filter is first created and then required filter keys are set separately. williamr@4: */ williamr@4: { williamr@4: friend class CDecisionDb; williamr@4: friend class CDecisionDbW; williamr@4: williamr@4: public: williamr@4: IMPORT_C static CDecisionFilter *NewL (); williamr@4: IMPORT_C static CDecisionFilter *NewLC(); williamr@4: IMPORT_C static CDecisionFilter *NewL (const TSecureId& aClientSid,const TUid& aEvaluatorId,const TUid& aServiceId,const TSecureId& aServerSid, williamr@4: const TDesC8& aFingerprint,const TDesC8& aClientEntity,const TUint16& aVersion); williamr@4: IMPORT_C static CDecisionFilter *NewLC(const TSecureId& aClientSid,const TUid& aEvaluatorId,const TUid& aServiceId,const TSecureId& aServerSid, williamr@4: const TDesC8& aFingerprint,const TDesC8& aClientEntity,const TUint16& aVersion); williamr@4: ~CDecisionFilter(); williamr@4: williamr@4: IMPORT_C void SetClientSid(const TSecureId& aSid, const TComparisonOp aOp); williamr@4: IMPORT_C void SetEvaluatorId(const TUid& aUid, const TComparisonOp aOp); williamr@4: IMPORT_C void SetServiceId(const TUid& aUid, const TComparisonOp aOp); williamr@4: IMPORT_C void SetServerSid(const TSecureId& aSid, const TComparisonOp aOp); williamr@4: IMPORT_C void SetFingerprintL(const TDesC8& aFingerprint, const TComparisonOp aOp); williamr@4: IMPORT_C void SetClientEntityL(const TDesC8& aClientEntity, const TComparisonOp aOp); williamr@4: IMPORT_C void SetMajorPolicyVersion(const TUint16& aVersion, const TComparisonOp aOp); williamr@4: IMPORT_C void SetRecordId(const TUint32& aId, const TComparisonOp aOp); williamr@4: IMPORT_C void SetDescriptionL(const TDesC& aDescription, const TComparisonOp aOp); williamr@4: IMPORT_C void SetResult(const TUint8& aResult, const TComparisonOp aOp); williamr@4: IMPORT_C void SetEvaluatorInfo(const TUint32& aEvaluatorInfo, const TComparisonOp aOp); williamr@4: williamr@4: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@4: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@4: private: williamr@4: CDecisionFilter(); williamr@4: CDecisionFilter(const TSecureId& aClientSid, const TUid& aEvaluatorId, const TUid& aServiceId, const TSecureId& aServerSid, const TUint16& aVersion); williamr@4: williamr@4: void ConstructL(const TDesC8& aFingerprint, const TDesC8& aClientEntity); williamr@4: void ValidateL(); williamr@4: williamr@4: private: williamr@4: /** williamr@4: Secure Id for client application williamr@4: */ williamr@4: TSecureId iClientSid; williamr@4: /** williamr@4: UID for the policy evaluator DLL williamr@4: */ williamr@4: TUid iEvaluatorId; williamr@4: /** williamr@4: UID for service williamr@4: */ williamr@4: TUid iServiceId; williamr@4: /** williamr@4: Secure Id for system server williamr@4: */ williamr@4: TSecureId iServerSid; williamr@4: /** williamr@4: Fingerprint. williamr@4: NULL pointer if not specified. williamr@4: */ williamr@4: HBufC8* iFingerprint; williamr@4: /** williamr@4: Name of the entity within client williamr@4: NULL pointer if not specified. williamr@4: */ williamr@4: HBufC8* iClientEntity; williamr@4: /** williamr@4: An array of flags which shows which attributes are set and what operator(=,!=,<,>, etc.) is assigned. williamr@4: NULL pointer if not specified. williamr@4: */ williamr@4: TUint32 iSetFlag[KFilterKeysNumber]; williamr@4: /** williamr@4: Major version of policy file. williamr@4: */ williamr@4: TUint16 iMajorPolicyVersion; williamr@4: /** williamr@4: Unique decision record Id. williamr@4: */ williamr@4: TUint32 iRecordId; williamr@4: /** williamr@4: A copy of description and/or opaque williamr@4: */ williamr@4: HBufC* iDescription; williamr@4: /** williamr@4: Whether the request should be approved williamr@4: */ williamr@4: TUint8 iResult; williamr@4: /** williamr@4: Policy evaluator specific data williamr@4: */ williamr@4: TUint32 iEvaluatorInfo; williamr@4: }; williamr@4: williamr@4: williamr@4: NONSHARABLE_CLASS(CDecisionRecord):public CBase williamr@4: /** williamr@4: Stores all the field values in a decision database row. All member variables of the class williamr@4: are constant and public. Therefore, the members are assigned during construction and then williamr@4: they can be accessible directly, however, it is not possible to modify them. williamr@4: */ williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CDecisionRecord *NewL(const TSecureId& aClientSid,const TUid& aEvaluatorId,const TUid& aServiceId,const TSecureId& aServerSid,const TDesC8& aFingerprint, williamr@4: const TDesC8& aClientEntity,const TDesC& aDescription, const TUint8 aResult,const TUint16& aMajorPolicyVersion, williamr@4: const TUint32 aEvaluatorInfo, const TUint32& aRecordId=0); williamr@4: williamr@4: IMPORT_C static CDecisionRecord *NewLC(const TSecureId& aClientSid,const TUid& aEvaluatorId,const TUid& aServiceId,const TSecureId& aServerSid,const TDesC8& aFingerprint, williamr@4: const TDesC8& aClientEntity,const TDesC& aDescription, const TUint8 aResult,const TUint16& aMajorPolicyVersion, williamr@4: const TUint32 aEvaluatorInfo, const TUint32& aRecordId=0); williamr@4: williamr@4: IMPORT_C static CDecisionRecord *NewLC(); williamr@4: ~CDecisionRecord(); williamr@4: williamr@4: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@4: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@4: williamr@4: private: williamr@4: CDecisionRecord(); williamr@4: CDecisionRecord(const TSecureId& aClientSid,const TUid& aEvaluatorId,const TUid& aServiceId,const TSecureId& aServerSid,const TUint8 aResult, williamr@4: const TUint16& aMajorPolicyVersion, const TUint32 aEvaluatorInfo, const TUint32& aRecordId); williamr@4: williamr@4: void ConstructL(const TDesC8& aFingerprint,const TDesC8& aClientEntity,const TDesC& aDescription); williamr@4: void ValidateL(); williamr@4: williamr@4: public: williamr@4: /** williamr@4: Secure Id of client application williamr@4: */ williamr@4: TSecureId iClientSid; williamr@4: /** williamr@4: UID for the policy evaluator DLL williamr@4: */ williamr@4: TUid iEvaluatorId; williamr@4: /** williamr@4: UID for service williamr@4: */ williamr@4: TUid iServiceId; williamr@4: /** williamr@4: Secure Id for system server williamr@4: */ williamr@4: TSecureId iServerSid; williamr@4: /** williamr@4: Fingerprint williamr@4: */ williamr@4: RBuf8 iFingerprint; williamr@4: /** williamr@4: Name of the entity within client williamr@4: */ williamr@4: RBuf8 iClientEntity; williamr@4: /** williamr@4: A copy of description and/or opaque williamr@4: */ williamr@4: RBuf iDescription; williamr@4: /** williamr@4: Whether the request should be approved williamr@4: */ williamr@4: TUint8 iResult; williamr@4: /** williamr@4: Major policy version which this decision record possesses to. williamr@4: */ williamr@4: TUint16 iMajorPolicyVersion; williamr@4: /** williamr@4: Unique decision record Id. williamr@4: */ williamr@4: TUint32 iRecordId; williamr@4: /** williamr@4: Policy evaluator specific data williamr@4: */ williamr@4: TUint32 iEvaluatorInfo; williamr@4: }; williamr@4: williamr@4: } // End of UserPromptService namespace williamr@4: williamr@4: williamr@4: #endif // #ifndef UPSTYPES_H williamr@4: