aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Net/NetworkExtensions.cs
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2022-10-14 10:25:57 +0200
committerShadowghost <Ghost_of_Stone@web.de>2022-10-14 10:25:57 +0200
commit4aec41752f63594e169511a314f8f86a0dde9c35 (patch)
treed3905fc298631a84dd62e63ed9d90531bcf49be5 /MediaBrowser.Common/Net/NetworkExtensions.cs
parent7b90fcd0531e1fd414df404b58f2f05b0641be01 (diff)
Apply review suggestions
Diffstat (limited to 'MediaBrowser.Common/Net/NetworkExtensions.cs')
-rw-r--r--MediaBrowser.Common/Net/NetworkExtensions.cs54
1 files changed, 53 insertions, 1 deletions
diff --git a/MediaBrowser.Common/Net/NetworkExtensions.cs b/MediaBrowser.Common/Net/NetworkExtensions.cs
index 3d7d58b27..d7632c0de 100644
--- a/MediaBrowser.Common/Net/NetworkExtensions.cs
+++ b/MediaBrowser.Common/Net/NetworkExtensions.cs
@@ -138,7 +138,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Try parsing an array of strings into subnets, respecting exclusions.
/// </summary>
- /// <param name="values">Input string to be parsed.</param>
+ /// <param name="values">Input string array to be parsed.</param>
/// <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>
@@ -191,6 +191,58 @@ namespace MediaBrowser.Common.Net
}
/// <summary>
+ /// Try parsing a string into a subnet, respecting exclusions.
+ /// </summary>
+ /// <param name="value">Input string to be parsed.</param>
+ /// <param name="result">An <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 TryParseSubnet(string value, out IPNetwork? result, bool negated = false)
+ {
+ result = null;
+
+ if (string.IsNullOrEmpty(value))
+ {
+ return false;
+ }
+
+ string[] v = value.Trim().Split("/");
+
+ var address = IPAddress.None;
+ if (negated && v[0].StartsWith('!'))
+ {
+ _ = IPAddress.TryParse(v[0][1..], out address);
+ }
+ else if (!negated)
+ {
+ _ = IPAddress.TryParse(v[0][0..], out address);
+ }
+
+ if (address != IPAddress.None && address != null)
+ {
+ if (int.TryParse(v[1], out var netmask))
+ {
+ result = new IPNetwork(address, netmask);
+ }
+ else if (address.AddressFamily == AddressFamily.InterNetwork)
+ {
+ result = new IPNetwork(address, 32);
+ }
+ else if (address.AddressFamily == AddressFamily.InterNetworkV6)
+ {
+ result = new IPNetwork(address, 128);
+ }
+ }
+
+ if (result != null)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>
/// Attempts to parse a host string.
/// </summary>
/// <param name="host">Host name to parse.</param>