SasIPRange
Represents a range of allowed IP addresses for constructing a Shared
Access Signature.
using System;
using System.ComponentModel;
using System.Net;
namespace Azure.Storage.Sas
{
public readonly struct SasIPRange : IEquatable<SasIPRange>
{
public IPAddress Start { get; }
public IPAddress End { get; }
public SasIPRange(IPAddress start, IPAddress end = null)
{
Start = (start ?? IPAddress.None);
End = (end ?? IPAddress.None);
}
private static bool IsEmpty(IPAddress address)
{
if (address != null)
return address == IPAddress.None;
return true;
}
public override string ToString()
{
if (!IsEmpty(Start)) {
if (!IsEmpty(End))
return Start.ToString() + "-" + End.ToString();
return Start.ToString();
}
return string.Empty;
}
public static SasIPRange Parse(string s)
{
int num = s.IndexOf('-');
if (num != -1)
return new SasIPRange(IPAddress.Parse(s.Substring(0, num)), IPAddress.Parse(s.Substring(num + 1)));
return new SasIPRange(IPAddress.Parse(s), null);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public override bool Equals(object obj)
{
if (obj is SasIPRange) {
SasIPRange other = (SasIPRange)obj;
return Equals(other);
}
return false;
}
[EditorBrowsable(EditorBrowsableState.Never)]
public override int GetHashCode()
{
return (Start?.GetHashCode() ?? 0) ^ (End?.GetHashCode() ?? 0);
}
public static bool operator ==(SasIPRange left, SasIPRange right)
{
return left.Equals(right);
}
public static bool operator !=(SasIPRange left, SasIPRange right)
{
return !(left == right);
}
public bool Equals(SasIPRange other)
{
if ((IsEmpty(Start) && IsEmpty(other.Start)) || (Start != null && Start.Equals(other.Start))) {
if (!IsEmpty(End) || !IsEmpty(other.End)) {
if (End != null)
return End.Equals(other.End);
return false;
}
return true;
}
return false;
}
}
}