aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Net
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common/Net')
-rw-r--r--MediaBrowser.Common/Net/DefaultHttpClientHandler.cs19
-rw-r--r--MediaBrowser.Common/Net/INetworkManager.cs9
-rw-r--r--MediaBrowser.Common/Net/IPHost.cs14
-rw-r--r--MediaBrowser.Common/Net/IPNetAddress.cs17
-rw-r--r--MediaBrowser.Common/Net/IPObject.cs17
-rw-r--r--MediaBrowser.Common/Net/NetworkExtensions.cs13
6 files changed, 31 insertions, 58 deletions
diff --git a/MediaBrowser.Common/Net/DefaultHttpClientHandler.cs b/MediaBrowser.Common/Net/DefaultHttpClientHandler.cs
deleted file mode 100644
index f1c5f2477..000000000
--- a/MediaBrowser.Common/Net/DefaultHttpClientHandler.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Net;
-using System.Net.Http;
-
-namespace MediaBrowser.Common.Net
-{
- /// <summary>
- /// Default http client handler.
- /// </summary>
- public class DefaultHttpClientHandler : HttpClientHandler
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="DefaultHttpClientHandler"/> class.
- /// </summary>
- public DefaultHttpClientHandler()
- {
- AutomaticDecompression = DecompressionMethods.All;
- }
- }
-}
diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs
index b6c390d23..b93939730 100644
--- a/MediaBrowser.Common/Net/INetworkManager.cs
+++ b/MediaBrowser.Common/Net/INetworkManager.cs
@@ -1,10 +1,8 @@
-#nullable enable
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Net;
using System.Net.NetworkInformation;
-using MediaBrowser.Common.Net;
using Microsoft.AspNetCore.Http;
namespace MediaBrowser.Common.Net
@@ -229,5 +227,12 @@ namespace MediaBrowser.Common.Net
/// <param name="filter">Optional filter for the list.</param>
/// <returns>Returns a filtered list of LAN addresses.</returns>
Collection<IPObject> GetFilteredLANSubnets(Collection<IPObject>? filter = null);
+
+ /// <summary>
+ /// Checks to see if <paramref name="remoteIp"/> has access.
+ /// </summary>
+ /// <param name="remoteIp">IP Address of client.</param>
+ /// <returns><b>True</b> if has access, otherwise <b>false</b>.</returns>
+ bool HasRemoteAccess(IPAddress remoteIp);
}
}
diff --git a/MediaBrowser.Common/Net/IPHost.cs b/MediaBrowser.Common/Net/IPHost.cs
index d67b6b8e1..5db8817ee 100644
--- a/MediaBrowser.Common/Net/IPHost.cs
+++ b/MediaBrowser.Common/Net/IPHost.cs
@@ -1,4 +1,3 @@
-#nullable enable
using System;
using System.Diagnostics;
using System.Linq;
@@ -135,7 +134,7 @@ namespace MediaBrowser.Common.Net
}
// See if it's an IPv6 with port address e.g. [::1] or [::1]:120.
- int i = host.IndexOf("]", StringComparison.OrdinalIgnoreCase);
+ int i = host.IndexOf(']', StringComparison.Ordinal);
if (i != -1)
{
return TryParse(host.Remove(i - 1).TrimStart(' ', '['), out hostObj);
@@ -389,8 +388,8 @@ namespace MediaBrowser.Common.Net
/// <inheritdoc/>
protected override IPObject CalculateNetworkAddress()
{
- var netAddr = NetworkAddressOf(this[0], PrefixLength);
- return new IPNetAddress(netAddr.Address, netAddr.PrefixLength);
+ var (address, prefixLength) = NetworkAddressOf(this[0], PrefixLength);
+ return new IPNetAddress(address, prefixLength);
}
/// <summary>
@@ -400,10 +399,7 @@ namespace MediaBrowser.Common.Net
private bool ResolveHost()
{
// When was the last time we resolved?
- if (_lastResolved == null)
- {
- _lastResolved = DateTime.UtcNow;
- }
+ _lastResolved ??= DateTime.UtcNow;
// If we haven't resolved before, or our timer has run out...
if ((_addresses.Length == 0 && !Resolved) || (DateTime.UtcNow > _lastResolved.Value.AddMinutes(Timeout)))
@@ -427,7 +423,7 @@ namespace MediaBrowser.Common.Net
// Resolves the host name - so save a DNS lookup.
if (string.Equals(HostName, "localhost", StringComparison.OrdinalIgnoreCase))
{
- _addresses = new IPAddress[] { new IPAddress(Ipv4Loopback), new IPAddress(Ipv6Loopback) };
+ _addresses = new IPAddress[] { IPAddress.Loopback, IPAddress.IPv6Loopback };
return;
}
diff --git a/MediaBrowser.Common/Net/IPNetAddress.cs b/MediaBrowser.Common/Net/IPNetAddress.cs
index 59e37a5c6..f6e3971bf 100644
--- a/MediaBrowser.Common/Net/IPNetAddress.cs
+++ b/MediaBrowser.Common/Net/IPNetAddress.cs
@@ -1,4 +1,3 @@
-#nullable enable
using System;
using System.Net;
using System.Net.Sockets;
@@ -38,7 +37,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// IP6Loopback address host.
/// </summary>
- public static readonly IPNetAddress IP6Loopback = IPNetAddress.Parse("::1");
+ public static readonly IPNetAddress IP6Loopback = new IPNetAddress(IPAddress.IPv6Loopback);
/// <summary>
/// Object's IP address.
@@ -113,7 +112,7 @@ namespace MediaBrowser.Common.Net
}
// Is it a network?
- string[] tokens = addr.Split("/");
+ string[] tokens = addr.Split('/');
if (tokens.Length == 2)
{
@@ -171,8 +170,8 @@ namespace MediaBrowser.Common.Net
address = address.MapToIPv4();
}
- var altAddress = NetworkAddressOf(address, PrefixLength);
- return NetworkAddress.Address.Equals(altAddress.Address) && NetworkAddress.PrefixLength >= altAddress.PrefixLength;
+ var (altAddress, altPrefix) = NetworkAddressOf(address, PrefixLength);
+ return NetworkAddress.Address.Equals(altAddress) && NetworkAddress.PrefixLength >= altPrefix;
}
/// <inheritdoc/>
@@ -196,8 +195,8 @@ namespace MediaBrowser.Common.Net
return NetworkAddress.PrefixLength <= netaddrObj.PrefixLength;
}
- var altAddress = NetworkAddressOf(netaddrObj.Address, PrefixLength);
- return NetworkAddress.Address.Equals(altAddress.Address);
+ var altAddress = NetworkAddressOf(netaddrObj.Address, PrefixLength).address;
+ return NetworkAddress.Address.Equals(altAddress);
}
return false;
@@ -270,8 +269,8 @@ namespace MediaBrowser.Common.Net
/// <inheritdoc/>
protected override IPObject CalculateNetworkAddress()
{
- var value = NetworkAddressOf(_address, PrefixLength);
- return new IPNetAddress(value.Address, value.PrefixLength);
+ var (address, prefixLength) = NetworkAddressOf(_address, PrefixLength);
+ return new IPNetAddress(address, prefixLength);
}
}
}
diff --git a/MediaBrowser.Common/Net/IPObject.cs b/MediaBrowser.Common/Net/IPObject.cs
index 69cd57f8a..2612268fd 100644
--- a/MediaBrowser.Common/Net/IPObject.cs
+++ b/MediaBrowser.Common/Net/IPObject.cs
@@ -1,4 +1,3 @@
-#nullable enable
using System;
using System.Net;
using System.Net.Sockets;
@@ -11,16 +10,6 @@ namespace MediaBrowser.Common.Net
public abstract class IPObject : IEquatable<IPObject>
{
/// <summary>
- /// IPv6 Loopback address.
- /// </summary>
- protected static readonly byte[] Ipv6Loopback = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
-
- /// <summary>
- /// IPv4 Loopback address.
- /// </summary>
- protected static readonly byte[] Ipv4Loopback = { 127, 0, 0, 1 };
-
- /// <summary>
/// The network address of this object.
/// </summary>
private IPObject? _networkAddress;
@@ -64,7 +53,7 @@ namespace MediaBrowser.Common.Net
/// <param name="address">IP Address to convert.</param>
/// <param name="prefixLength">Subnet prefix.</param>
/// <returns>IPAddress.</returns>
- public static (IPAddress Address, byte PrefixLength) NetworkAddressOf(IPAddress address, byte prefixLength)
+ public static (IPAddress address, byte prefixLength) NetworkAddressOf(IPAddress address, byte prefixLength)
{
if (address == null)
{
@@ -78,7 +67,7 @@ namespace MediaBrowser.Common.Net
if (IsLoopback(address))
{
- return (Address: address, PrefixLength: prefixLength);
+ return (address, prefixLength);
}
// An ip address is just a list of bytes, each one representing a segment on the network.
@@ -110,7 +99,7 @@ namespace MediaBrowser.Common.Net
}
// Return the network address for the prefix.
- return (Address: new IPAddress(addressBytes), PrefixLength: prefixLength);
+ return (new IPAddress(addressBytes), prefixLength);
}
/// <summary>
diff --git a/MediaBrowser.Common/Net/NetworkExtensions.cs b/MediaBrowser.Common/Net/NetworkExtensions.cs
index 9c1a0cf49..264bfacb4 100644
--- a/MediaBrowser.Common/Net/NetworkExtensions.cs
+++ b/MediaBrowser.Common/Net/NetworkExtensions.cs
@@ -27,9 +27,11 @@ namespace MediaBrowser.Common.Net
/// </summary>
/// <param name="source">The <see cref="Collection{IPObject}"/>.</param>
/// <param name="item">Item to add.</param>
- public static void AddItem(this Collection<IPObject> source, IPObject item)
+ /// <param name="itemsAreNetworks">If <c>true</c> the values are treated as subnets.
+ /// If <b>false</b> items are addresses.</param>
+ public static void AddItem(this Collection<IPObject> source, IPObject item, bool itemsAreNetworks = true)
{
- if (!source.ContainsAddress(item))
+ if (!source.ContainsAddress(item) || !itemsAreNetworks)
{
source.Add(item);
}
@@ -190,8 +192,9 @@ namespace MediaBrowser.Common.Net
/// </summary>
/// <param name="source">The <see cref="Collection{IPObject}"/>.</param>
/// <param name="excludeList">Items to exclude.</param>
+ /// <param name="isNetwork">Collection is a network collection.</param>
/// <returns>A new collection, with the items excluded.</returns>
- public static Collection<IPObject> Exclude(this Collection<IPObject> source, Collection<IPObject> excludeList)
+ public static Collection<IPObject> Exclude(this Collection<IPObject> source, Collection<IPObject> excludeList, bool isNetwork)
{
if (source.Count == 0 || excludeList == null)
{
@@ -216,7 +219,7 @@ namespace MediaBrowser.Common.Net
if (!found)
{
- results.AddItem(outer);
+ results.AddItem(outer, isNetwork);
}
}
@@ -229,7 +232,7 @@ namespace MediaBrowser.Common.Net
/// <param name="source">The <see cref="Collection{IPObject}"/>.</param>
/// <param name="target">Collection to compare with.</param>
/// <returns>A collection containing all the matches.</returns>
- public static Collection<IPObject> Union(this Collection<IPObject> source, Collection<IPObject> target)
+ public static Collection<IPObject> ThatAreContainedInNetworks(this Collection<IPObject> source, Collection<IPObject> target)
{
if (source.Count == 0)
{