aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Net
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common/Net')
-rw-r--r--MediaBrowser.Common/Net/NetworkUtils.cs27
1 files changed, 15 insertions, 12 deletions
diff --git a/MediaBrowser.Common/Net/NetworkUtils.cs b/MediaBrowser.Common/Net/NetworkUtils.cs
index 9c9a35a166..5c854b39d5 100644
--- a/MediaBrowser.Common/Net/NetworkUtils.cs
+++ b/MediaBrowser.Common/Net/NetworkUtils.cs
@@ -6,6 +6,7 @@ using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;
using Jellyfin.Extensions;
+using MediaBrowser.Model.Net;
namespace MediaBrowser.Common.Net;
@@ -166,7 +167,7 @@ public static partial class NetworkUtils
/// <param name="result">Collection of <see cref="IPNetwork"/>.</param>
/// <param name="negated">Boolean signaling if negated or not negated values should be parsed.</param>
/// <returns><c>True</c> if parsing was successful.</returns>
- public static bool TryParseToSubnets(string[] values, [NotNullWhen(true)] out IReadOnlyList<IPNetwork>? result, bool negated = false)
+ public static bool TryParseToSubnets(string[] values, [NotNullWhen(true)] out IReadOnlyList<IPData>? result, bool negated = false)
{
if (values is null || values.Length == 0)
{
@@ -174,28 +175,28 @@ public static partial class NetworkUtils
return false;
}
- var tmpResult = new List<IPNetwork>();
+ List<IPData>? tmpResult = null;
for (int a = 0; a < values.Length; a++)
{
if (TryParseToSubnet(values[a], out var innerResult, negated))
{
- tmpResult.Add(innerResult);
+ (tmpResult ??= new()).Add(innerResult);
}
}
result = tmpResult;
- return tmpResult.Count > 0;
+ return result is not null;
}
/// <summary>
- /// Try parsing a string into an <see cref="IPNetwork"/>, respecting exclusions.
- /// Inputs without a subnet mask will be represented as <see cref="IPNetwork"/> with a single IP.
+ /// Try parsing a string into an <see cref="IPData"/>, respecting exclusions.
+ /// Inputs without a subnet mask will be represented as <see cref="IPData"/> with a single IP.
/// </summary>
/// <param name="value">Input string to be parsed.</param>
- /// <param name="result">An <see cref="IPNetwork"/>.</param>
+ /// <param name="result">An <see cref="IPData"/>.</param>
/// <param name="negated">Boolean signaling if negated or not negated values should be parsed.</param>
/// <returns><c>True</c> if parsing was successful.</returns>
- public static bool TryParseToSubnet(ReadOnlySpan<char> value, out IPNetwork result, bool negated = false)
+ public static bool TryParseToSubnet(ReadOnlySpan<char> value, [NotNullWhen(true)] out IPData? result, bool negated = false)
{
// If multiple IP addresses are in a comma-separated string, the individual addresses may contain leading and/or trailing whitespace
value = value.Trim();
@@ -213,10 +214,12 @@ public static partial class NetworkUtils
return false;
}
- if (value.Contains('/'))
+ var index = value.IndexOf('/');
+ if (index != -1)
{
- if (IPNetwork.TryParse(value, out result))
+ if (IPAddress.TryParse(value[..index], out var address) && IPNetwork.TryParse(value, out var subnet))
{
+ result = new IPData(address, subnet);
return true;
}
}
@@ -224,12 +227,12 @@ public static partial class NetworkUtils
{
if (address.AddressFamily == AddressFamily.InterNetwork)
{
- result = address.Equals(IPAddress.Any) ? NetworkConstants.IPv4Any : new IPNetwork(address, NetworkConstants.MinimumIPv4PrefixSize);
+ result = address.Equals(IPAddress.Any) ? new IPData(IPAddress.Any, NetworkConstants.IPv4Any) : new IPData(address, 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);
+ result = address.Equals(IPAddress.IPv6Any) ? new IPData(IPAddress.IPv6Any, NetworkConstants.IPv6Any) : new IPData(address, new IPNetwork(address, NetworkConstants.MinimumIPv6PrefixSize));
return true;
}
}