private static bool IsBoundsIntersects(RangeBounds firstRange, RangeBounds secondRange)
        {
            if (firstRange.LowerBound.IsGreaterThen(firstRange.UpperBound))
            {
                throw new RegoException("IP address range lower bound can't be greater then upper");
            }

            if (secondRange.LowerBound.IsGreaterThen(secondRange.UpperBound))
            {
                throw new RegoException("IP address range lower bound can't be greater then upper");
            }

            return(firstRange.UpperBound.IsGreaterOrEquals(secondRange.LowerBound) &&
                   secondRange.UpperBound.IsGreaterOrEquals(firstRange.LowerBound));
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="pHandle">the handle of the region
        /// </param>
        /// <param name="pDimensions">the dimensions of the region
        /// </param>
        public RegionDescriptor(IRegionHandle pHandle, IDimensionHandleSet pDimensions)
        {
            handle     = pHandle;
            dimensions = pDimensions;

            //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1073_javautilHashMap_3"'
            dimensionRangeBoundsMap = new System.Collections.Hashtable();

            System.Collections.IEnumerator it = dimensions.GetEnumerator();

            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1073_javautilIteratorhasNext_3"'
            while (it.MoveNext())
            {
                RangeBounds rb = new RangeBounds(System.Int64.MinValue, System.Int64.MaxValue);
                dimensionRangeBoundsMap[(IDimensionHandle)it.Current] = rb;
            }
        }
        private static RangeBounds GetBounds(string range)
        {
            RangeBounds result;

            if (IsIpV4(range))
            {
                if (range.Contains("-"))
                {
                    var lowerSegments = new List <string>();
                    lowerSegments.AddRange(
                        range.Split('.')
                        .Select(segment => segment.Split('-'))
                        .Select(segmentRange => segmentRange.First()));

                    var upperSegments = new List <string>();
                    upperSegments.AddRange(
                        range.Split('.')
                        .Select(segment => segment.Split('-'))
                        .Select(segmentRange => segmentRange.Last()));

                    result = new RangeBounds(ParseIpAddress(string.Join(".", lowerSegments)),
                                             ParseIpAddress(string.Join(".", upperSegments)));
                }
                else if (range.Contains("/"))
                {
                    var network = IPNetwork.Parse(range);
                    result = new RangeBounds(network.Network, network.Broadcast);
                }
                else
                {
                    var address = ParseIpAddress(range);

                    result = new RangeBounds(address, address);
                }
            }
            else
            {
                if (range.Contains("/"))
                {
                    //Split the string in parts for address and prefix
                    var strAddress = range.Split('/').First();
                    var strPrefix  = range.Split('/').Last();

                    var iPrefix   = Int32.Parse(strPrefix);
                    var ipAddress = ParseIpAddress(strAddress);

                    //Convert the prefix length to a valid SubnetMask

                    const int iMaskLength = 128;

                    var btArray = new BitArray(iMaskLength);
                    for (var iC1 = 0; iC1 < iMaskLength; iC1++)
                    {
                        //Index calculation is a bit strange, since you have to make your mind about byte order.
                        var iIndex = (iMaskLength - iC1 - 1) / 8 * 8 + (iC1 % 8);

                        btArray.Set(iIndex, iC1 >= (iMaskLength - iPrefix));
                    }

                    var bMaskData = new byte[iMaskLength / 8];

                    btArray.CopyTo(bMaskData, 0);

                    //Create subnet mask
                    var subnetMask = new IPAddress(bMaskData);

                    //Get the IP range
                    var ipaStart = ParseIpAddress(strAddress);
                    var ipaEnd   = ipAddress.GetBroadcastAddress(subnetMask);

                    result = new RangeBounds(ipaStart, ipaEnd);
                }
                else
                {
                    var address = ParseIpAddress(range);
                    result = new RangeBounds(address, address);
                }
            }

            return(result);
        }
Esempio n. 4
0
 /// <summary>
 /// Sets the range bounds for the specified dimension.
 /// </summary>
 /// <param name="dimension">the handle of the dimension
 /// </param>
 /// <param name="bounds">the new bounds for the dimension
 /// </param>
 public virtual void setRangeBounds(IDimensionHandle dimension, RangeBounds bounds)
 {
     dimensionRangeBoundsMap[dimension] = bounds;
 }
Esempio n. 5
0
        public static bool IsInRange <T>([NotNull] this T value, [NotNull] T lower, [NotNull] T upper, RangeBounds bounds) where T : IComparable <T>
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (lower == null)
            {
                throw new ArgumentNullException(nameof(lower));
            }
            if (upper == null)
            {
                throw new ArgumentNullException(nameof(upper));
            }

            Order(ref lower, ref upper);

            if (typeof(T) == typeof(string))
            {
                return((value as string).IsInRange(lower as string, upper as string));
            }

            var comparand = bounds.HasFlag(RangeBounds.IncludeLower) ? 0 : 1;

            if (value.CompareTo(lower) < comparand)
            {
                return(false);
            }

            comparand = bounds.HasFlag(RangeBounds.IncludeUpper) ? 0 : -1;
            if (value.CompareTo(upper) > comparand)
            {
                return(false);
            }

            return(true);
        }