Use new IPNetwork.TryParse function

This commit is contained in:
Bond_009
2023-11-16 00:50:17 +01:00
parent 464de13acf
commit 3c3f0a765e
2 changed files with 17 additions and 39 deletions

View File

@@ -197,46 +197,29 @@ public static partial class NetworkUtils
/// <returns><c>True</c> if parsing was successful.</returns>
public static bool TryParseToSubnet(ReadOnlySpan<char> value, [NotNullWhen(true)] out IPNetwork? result, bool negated = false)
{
var splitString = value.Trim().Split('/');
if (splitString.MoveNext())
value = value.Trim();
if (value.Contains('/'))
{
var ipBlock = splitString.Current;
var address = IPAddress.None;
if (negated && ipBlock.StartsWith("!") && IPAddress.TryParse(ipBlock[1..], out var tmpAddress))
if (negated && value.StartsWith("!") && IPNetwork.TryParse(value[1..], out result))
{
address = tmpAddress;
return true;
}
else if (!negated && IPAddress.TryParse(ipBlock, out tmpAddress))
else if (!negated && IPNetwork.TryParse(value, out result))
{
address = tmpAddress;
return true;
}
if (address != IPAddress.None)
}
else if (IPAddress.TryParse(value, out var address))
{
if (address.AddressFamily == AddressFamily.InterNetwork)
{
if (splitString.MoveNext())
{
var subnetBlock = splitString.Current;
if (int.TryParse(subnetBlock, out var netmask))
{
result = new IPNetwork(address, netmask);
return true;
}
else if (IPAddress.TryParse(subnetBlock, out var netmaskAddress))
{
result = new IPNetwork(address, NetworkUtils.MaskToCidr(netmaskAddress));
return true;
}
}
else if (address.AddressFamily == AddressFamily.InterNetwork)
{
result = address.Equals(IPAddress.Any) ? NetworkConstants.IPv4Any : new IPNetwork(address, NetworkConstants.MinimumIPv4PrefixSize);
return true;
}
else if (address.AddressFamily == AddressFamily.InterNetworkV6)
{
result = address.Equals(IPAddress.IPv6Any) ? NetworkConstants.IPv6Any : new IPNetwork(address, NetworkConstants.MinimumIPv6PrefixSize);
return true;
}
result = address.Equals(IPAddress.Any) ? NetworkConstants.IPv4Any : new IPNetwork(address, NetworkConstants.MinimumIPv4PrefixSize);
return true;
}
else if (address.AddressFamily == AddressFamily.InterNetworkV6)
{
result = address.Equals(IPAddress.IPv6Any) ? NetworkConstants.IPv6Any : new IPNetwork(address, NetworkConstants.MinimumIPv6PrefixSize);
return true;
}
}