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