--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/policymanagement/policyengine/policyengineserver/inc/PolicyProcessor.h Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2000 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: Implementation of policymanagement components
+*
+*/
+
+
+
+
+#ifndef _POLICY_PROCESSOR_HEADER__
+#define _POLICY_PROCESSOR_HEADER__
+
+// INCLUDES
+
+#include "PolicyEngineServer.h"
+#include "ElementBase.h"
+#include "RequestContext.h"
+#include "PolicyStorage.h"
+#include <e32base.h>
+
+// CONSTANTS
+// MACROS
+// DATA TYPES
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+class CDataType;
+class CAttribute;
+class CAttributeValue;
+class CTrustedSession;
+
+typedef RArray<CAttributeValue*> RParameterList;
+
+// CLASS DECLARATION
+
+namespace AttributeContainerHelper
+{
+ enum TAttributeTypes
+ {
+ ESubjectAttributes = 0,
+ EActionAttributes,
+ EResourceAttributes,
+ EEnvironmentAttributes
+ };
+
+ class TContainer
+ {
+ public:
+ CAttribute * iAttribute;
+ TAttributeTypes iAttributeType;
+ private:
+ };
+}
+
+class RAttributeContainer : public RArray<AttributeContainerHelper::TContainer*>
+{
+ public:
+ void AppendL( AttributeContainerHelper::TAttributeTypes aAttributeTypes, CAttribute* aAttribute);
+ void Close();
+ private:
+};
+
+class CPolicyProcessor : public CActive
+{
+ public:
+ typedef RArray<CAttribute*> RAttributeList;
+
+ static CPolicyProcessor * NewL();
+ CPolicyProcessor();
+ ~CPolicyProcessor();
+ void ConstructL();
+
+ void ResetRequestContext();
+
+ void ExecuteRequestL( RAttributeContainer& aAttributes, TMatchResponse &aResponse);
+ void ExecuteRequestL( const RMessage2& aMessage);
+
+
+ //Request context
+ TRequestContext * RequestContext();
+
+ RAttributeList * Subjects();
+ RAttributeList * Actions();
+ RAttributeList * Resources();
+ RAttributeList * Environments();
+
+ //Execution functions
+ static void HandleErrorL( const TDesC8 &aText);
+
+ TBool MatchFunctionL( const TDesC8 &aFunctionId, CDataType * aData1, CDataType * aData2);
+ void FunctionL( const TDesC8 &aFunctionId, RParameterList& aParams, CAttributeValue* aResponseElement);
+
+ //For management functions
+ void SetTargetElement( CElementBase * aElement);
+ void SetSessionTrust( CTrustedSession * aTrustedSession);
+ protected:
+ //From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError);
+ private:
+ void DoRequestExecutionL(TMatchResponse &aResponse, TBool iUseEditableElements);
+ TPtrC8 NextToken( TPtrC8& aText);
+
+ void OrFunctionL( const RParameterList& aParams, CAttributeValue* aResponseElement );
+ void AndFunctionL( const RParameterList& aParams, CAttributeValue* aResponseElement );
+ void NotFunctionL( const RParameterList& aParams, CAttributeValue* aResponseElement );
+
+ void CertificateForSessionL( CAttributeValue* aResponseElement );
+ void CorporateUserAcceptFunctionL( const RParameterList& aParams, CAttributeValue* aResponseElement );
+ void RuleTargetStructureFunctionL( const RParameterList& aParams, CAttributeValue* aResponseElement );
+ void EqualFunctionsL( const RParameterList& aParams, CAttributeValue* aResponseElement );
+
+ void MakeBooleanResponseL( const TBool aValue, CAttributeValue* aResponseElement );
+
+ void CompleteMessage( TInt aError, TResponse aResponse);
+ private:
+ CElementBase * iManagementTargetPolicy;
+ CTrustedSession * iTrustedSession;
+
+ RAttributeList iSubjects;
+ RAttributeList iActions;
+ RAttributeList iResources;
+ RAttributeList iEnvironments;
+ TBool iDeleteAttributes;
+ TBool iUseEditedElements;
+
+ //RunL handling
+ const RMessage2 * iMessage;
+ HBufC8 * iRequestBuffer;
+ TInt iProcessorState;
+};
+
+class TCombiningAlgorith
+{
+ public:
+ TCombiningAlgorith( const TDesC8 &aAlgorithId);
+
+ TBool AddInput( const TMatchResponse& aInput, const TMatchResponse& aEffect);
+ TBool AddInput( const TMatchResponse& aInput);
+ TBool ResultReady();
+ TMatchResponse Result();
+ private:
+ enum TCombingAlgorithm
+ {
+ ERuleDenyOverrides = 0,
+ EPolicyDenyOverrides,
+ ERulePermitOverrides,
+ EPolicyPermitOverrides,
+ };
+ private:
+ TCombingAlgorithm iAlgorithm;
+ TMatchResponse iCurrentResponse;
+ TBool iResultReady;
+ TBool iAtLeastOneError;
+ TBool iPotentialDeny;
+ TBool iPotentialPermit;
+ TBool iAtLeastOneDeny;
+ TBool iAtLeastOnePermit;
+};
+
+
+#endif
\ No newline at end of file