/// <summary> /// Compare value against IPAddress, byte array, UInt32, IpAddress of OctetString class value. /// </summary> /// <param name="obj">Type: <see cref="System.Net.IPAddress"/> or byte <see cref="Array"/> or <see cref="UInt32"/> or <see cref="IpAddress"/> or <see cref="OctetString"/></param> /// <returns>0 if class values are the same, -1 if current class value is less then or 1 if greater then the class value /// we are comparing against.</returns> public int CompareTo(object obj) { byte[] b = null; if (obj == null) { return(-1); } if (obj is IPAddress) { IPAddress ipa = (IPAddress)obj; b = ipa.GetAddressBytes(); } else if (obj is byte[]) { b = (byte[])obj; } else if (obj is UInt32) { IpAddress ipa = new IpAddress((UInt32)obj); b = ipa.ToArray(); } else if (obj is IpAddress) { b = ((IpAddress)obj).ToArray(); } else if (obj is OctetString) { b = ((OctetString)obj).ToArray(); } if (_data == null) { return(-1); } if (b.Length != _data.Length) { if (_data.Length < b.Length) { return(-1); } else { return(1); } } else { for (int i = 0; i < _data.Length; i++) { if (_data[i] < b[i]) { return(-1); } else if (_data[i] > b[i]) { return(1); } } return(0); } }
/// <summary> /// Return subnet address of the IP address in this object and supplied subnet mask /// </summary> /// <param name="mask">Subnet mask</param> /// <returns>New IpAddress object containing subnet address</returns> public IpAddress GetSubnetAddress(IpAddress mask) { byte[] ip = _data; byte[] m = mask.ToArray(); byte[] res = new byte[4]; for (int i = 0; i < 4; i++) { res[i] = (byte)(ip[i] & m[i]); } return(new IpAddress(res)); }
/// <summary> /// Return subnet address of the IP address in this object and supplied subnet mask /// </summary> /// <param name="mask">Subnet mask</param> /// <returns>New IpAddress object containing subnet address</returns> public IpAddress GetSubnetAddress(IpAddress mask) { var ip = _data; var m = mask.ToArray(); var res = new byte[4]; for (var i = 0; i < 4; i++) { res[i] = (byte)(ip[i] & m[i]); } return(new IpAddress(res)); }
/// <summary> /// Return subnet address of the IP address in this object and supplied subnet mask /// </summary> /// <param name="mask">Subnet mask</param> /// <returns>New IpAddress object containing subnet address</returns> public IpAddress GetSubnetAddress(IpAddress mask) { byte[] ip = _data; byte[] m = mask.ToArray(); byte[] res = new byte[4]; for (int i = 0; i < 4; i++) { res[i] = (byte)(ip[i] & m[i]); } return new IpAddress(res); }
/// <summary> /// Compare value against IPAddress, byte array, UInt32, IpAddress of OctetString class value. /// </summary> /// <param name="obj">Type: <see cref="System.Net.IPAddress"/> or byte <see cref="Array"/> or <see cref="UInt32"/> or <see cref="IpAddress"/> or <see cref="OctetString"/></param> /// <returns>0 if class values are the same, -1 if current class value is less then or 1 if greater then the class value /// we are comparing against.</returns> public int CompareTo(object obj) { byte[] b = null; if (obj == null) return -1; if (obj is IPAddress) { IPAddress ipa = (IPAddress)obj; b = ipa.GetAddressBytes(); } else if (obj is byte[]) { b = (byte[])obj; } else if (obj is UInt32) { IpAddress ipa = new IpAddress((UInt32)obj); b = ipa.ToArray(); } else if (obj is IpAddress) { b = ((IpAddress)obj).ToArray(); } else if (obj is OctetString) { b = ((OctetString)obj).ToArray(); } if (_data == null) return -1; if (b.Length != _data.Length) { if (_data.Length < b.Length) return -1; else return 1; } else { for (int i = 0; i < _data.Length; i++) { if (_data[i] < b[i]) { return -1; } else if (_data[i] > b[i]) { return 1; } } return 0; } }