/// <summary>
        /// Generate RuleData from ptf config base on different action Type.
        /// </summary>
        /// <param name="actionType">ActionType in a rule.</param>
        /// <param name="ruleDataType">The type of the rule data.</param>
        /// <param name="ruleSequence">Rule sequence in PidTagRuleSequence of the RuleData.</param>
        /// <param name="ruleState">Specifies value of PidTagRuleState of the RuleData.</param>
        /// <param name="actionData">The actionData needed to construct the RuleData.</param>
        /// <param name="otherInfo">
        /// An array of Other needed information of Actions.
        /// Index may be from 0-4
        /// 0. Rule name
        /// 1. Rule provider
        /// 2. Rule user Flags
        /// 3. Rule provider data
        /// 4. Subject name of content restriction
        /// </param>
        /// <param name="ruleId">A 64-bit unsigned integer represents the rule.</param>
        /// <returns>A valid RuleData structure.</returns>
        public static RuleData GenerateValidRuleData(ActionType actionType, TestRuleDataType ruleDataType, int ruleSequence, RuleState ruleState, IActionData actionData, RuleProperties otherInfo, ulong? ruleId)
        {
            RuleData ruleData = new RuleData
            {
                RuleDataFlags = (byte)ruleDataType
            };

            List<TaggedPropertyValue> propertyList = new List<TaggedPropertyValue>();
            if (ruleDataType == TestRuleDataType.ForModify || ruleDataType == TestRuleDataType.ForRemove)
            {
                TaggedPropertyValue pidTagRuleId = new TaggedPropertyValue();
                PropertyTag pidTagRuleIdPropertyTag = new PropertyTag
                {
                    PropertyId = (ushort)PropertyId.PidTagRuleId,
                    PropertyType = (ushort)PropertyType.PtypInteger64
                };
                pidTagRuleId.PropertyTag = pidTagRuleIdPropertyTag;
                pidTagRuleId.Value = BitConverter.GetBytes((ulong)ruleId);
                propertyList.Add(pidTagRuleId);
            }

            if (ruleDataType != TestRuleDataType.ForRemove)
            {
                TaggedPropertyValue pidTagRuleSequence = new TaggedPropertyValue();
                PropertyTag pidTagRuleSequencePropertyTag = new PropertyTag
                {
                    PropertyId = (ushort)PropertyId.PidTagRuleSequence,
                    PropertyType = (ushort)PropertyType.PtypInteger32
                };
                pidTagRuleSequence.PropertyTag = pidTagRuleSequencePropertyTag;
                pidTagRuleSequence.Value = BitConverter.GetBytes(ruleSequence);
                propertyList.Add(pidTagRuleSequence);

                TaggedPropertyValue pidTagRuleLevel = new TaggedPropertyValue();
                PropertyTag pidTagRuleLevelPropertyTag = new PropertyTag
                {
                    PropertyId = (ushort)PropertyId.PidTagRuleLevel,
                    PropertyType = (ushort)PropertyType.PtypInteger32
                };
                pidTagRuleLevel.PropertyTag = pidTagRuleLevelPropertyTag;
                pidTagRuleLevel.Value = BitConverter.GetBytes(0);
                propertyList.Add(pidTagRuleLevel);

                TaggedPropertyValue pidTagRuleState = new TaggedPropertyValue();
                PropertyTag pidTagRuleStatePropertyTag = new PropertyTag
                {
                    PropertyId = (ushort)PropertyId.PidTagRuleState,
                    PropertyType = (ushort)PropertyType.PtypInteger32
                };
                pidTagRuleState.PropertyTag = pidTagRuleStatePropertyTag;
                pidTagRuleState.Value = BitConverter.GetBytes((uint)ruleState);
                propertyList.Add(pidTagRuleState);

                if (otherInfo.Name.Length > 0)
                {
                    TaggedPropertyValue pidTagRuleName = new TaggedPropertyValue();
                    PropertyTag pidTagRuleNamePropertyTag = new PropertyTag
                    {
                        PropertyId = (ushort)PropertyId.PidTagRuleName,
                        PropertyType = (ushort)PropertyType.PtypString
                    };
                    pidTagRuleName.PropertyTag = pidTagRuleNamePropertyTag;
                    pidTagRuleName.Value = Encoding.Unicode.GetBytes((string)otherInfo.Name + "\0");
                    propertyList.Add(pidTagRuleName);
                }

                if (otherInfo.Provider.Length > 0)
                {
                    TaggedPropertyValue pidTagRuleProvider = new TaggedPropertyValue();
                    PropertyTag pidTagRuleProviderPropertyTag = new PropertyTag
                    {
                        PropertyId = (ushort)PropertyId.PidTagRuleProvider,
                        PropertyType = (ushort)PropertyType.PtypString
                    };
                    pidTagRuleProvider.PropertyTag = pidTagRuleProviderPropertyTag;
                    pidTagRuleProvider.Value = Encoding.Unicode.GetBytes((string)otherInfo.Provider + "\0");
                    propertyList.Add(pidTagRuleProvider);
                }

                if (otherInfo.UserFlag.Length > 0)
                {
                    TaggedPropertyValue pidTagRuleUserFlags = new TaggedPropertyValue();
                    PropertyTag pidTagRuleUserFlagsPropertyTag = new PropertyTag
                    {
                        PropertyId = (ushort)PropertyId.PidTagRuleUserFlags,
                        PropertyType = (ushort)PropertyType.PtypInteger32
                    };
                    pidTagRuleUserFlags.PropertyTag = pidTagRuleUserFlagsPropertyTag;
                    pidTagRuleUserFlags.Value = BitConverter.GetBytes(int.Parse(otherInfo.UserFlag));
                    propertyList.Add(pidTagRuleUserFlags);
                }

                if (otherInfo.ProviderData.Length > 0)
                {
                    TaggedPropertyValue pidTagRuleProviderData = new TaggedPropertyValue();
                    PropertyTag pidTagRuleProviderDataPropertyTag = new PropertyTag
                    {
                        PropertyId = (ushort)PropertyId.PidTagRuleProviderData,
                        PropertyType = (ushort)PropertyType.PtypBinary
                    };
                    pidTagRuleProviderData.PropertyTag = pidTagRuleProviderDataPropertyTag;
                    pidTagRuleProviderData.Value = Common.GetBytesFromBinaryHexString(otherInfo.ProviderData);
                    pidTagRuleProviderData.Value = Common.AddInt16LengthBeforeBinaryArray(pidTagRuleProviderData.Value);
                    propertyList.Add(pidTagRuleProviderData);
                }

                if (otherInfo.ConditionSubjectName.Length > 0)
                {
                    AddRuleCondition(propertyList, otherInfo.ConditionSubjectName);
                    AddRuleAction(propertyList, actionType, actionData, Constants.CommonActionFlavor, Constants.RuleActionFlags);
                }
            }

            ruleData.PropertyValues = propertyList.ToArray();
            ruleData.PropertyValueCount = (ushort)propertyList.Count;
            return ruleData;
        }
Beispiel #2
0
        /// <summary>
        /// Generate a sample valid RuleData structure.
        /// </summary>
        /// <param name="actionType">ActionType in a rule</param>
        /// <param name="ruleDataType">Rule data value.</param>
        /// <param name="ruleSequence">Rule sequence in PidTagRuleSequence of the RuleData</param>
        /// <param name="ruleState">Specifies value of PidTagRuleState of the RuleData</param>
        /// <param name="actionData">The actionData needed to construct the RuleData</param>
        /// <param name="ruleProperties">Rule properties structure.</param>
        /// <returns>A valid RuleData structure</returns>
        public static RuleData GenerateValidRuleData(ActionTypes actionType, TestRuleDataType ruleDataType, int ruleSequence, RuleState ruleState, IActionData actionData, RuleProperties ruleProperties)
        {
            RuleData ruleData = new RuleData
            {
                RuleDataFlags = (byte)ruleDataType
            };

            List <TaggedPropertyValue> propertyList       = new List <TaggedPropertyValue>();
            TaggedPropertyValue        pidTagRuleSequence = new TaggedPropertyValue();
            PropertyTag pidTagRuleSequencePropertyTag     = new PropertyTag
            {
                PropertyId   = (ushort)TestPropertyName.PidTagRuleSequence,
                PropertyType = (ushort)PropertyTypeName.PtypInteger32
            };

            pidTagRuleSequence.PropertyTag = pidTagRuleSequencePropertyTag;
            pidTagRuleSequence.Value       = BitConverter.GetBytes(ruleSequence);
            propertyList.Add(pidTagRuleSequence);

            TaggedPropertyValue pidTagRuleLevel            = new TaggedPropertyValue();
            PropertyTag         pidTagRuleLevelPropertyTag = new PropertyTag
            {
                PropertyId   = (ushort)TestPropertyName.PidTagRuleLevel,
                PropertyType = (ushort)PropertyTypeName.PtypInteger32
            };

            pidTagRuleLevel.PropertyTag = pidTagRuleLevelPropertyTag;
            pidTagRuleLevel.Value       = BitConverter.GetBytes(0);
            propertyList.Add(pidTagRuleLevel);

            TaggedPropertyValue pidTagRuleState            = new TaggedPropertyValue();
            PropertyTag         pidTagRuleStatePropertyTag = new PropertyTag
            {
                PropertyId   = (ushort)TestPropertyName.PidTagRuleState,
                PropertyType = (ushort)PropertyTypeName.PtypInteger32
            };

            pidTagRuleState.PropertyTag = pidTagRuleStatePropertyTag;
            pidTagRuleState.Value       = BitConverter.GetBytes((uint)ruleState);
            propertyList.Add(pidTagRuleState);

            if (ruleProperties.Name.Length > 0)
            {
                TaggedPropertyValue pidTagRuleName            = new TaggedPropertyValue();
                PropertyTag         pidTagRuleNamePropertyTag = new PropertyTag
                {
                    PropertyId   = (ushort)TestPropertyName.PidTagRuleName,
                    PropertyType = (ushort)PropertyTypeName.PtypString
                };
                pidTagRuleName.PropertyTag = pidTagRuleNamePropertyTag;
                pidTagRuleName.Value       = Encoding.Unicode.GetBytes((string)ruleProperties.Name + "\0");
                propertyList.Add(pidTagRuleName);
            }

            if (ruleProperties.Provider.Length > 0)
            {
                TaggedPropertyValue pidTagRuleProvider            = new TaggedPropertyValue();
                PropertyTag         pidTagRuleProviderPropertyTag = new PropertyTag
                {
                    PropertyId   = (ushort)TestPropertyName.PidTagRuleProvider,
                    PropertyType = (ushort)PropertyTypeName.PtypString
                };
                pidTagRuleProvider.PropertyTag = pidTagRuleProviderPropertyTag;
                pidTagRuleProvider.Value       = Encoding.Unicode.GetBytes((string)ruleProperties.Provider + "\0");
                propertyList.Add(pidTagRuleProvider);
            }

            if (ruleProperties.UserFlag.Length > 0)
            {
                TaggedPropertyValue pidTagRuleUserFlags            = new TaggedPropertyValue();
                PropertyTag         pidTagRuleUserFlagsPropertyTag = new PropertyTag
                {
                    PropertyId   = (ushort)TestPropertyName.PidTagRuleUserFlags,
                    PropertyType = (ushort)PropertyTypeName.PtypInteger32
                };
                pidTagRuleUserFlags.PropertyTag = pidTagRuleUserFlagsPropertyTag;
                pidTagRuleUserFlags.Value       = BitConverter.GetBytes(int.Parse(ruleProperties.UserFlag));
                propertyList.Add(pidTagRuleUserFlags);
            }

            if (ruleProperties.ProviderData.Length > 0)
            {
                TaggedPropertyValue pidTagRuleProviderData            = new TaggedPropertyValue();
                PropertyTag         pidTagRuleProviderDataPropertyTag = new PropertyTag
                {
                    PropertyId   = (ushort)TestPropertyName.PidTagRuleProviderData,
                    PropertyType = (ushort)PropertyTypeName.PtypBinary
                };
                pidTagRuleProviderData.PropertyTag = pidTagRuleProviderDataPropertyTag;
                pidTagRuleProviderData.Value       = Common.GetBytesFromBinaryHexString(ruleProperties.ProviderData);
                pidTagRuleProviderData.Value       = Common.AddInt16LengthBeforeBinaryArray(pidTagRuleProviderData.Value);
                propertyList.Add(pidTagRuleProviderData);
            }

            if (ruleProperties.ConditionSubjectName.Length > 0)
            {
                AddRuleCondition(propertyList, ruleProperties.ConditionSubjectName);
                AddRuleAction(propertyList, actionType, actionData, Constants.CommonActionFlavor, Constants.RuleActionFlags);
            }

            ruleData.PropertyValues     = propertyList.ToArray();
            ruleData.PropertyValueCount = (ushort)propertyList.Count;
            return(ruleData);
        }