Пример #1
0
        /// <summary>
        /// Get rules for chain name
        /// </summary>
        /// <param name="chain">chain name</param>
        /// <returns></returns>
        public IReadOnlyCollection <Rule> GetRules(string chain)
        {
            List <Rule> rules = new List <Rule>(10);

            for (var rulePtr = Libiptc4.iptc_first_rule(chain, _handle);
                 rulePtr != IntPtr.Zero;
                 rulePtr = Libiptc4.iptc_next_rule(rulePtr, _handle))
            {
                var          iptEntry = Marshal.PtrToStructure <IptEntry>(rulePtr);
                int          offset   = Sizes.Align(Sizes.IptEntryLen);
                List <Match> matches  = new List <Match>();
                // read matches
                while (iptEntry.target_offset > offset)
                {
                    offset += ReadMatch(rulePtr + offset, out Match match);
                    matches.Add(match);
                }
                // read targets
                offset = iptEntry.target_offset;
                Target target = null;
                if (iptEntry.next_offset > offset)
                {
                    offset += ReadTarget(rulePtr + offset, out target);
                }
                var rule = new RuleBuilder(iptEntry, matches, target).Build();
                rules.Add(rule);
            }
            return(new ReadOnlyCollection <Rule>(rules));
        }
Пример #2
0
        /// <summary>
        /// Get chains for current Table
        /// </summary>
        /// <returns></returns>
        public IReadOnlyCollection <string> GetChains()
        {
            List <string> chains = new List <string>(10);

            for (var chainPtr = Libiptc4.iptc_first_chain(_handle);
                 chainPtr != IntPtr.Zero;
                 chainPtr = Libiptc4.iptc_next_chain(_handle))
            {
                var chain = (string)Marshal.PtrToStringAnsi(chainPtr);
                chains.Add(chain);
            }
            return(new ReadOnlyCollection <string>(chains));
        }
Пример #3
0
 public IptTransaction(string tableName = Tables.FILTER)
 {
     Table   = tableName;
     _handle = Libiptc4.iptc_init(Table);
 }