/// <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; }
/// <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); }