Single IP address range used in the solution for quick IP range checks to support IP restrictions on the SobekCM engine
Exemple #1
0
        /// <summary> Add a single IP restriction range to this set </summary>
        /// <param name="StartIpAddress"> First IP address in the range (as a string)</param>
        /// <param name="EndIpAddress">  Last IP address in the range (as a string)</param>
        public void AddIpRange(string StartIpAddress, string EndIpAddress)
        {
            SingleIpRangeV4 range = new SingleIpRangeV4(StartIpAddress, EndIpAddress);

            AddIpRange(range);
            prefixDictionary = null;
        }
Exemple #2
0
        /// <summary> Add a single IP restriction range to this set </summary>
        /// <param name="SingleIpAddress"> Single IP address/range (as an unsigned long)</param>
        public void AddIpRange(ulong SingleIpAddress)
        {
            SingleIpRangeV4 range = new SingleIpRangeV4(SingleIpAddress);

            AddIpRange(range);
            prefixDictionary = null;
        }
Exemple #3
0
        /// <summary> Readies this set for comparisons, by building some internal data structures </summary>
        public void Ready()
        {
            Dictionary <byte, SortedList <ulong, SingleIpRangeV4> > tempDictionary = new Dictionary <byte, SortedList <ulong, SingleIpRangeV4> >();

            foreach (SingleIpRangeV4 ipRange in ranges)
            {
                if (tempDictionary.ContainsKey(ipRange.Prefix))
                {
                    SortedList <ulong, SingleIpRangeV4> individualPrefixDictionary = tempDictionary[ipRange.Prefix];
                    if (individualPrefixDictionary.ContainsKey(ipRange.StartIpAddress))
                    {
                        // Sorted list requires unique keys, and another ip range
                        // apparently starts with the same IP number!  Compare the two
                        SingleIpRangeV4 currentRange = individualPrefixDictionary[ipRange.StartIpAddress];

                        // Is the current range a RANGE< or just a single IP?
                        if (!currentRange.EndIpAddress.HasValue)
                        {
                            // Not a range, so just use the current one (which may be a range)
                            individualPrefixDictionary[ipRange.StartIpAddress] = ipRange;
                        }
                        else
                        {
                            // Since the current is a range, compare to new if that is also a range
                            if (ipRange.EndIpAddress.HasValue)
                            {
                                individualPrefixDictionary[ipRange.StartIpAddress].EndIpAddress = Math.Max(currentRange.EndIpAddress.Value, ipRange.EndIpAddress.Value);
                            }
                        }
                    }
                    else
                    {
                        individualPrefixDictionary.Add(ipRange.StartIpAddress, ipRange);
                    }
                }
                else
                {
                    SortedList <ulong, SingleIpRangeV4> newSorted = new SortedList <ulong, SingleIpRangeV4> {
                        { ipRange.StartIpAddress, ipRange }
                    };
                    tempDictionary[ipRange.Prefix] = newSorted;
                }
            }

            prefixDictionary = new Dictionary <byte, IList <SingleIpRangeV4> >();
            foreach (byte thisKey in tempDictionary.Keys)
            {
                prefixDictionary[thisKey] = tempDictionary[thisKey].Values;
            }
        }
Exemple #4
0
 /// <summary> Add a single IP restriction range to this set </summary>
 /// <param name="IpRange"> Single IP range </param>
 public void AddIpRange(SingleIpRangeV4 IpRange)
 {
     ranges.Add(IpRange);
     prefixDictionary = null;
 }
 /// <summary> Add a single IP restriction range to this set </summary>
 /// <param name="StartIpAddress"> First IP address in the range (as a string)</param>
 /// <param name="EndIpAddress">  Last IP address in the range (as a string)</param>
 public void AddIpRange(string StartIpAddress, string EndIpAddress)
 {
     SingleIpRangeV4 range = new SingleIpRangeV4(StartIpAddress, EndIpAddress);
     AddIpRange(range);
     prefixDictionary = null;
 }
 /// <summary> Add a single IP restriction range to this set </summary>
 /// <param name="SingleIpAddress"> Single IP address/range (as an unsigned long)</param>
 public void AddIpRange(ulong SingleIpAddress)
 {
     SingleIpRangeV4 range = new SingleIpRangeV4(SingleIpAddress);
     AddIpRange(range);
     prefixDictionary = null;
 }
 /// <summary> Add a single IP restriction range to this set </summary>
 /// <param name="IpRange"> Single IP range </param>
 public void AddIpRange(SingleIpRangeV4 IpRange )
 {
     ranges.Add(IpRange);
     prefixDictionary = null;
 }