public override IPolicyExpression Parse(Stream stream)
        {
            IList <TokenTypeAssociation> tokens = ParseToTokens(stream);

            ResetLevel();

            IPolicyExpression retExpression = BuildExpression(tokens.GetEnumerator());

            if (GetLevel() != 0)
            {
                throw new PolicyGrammarException("Group not closed.");
            }

            if (retExpression.GetExpressionType() != PolicyExpressionType.OPERATION)
            {
                throw new PolicyGrammarException("Expression must evaluate to an operation");
            }

            return(retExpression);
        }
Beispiel #2
0
        protected StackMachineEntry <OperationPolicyExpression> Compile(IList <IOpCode> entries, X509Certificate2 cert, IPolicyExpression expression)
        {
            switch (expression.GetExpressionType())
            {
            //case PolicyExpressionType.LITERAL:
            //    return new StackMachineEntry(((LiteralPolicyExpression < ?  >)
            //    expression).
            //    GetPolicyValue())
            //    ;

            //case PolicyExpressionType.REFERENCE:
            //{
            //    object refExpression = GetRefExpressionType(expression);

            //    //IReferencePolicyExpression<X509Certificate2, object> refExpression = null;
            //    EvaluateReferenceExpression(cert, refExpression);

            //    return new ReferenceMachineEntry<IReferencePolicyExpression<X509Certificate2,T>>(expression);
            //}

            case PolicyExpressionType.OPERATION:
            {
                OperationPolicyExpression opExpression = (OperationPolicyExpression)expression;
                foreach (IPolicyExpression policyExpression in opExpression.GetOperands())
                {
                    if (policyExpression is IReferencePolicyExpression <X509Certificate2, String> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, String>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Int32> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Int32>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Int64> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Int64>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, IList <String> > )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, IList <String> >;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Boolean> )
                    {
                        var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Boolean>;
                        EvaluateReferenceExpression(cert, refExpression);
                        entries.Add(Compile(refExpression));
                    }
                    else if (policyExpression is ILiteralPolicyExpression <String> )
                    {
                        entries.Add(Compile(policyExpression as ILiteralPolicyExpression <String>));
                    }
                    else
                    {
                        entries.Add(Compile(entries, cert, policyExpression));
                    }
                }
                return(new StackMachineEntry <OperationPolicyExpression>(opExpression.GetPolicyOperator()));
            }

            default:
                return(null);
            }
        }