public void FirewallConfiguration()
        {
            var payload = new FirewallRulePayload
            {
                SourcePort         = "41",
                Protocol           = "udp",
                Application        = "app",
                ChainName          = "chain",
                DestinationAddress = "127.0.0.1",
                DestinationPort    = "70",
                Enabled            = false,
                SourceAddress      = "10.0.0.1"
            };

            foreach (FirewallRulePayload.Directions value in Enum.GetValues(typeof(FirewallRulePayload.Directions)))
            {
                payload.Direction = value;
                var obj = new FirewallConfiguration(EventPriority.Low, payload);
                obj.ValidateSchema();
            }

            foreach (FirewallRulePayload.Actions value in Enum.GetValues(typeof(FirewallRulePayload.Actions)))
            {
                payload.Action = value;
                var obj = new FirewallConfiguration(EventPriority.Low, payload);
                obj.ValidateSchema();
            }

            payload.Priority = 4;
            var withPriority = new FirewallConfiguration(EventPriority.Low, payload);

            withPriority.ValidateSchema();
        }
        private IEnumerable<FirewallRulePayload> GetPayloads()
        {
            INetFwRules rules = _firewallPolicy.Rules;

            int count = rules.Count;
            IEnumVARIANT enumVARIANT = rules.get__NewEnum();
            object[] obj = new object[1];

            for (int i = 0; i < count; i++)
            {
                if (enumVARIANT.Next(1, obj, IntPtr.Zero) == 0)
                {
                    var rule = (INetFwRule)obj[0];

                    if (!ShouldHandleRule(rule))
                    {
                        continue;
                    }

                    FirewallRulePayload payload = new FirewallRulePayload();
                    payload.Action = rule.Action.ToIoTValue();
                    payload.Direction = rule.Direction.ToIoTValue();
                    payload.Enabled = rule.Enabled;
                    payload.Application = rule.ApplicationName;
                    payload.SourceAddress = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.RemoteAddresses : rule.LocalAddresses;
                    payload.SourcePort = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.RemotePorts : rule.LocalPorts;
                    payload.DestinationAddress = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.LocalAddresses : rule.RemoteAddresses;
                    payload.DestinationPort = rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN ? rule.LocalPorts : rule.RemotePorts;
                    payload.Protocol = ((FirewallRuleProtocol)rule.Protocol).ToString();
                    payload.Priority = null;
                    payload.ExtraDetails = new Dictionary<string, string>() { { RuleNameExtraDetailsKey, rule.Name } };

                    yield return payload;
                }
            }
        }