internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo)
        {
            if (bifInfo.ADAttributesForTextMatch.Count > 0 || bifInfo.ADAttributes.Count > 0 || bifInfo.Managers.Count > 0 || bifInfo.Recipients.Count > 0 || bifInfo.Lists.Count == 0 || bifInfo.FromRecipients.Count > 0 || bifInfo.FromLists.Count > 0 || bifInfo.Partners.Count > 0 || bifInfo.RecipientAddressContainsWords.Count > 0 || bifInfo.RecipientDomainIs.Count > 0 || bifInfo.RecipientMatchesPatterns.Count > 0 || bifInfo.RecipientAttributeContains.Count > 0 || bifInfo.RecipientAttributeMatches.Count > 0 || bifInfo.SenderInRecipientList.Count > 0 || bifInfo.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (bifInfo.InternalRecipients || bifInfo.ExternalRecipients || bifInfo.ExternalPartnerRecipients || bifInfo.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (!string.IsNullOrEmpty(bifInfo.ManagementRelationship))
            {
                return(null);
            }
            List <SmtpAddress> list = new List <SmtpAddress>(bifInfo.Lists.Count);

            for (int i = 0; i < bifInfo.Lists.Count; i++)
            {
                SmtpAddress item = new SmtpAddress(bifInfo.Lists[i]);
                if (item.IsValidAddress)
                {
                    list.Add(item);
                }
            }
            SentToMemberOfPredicate sentToMemberOfPredicate = new SentToMemberOfPredicate();

            if (list.Count > 0)
            {
                sentToMemberOfPredicate.Addresses = list.ToArray();
            }
            return(sentToMemberOfPredicate);
        }
        internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo)
        {
            if (bifInfo.ADAttributesForTextMatch.Count > 0 || bifInfo.ADAttributes.Count > 0 || bifInfo.Managers.Count > 0 || bifInfo.Recipients.Count > 0 || bifInfo.Lists.Count > 0 || bifInfo.FromRecipients.Count > 0 || bifInfo.FromLists.Count > 0 || bifInfo.Partners.Count > 0 || bifInfo.RecipientAddressContainsWords.Count > 0 || bifInfo.RecipientDomainIs.Count > 0 || bifInfo.RecipientMatchesPatterns.Count > 0 || bifInfo.RecipientAttributeContains.Count > 0 || bifInfo.RecipientAttributeMatches.Count > 0 || bifInfo.SenderInRecipientList.Count > 0 || bifInfo.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (!string.IsNullOrEmpty(bifInfo.ManagementRelationship))
            {
                return(null);
            }
            SentToScopePredicate sentToScopePredicate = new SentToScopePredicate();

            if (bifInfo.InternalRecipients && !bifInfo.ExternalRecipients && !bifInfo.ExternalPartnerRecipients && !bifInfo.ExternalNonPartnerRecipients)
            {
                sentToScopePredicate.Scope = ToUserScope.InOrganization;
                return(sentToScopePredicate);
            }
            if (!bifInfo.InternalRecipients && bifInfo.ExternalRecipients && !bifInfo.ExternalPartnerRecipients && !bifInfo.ExternalNonPartnerRecipients)
            {
                sentToScopePredicate.Scope = ToUserScope.NotInOrganization;
                return(sentToScopePredicate);
            }
            if (!bifInfo.InternalRecipients && !bifInfo.ExternalRecipients && bifInfo.ExternalPartnerRecipients && !bifInfo.ExternalNonPartnerRecipients)
            {
                sentToScopePredicate.Scope = ToUserScope.ExternalPartner;
                return(sentToScopePredicate);
            }
            if (!bifInfo.InternalRecipients && !bifInfo.ExternalRecipients && !bifInfo.ExternalPartnerRecipients && bifInfo.ExternalNonPartnerRecipients)
            {
                sentToScopePredicate.Scope = ToUserScope.ExternalNonPartner;
                return(sentToScopePredicate);
            }
            return(null);
        }
Beispiel #3
0
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            RuleBifurcationInfo ruleBifurcationInfo  = new RuleBifurcationInfo();
            RuleBifurcationInfo ruleBifurcationInfo2 = new RuleBifurcationInfo();

            foreach (SmtpAddress smtpAddress in this.Addresses)
            {
                if (!smtpAddress.IsValidAddress)
                {
                    throw new ArgumentException(RulesTasksStrings.InvalidRecipient(smtpAddress.ToString()), "Address");
                }
                ruleBifurcationInfo.FromLists.Add(smtpAddress.ToString());
                ruleBifurcationInfo2.Lists.Add(smtpAddress.ToString());
            }
            foreach (SmtpAddress smtpAddress2 in this.Addresses2)
            {
                if (!smtpAddress2.IsValidAddress)
                {
                    throw new ArgumentException(RulesTasksStrings.InvalidRecipient(smtpAddress2.ToString()), "Address");
                }
                ruleBifurcationInfo.Lists.Add(smtpAddress2.ToString());
                ruleBifurcationInfo2.FromLists.Add(smtpAddress2.ToString());
            }
            additionalBifurcationInfo = ruleBifurcationInfo2;
            return(ruleBifurcationInfo);
        }
        internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo)
        {
            if (bifInfo.ADAttributesForTextMatch.Count > 0 || bifInfo.ADAttributes.Count > 0 || bifInfo.Managers.Count > 0 || bifInfo.Recipients.Count > 0 || bifInfo.Lists.Count > 0 || bifInfo.FromRecipients.Count > 0 || bifInfo.FromLists.Count > 0 || bifInfo.Partners.Count > 0 || bifInfo.RecipientAddressContainsWords.Count == 0 || bifInfo.RecipientDomainIs.Count > 0 || bifInfo.RecipientMatchesPatterns.Count > 0 || bifInfo.RecipientAttributeContains.Count > 0 || bifInfo.RecipientAttributeMatches.Count > 0 || bifInfo.SenderInRecipientList.Count > 0 || bifInfo.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (bifInfo.InternalRecipients || bifInfo.ExternalRecipients || bifInfo.ExternalPartnerRecipients || bifInfo.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (!string.IsNullOrEmpty(bifInfo.ManagementRelationship))
            {
                return(null);
            }
            RecipientAddressContainsWordsPredicate recipientAddressContainsWordsPredicate = new RecipientAddressContainsWordsPredicate();

            Word[] array = new Word[bifInfo.RecipientAddressContainsWords.Count];
            for (int i = 0; i < bifInfo.RecipientAddressContainsWords.Count; i++)
            {
                try
                {
                    array[i] = new Word(bifInfo.RecipientAddressContainsWords[i]);
                }
                catch (ArgumentOutOfRangeException)
                {
                    return(null);
                }
            }
            recipientAddressContainsWordsPredicate.Words = array;
            return(recipientAddressContainsWordsPredicate);
        }
        internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo)
        {
            if (bifInfo.ADAttributesForTextMatch.Count > 0 || bifInfo.ADAttributes.Count > 0 || bifInfo.Managers.Count > 0 || bifInfo.Recipients.Count > 0 || bifInfo.Lists.Count > 0 || bifInfo.FromRecipients.Count > 0 || bifInfo.FromLists.Count > 0 || bifInfo.Partners.Count > 0 || bifInfo.RecipientAddressContainsWords.Count > 0 || bifInfo.RecipientDomainIs.Count > 0 || bifInfo.RecipientMatchesPatterns.Count > 0 || bifInfo.RecipientAttributeContains.Count > 0 || (bifInfo.RecipientAttributeMatches.Count == 0 && bifInfo.RecipientAttributeMatchesRegex.Count == 0) || bifInfo.SenderInRecipientList.Count > 0 || bifInfo.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (bifInfo.InternalRecipients || bifInfo.ExternalRecipients || bifInfo.ExternalPartnerRecipients || bifInfo.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (!string.IsNullOrEmpty(bifInfo.ManagementRelationship))
            {
                return(null);
            }
            bool flag = bifInfo.RecipientAttributeMatches.Count > 0;
            RecipientAttributeMatchesPredicate recipientAttributeMatchesPredicate = new RecipientAttributeMatchesPredicate(flag);
            List <string> list = flag ? bifInfo.RecipientAttributeMatches : bifInfo.RecipientAttributeMatchesRegex;

            Pattern[] array = new Pattern[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                try
                {
                    array[i] = new Pattern(list[i], flag, false);
                }
                catch (ArgumentException)
                {
                    return(null);
                }
            }
            recipientAttributeMatchesPredicate.patterns = array;
            return(recipientAttributeMatchesPredicate);
        }
        internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo)
        {
            if (bifInfo.ADAttributesForTextMatch.Count > 0 || bifInfo.ADAttributes.Count > 0 || bifInfo.Managers.Count > 0 || bifInfo.Recipients.Count > 0 || bifInfo.Lists.Count > 0 || bifInfo.FromRecipients.Count > 0 || bifInfo.FromLists.Count > 0 || bifInfo.Partners.Count > 0 || bifInfo.RecipientAddressContainsWords.Count > 0 || bifInfo.RecipientDomainIs.Count > 0 || bifInfo.RecipientMatchesPatterns.Count > 0 || bifInfo.RecipientAttributeContains.Count > 0 || bifInfo.RecipientAttributeMatches.Count > 0 || bifInfo.SenderInRecipientList.Count > 0 || bifInfo.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (bifInfo.InternalRecipients || bifInfo.ExternalRecipients || bifInfo.ExternalPartnerRecipients || bifInfo.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (string.IsNullOrEmpty(bifInfo.ManagementRelationship))
            {
                return(null);
            }
            ManagementRelationshipPredicate managementRelationshipPredicate = new ManagementRelationshipPredicate();

            if (string.Equals(bifInfo.ManagementRelationship, ManagementRelationship.Manager.ToString(), StringComparison.InvariantCultureIgnoreCase))
            {
                managementRelationshipPredicate.ManagementRelationship = ManagementRelationship.Manager;
            }
            else
            {
                managementRelationshipPredicate.ManagementRelationship = ManagementRelationship.DirectReport;
            }
            return(managementRelationshipPredicate);
        }
        internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo)
        {
            if (bifInfo.ADAttributesForTextMatch.Count > 0 || bifInfo.ADAttributes.Count == 0 || bifInfo.Managers.Count > 0 || bifInfo.Recipients.Count > 0 || bifInfo.Lists.Count > 0 || bifInfo.FromRecipients.Count > 0 || bifInfo.FromLists.Count > 0 || bifInfo.Partners.Count > 0 || bifInfo.RecipientAddressContainsWords.Count > 0 || bifInfo.RecipientDomainIs.Count > 0 || bifInfo.RecipientMatchesPatterns.Count > 0 || bifInfo.RecipientAttributeContains.Count > 0 || bifInfo.RecipientAttributeMatches.Count > 0 || bifInfo.SenderInRecipientList.Count > 0 || bifInfo.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (bifInfo.InternalRecipients || bifInfo.ExternalRecipients || bifInfo.ExternalPartnerRecipients || bifInfo.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (!string.IsNullOrEmpty(bifInfo.ManagementRelationship))
            {
                return(null);
            }
            ADAttributeComparisonPredicate adattributeComparisonPredicate = new ADAttributeComparisonPredicate
            {
                ADAttribute = (ADAttribute)Enum.Parse(typeof(ADAttribute), bifInfo.ADAttributes[0])
            };

            if (bifInfo.CheckADAttributeEquality)
            {
                adattributeComparisonPredicate.Evaluation = Evaluation.Equal;
            }
            else
            {
                adattributeComparisonPredicate.Evaluation = Evaluation.NotEqual;
            }
            return(adattributeComparisonPredicate);
        }
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            switch (this.scope)
            {
            case ToUserScope.InOrganization:
                ruleBifurcationInfo.InternalRecipients = true;
                break;

            case ToUserScope.NotInOrganization:
                ruleBifurcationInfo.ExternalRecipients = true;
                break;

            case ToUserScope.ExternalPartner:
                ruleBifurcationInfo.ExternalPartnerRecipients = true;
                break;

            case ToUserScope.ExternalNonPartner:
                ruleBifurcationInfo.ExternalNonPartnerRecipients = true;
                break;

            default:
                return(null);
            }
            return(ruleBifurcationInfo);
        }
 internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
 {
     additionalBifurcationInfo = null;
     return(new RuleBifurcationInfo
     {
         ManagementRelationship = this.ManagementRelationship.ToString()
     });
 }
 internal static bool TryCreatePredicateFromBifInfo(TypeMapping[] mappings, RuleBifurcationInfo bifInfo1, RuleBifurcationInfo bifInfo2, out TransportRulePredicate predicate, out bool twoBifInfoConverted)
 {
     foreach (TypeMapping typeMapping in mappings)
     {
         if (typeMapping.Type.IsSubclassOf(typeof(BifurcationInfoPredicate)))
         {
             MethodInfo method = typeMapping.Type.GetMethod("CreatePredicateFromBifInfo", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[]
             {
                 typeof(RuleBifurcationInfo)
             }, null);
             TransportRulePredicate transportRulePredicate;
             if (method != null)
             {
                 transportRulePredicate = (TransportRulePredicate)method.Invoke(null, new object[]
                 {
                     bifInfo1
                 });
                 if (transportRulePredicate != null)
                 {
                     twoBifInfoConverted = false;
                     predicate           = transportRulePredicate;
                     predicate.Initialize(mappings);
                     return(true);
                 }
             }
             if (bifInfo2 == null)
             {
                 goto IL_116;
             }
             method = typeMapping.Type.GetMethod("CreatePredicateFromBifInfo", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[]
             {
                 typeof(RuleBifurcationInfo),
                 typeof(RuleBifurcationInfo)
             }, null);
             if (!(method != null))
             {
                 goto IL_116;
             }
             transportRulePredicate = (TransportRulePredicate)method.Invoke(null, new object[]
             {
                 bifInfo1,
                 bifInfo2
             });
             if (transportRulePredicate == null)
             {
                 goto IL_116;
             }
             twoBifInfoConverted = true;
             predicate           = transportRulePredicate;
             predicate.Initialize(mappings);
             return(true);
         }
         IL_116 :;
     }
     predicate           = null;
     twoBifInfoConverted = false;
     return(false);
 }
Beispiel #11
0
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            foreach (Word word in this.lists)
            {
                ruleBifurcationInfo.SenderInRecipientList.Add(word.ToString());
            }
            return(ruleBifurcationInfo);
        }
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            foreach (Word word in this.Words)
            {
                ruleBifurcationInfo.RecipientDomainIs.Add(word.ToString());
            }
            return(ruleBifurcationInfo);
        }
 internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
 {
     additionalBifurcationInfo = null;
     return(new RuleBifurcationInfo
     {
         ADAttributes =
         {
             this.ADAttribute.ToString()
         },
         CheckADAttributeEquality = (this.Evaluation == Evaluation.Equal)
     });
 }
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            foreach (Word word in this.words)
            {
                ruleBifurcationInfo.RecipientAttributeContains.Add(word.ToString());
                ruleBifurcationInfo.Patterns.Add(word.ToString());
            }
            return(ruleBifurcationInfo);
        }
 internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
 {
     additionalBifurcationInfo = null;
     return(new RuleBifurcationInfo
     {
         ADAttributesForTextMatch =
         {
             this.ADAttribute.ToString()
         },
         CheckADAttributeEquality = (this.ADAttributeEvaluationType == ADAttributeEvaluationType.Equals),
         IsSenderEvaluation = (this.EvaluatedUser == EvaluatedUser.Sender),
         ADAttributeValue = this.AttributeValue
     });
 }
Beispiel #16
0
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            foreach (SmtpAddress smtpAddress in this.Addresses)
            {
                if (!smtpAddress.IsValidAddress)
                {
                    throw new ArgumentException(RulesTasksStrings.InvalidRecipient(smtpAddress.ToString()), "Address");
                }
                ruleBifurcationInfo.Recipients.Add(smtpAddress.ToString());
            }
            return(ruleBifurcationInfo);
        }
Beispiel #17
0
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            foreach (SmtpAddress smtpAddress in this.Addresses)
            {
                string text = smtpAddress.ToString();
                if (string.IsNullOrEmpty(text))
                {
                    throw new ArgumentException(RulesTasksStrings.InvalidRecipient(text), "Address");
                }
                ruleBifurcationInfo.Managers.Add(text);
            }
            ruleBifurcationInfo.IsSenderEvaluation = (this.EvaluatedUser == EvaluatedUser.Sender);
            return(ruleBifurcationInfo);
        }
        internal override RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo)
        {
            additionalBifurcationInfo = null;
            RuleBifurcationInfo ruleBifurcationInfo = new RuleBifurcationInfo();

            foreach (Pattern pattern in this.patterns)
            {
                if (base.UseLegacyRegex)
                {
                    ruleBifurcationInfo.RecipientAttributeMatches.Add(pattern.ToString());
                }
                else
                {
                    ruleBifurcationInfo.RecipientAttributeMatchesRegex.Add(pattern.ToString());
                }
                ruleBifurcationInfo.Patterns.Add(pattern.ToString());
            }
            return(ruleBifurcationInfo);
        }
 internal abstract RuleBifurcationInfo ToRuleBifurcationInfo(out RuleBifurcationInfo additionalBifurcationInfo);
Beispiel #20
0
        internal static TransportRulePredicate CreatePredicateFromBifInfo(RuleBifurcationInfo bifInfo1, RuleBifurcationInfo bifInfo2)
        {
            if (bifInfo1.ADAttributesForTextMatch.Count > 0 || bifInfo1.ADAttributes.Count > 0 || bifInfo1.Managers.Count > 0 || bifInfo1.Recipients.Count > 0 || bifInfo1.Lists.Count == 0 || bifInfo1.FromRecipients.Count > 0 || bifInfo1.FromLists.Count == 0 || bifInfo1.Partners.Count > 0 || bifInfo1.RecipientAddressContainsWords.Count > 0 || bifInfo1.RecipientDomainIs.Count > 0 || bifInfo1.RecipientMatchesPatterns.Count > 0 || bifInfo1.RecipientAttributeContains.Count > 0 || bifInfo1.RecipientAttributeMatches.Count > 0 || bifInfo1.SenderInRecipientList.Count > 0 || bifInfo1.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (bifInfo2.ADAttributesForTextMatch.Count > 0 || bifInfo2.ADAttributes.Count > 0 || bifInfo2.Managers.Count > 0 || bifInfo2.Recipients.Count > 0 || bifInfo2.Lists.Count == 0 || bifInfo2.FromRecipients.Count > 0 || bifInfo2.FromLists.Count == 0 || bifInfo2.Partners.Count > 0 || bifInfo2.RecipientAddressContainsWords.Count > 0 || bifInfo2.RecipientDomainIs.Count > 0 || bifInfo2.RecipientMatchesPatterns.Count > 0 || bifInfo2.RecipientAttributeContains.Count > 0 || bifInfo2.RecipientAttributeMatches.Count > 0 || bifInfo2.SenderInRecipientList.Count > 0 || bifInfo2.RecipientInSenderList.Count > 0)
            {
                return(null);
            }
            if (!string.IsNullOrEmpty(bifInfo1.ManagementRelationship) || !string.IsNullOrEmpty(bifInfo2.ManagementRelationship))
            {
                return(null);
            }
            if (bifInfo1.Exception != bifInfo2.Exception)
            {
                return(null);
            }
            if (bifInfo1.InternalRecipients || bifInfo1.ExternalRecipients || bifInfo1.ExternalPartnerRecipients || bifInfo1.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (bifInfo2.InternalRecipients || bifInfo2.ExternalRecipients || bifInfo2.ExternalPartnerRecipients || bifInfo2.ExternalNonPartnerRecipients)
            {
                return(null);
            }
            if (bifInfo1.Lists.Count != bifInfo2.FromLists.Count || bifInfo2.Lists.Count != bifInfo1.FromLists.Count)
            {
                return(null);
            }
            for (int i = 0; i < bifInfo1.Lists.Count; i++)
            {
                if (bifInfo1.Lists[i] != bifInfo2.FromLists[i])
                {
                    return(null);
                }
            }
            for (int j = 0; j < bifInfo2.Lists.Count; j++)
            {
                if (bifInfo2.Lists[j] != bifInfo1.FromLists[j])
                {
                    return(null);
                }
            }
            List <SmtpAddress> list = new List <SmtpAddress>(bifInfo1.FromLists.Count);

            for (int k = 0; k < bifInfo1.FromLists.Count; k++)
            {
                SmtpAddress item = new SmtpAddress(bifInfo1.FromLists[k]);
                if (item.IsValidAddress)
                {
                    list.Add(item);
                }
            }
            List <SmtpAddress> list2 = new List <SmtpAddress>(bifInfo1.Lists.Count);

            for (int l = 0; l < bifInfo1.Lists.Count; l++)
            {
                SmtpAddress item2 = new SmtpAddress(bifInfo1.Lists[l]);
                if (item2.IsValidAddress)
                {
                    list2.Add(item2);
                }
            }
            BetweenMemberOfPredicate betweenMemberOfPredicate = new BetweenMemberOfPredicate();

            if (list.Count > 0)
            {
                betweenMemberOfPredicate.Addresses = list.ToArray();
            }
            if (list2.Count > 0)
            {
                betweenMemberOfPredicate.Addresses2 = list2.ToArray();
            }
            return(betweenMemberOfPredicate);
        }
Beispiel #21
0
        internal TransportRule ToInternalRule()
        {
            AndCondition andCondition       = new AndCondition();
            List <RuleBifurcationInfo> list = new List <RuleBifurcationInfo>();

            andCondition.SubConditions.Add(Microsoft.Exchange.MessagingPolicies.Rules.Condition.True);
            int num = -1;

            if (this.conditions != null)
            {
                foreach (TransportRulePredicate transportRulePredicate in this.conditions)
                {
                    if (transportRulePredicate.Rank <= num)
                    {
                        throw new ArgumentException(Strings.InvalidPredicateSequence, "Conditions");
                    }
                    num = transportRulePredicate.Rank;
                    if (transportRulePredicate is BifurcationInfoPredicate)
                    {
                        BifurcationInfoPredicate bifurcationInfoPredicate = (BifurcationInfoPredicate)transportRulePredicate;
                        RuleBifurcationInfo      ruleBifurcationInfo;
                        RuleBifurcationInfo      item = bifurcationInfoPredicate.ToRuleBifurcationInfo(out ruleBifurcationInfo);
                        list.Add(item);
                        if (ruleBifurcationInfo != null)
                        {
                            list.Add(ruleBifurcationInfo);
                        }
                    }
                    else
                    {
                        Microsoft.Exchange.MessagingPolicies.Rules.Condition item2 = transportRulePredicate.ToInternalCondition();
                        andCondition.SubConditions.Add(item2);
                    }
                }
            }
            if (this.exceptions != null && this.exceptions.Length > 0)
            {
                OrCondition orCondition = new OrCondition();
                andCondition.SubConditions.Add(new NotCondition(orCondition));
                num = -1;
                foreach (TransportRulePredicate transportRulePredicate2 in this.exceptions)
                {
                    if (transportRulePredicate2.Rank <= num)
                    {
                        throw new ArgumentException(Strings.InvalidPredicateSequence, "Exceptions");
                    }
                    num = transportRulePredicate2.Rank;
                    if (transportRulePredicate2 is BifurcationInfoPredicate)
                    {
                        BifurcationInfoPredicate bifurcationInfoPredicate2 = (BifurcationInfoPredicate)transportRulePredicate2;
                        RuleBifurcationInfo      ruleBifurcationInfo3;
                        RuleBifurcationInfo      ruleBifurcationInfo2 = bifurcationInfoPredicate2.ToRuleBifurcationInfo(out ruleBifurcationInfo3);
                        ruleBifurcationInfo2.Exception = true;
                        list.Add(ruleBifurcationInfo2);
                        if (ruleBifurcationInfo3 != null)
                        {
                            ruleBifurcationInfo3.Exception = true;
                            list.Add(ruleBifurcationInfo3);
                        }
                    }
                    else
                    {
                        Microsoft.Exchange.MessagingPolicies.Rules.Condition item3 = transportRulePredicate2.ToInternalCondition();
                        orCondition.SubConditions.Add(item3);
                    }
                }
                if (orCondition.SubConditions.Count == 0)
                {
                    orCondition.SubConditions.Add(Microsoft.Exchange.MessagingPolicies.Rules.Condition.False);
                }
            }
            TransportRule transportRule = new TransportRule(base.Name, andCondition);

            transportRule.Enabled  = this.State;
            transportRule.Comments = this.Comments;
            if (list.Count > 0)
            {
                transportRule.Fork = list;
            }
            foreach (Microsoft.Exchange.MessagingPolicies.Rules.Action item4 in this.CreateActions())
            {
                transportRule.Actions.Add(item4);
            }
            return(transportRule);
        }