cache subnet results

pull/1154/head
Luke Pulverenti 8 years ago
parent 902101355a
commit 44a270fa6f

@ -120,20 +120,11 @@ namespace Emby.Server.Implementations.Networking
endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase) endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase)
) )
{ {
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) var subnets = GetSubnets(endpointFirstPart);
{
foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses)
{
if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork && endpointFirstPart == unicastIPAddressInformation.Address.ToString().Split('.')[0])
{
int subnet_Test = 0;
foreach (string part in unicastIPAddressInformation.IPv4Mask.ToString().Split('.'))
{
if (part.Equals("0")) break;
subnet_Test++;
}
var subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); foreach (var subnet_Match in subnets)
{
//Logger.Debug("subnet_Match:" + subnet_Match);
if (endpoint.StartsWith(subnet_Match + ".", StringComparison.OrdinalIgnoreCase)) if (endpoint.StartsWith(subnet_Match + ".", StringComparison.OrdinalIgnoreCase))
{ {
@ -141,26 +132,28 @@ namespace Emby.Server.Implementations.Networking
} }
} }
} }
}
}
return false; return false;
} }
private Dictionary<string, string> _subnetLookup = new Dictionary<string, string>(StringComparer.Ordinal); private Dictionary<string, List<string>> _subnetLookup = new Dictionary<string, List<string>>(StringComparer.Ordinal);
private string GetSubnet(string endpointFirstPart) private List<string> GetSubnets(string endpointFirstPart)
{ {
string subnet_Match = ""; List<string> subnets;
lock (_subnetLookup) lock (_subnetLookup)
{ {
if (_subnetLookup.TryGetValue(endpointFirstPart, out subnet_Match)) if (_subnetLookup.TryGetValue(endpointFirstPart, out subnets))
{ {
return subnet_Match; return subnets;
} }
subnets = new List<string>();
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses) foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses)
{
if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork && endpointFirstPart == unicastIPAddressInformation.Address.ToString().Split('.')[0]) if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork && endpointFirstPart == unicastIPAddressInformation.Address.ToString().Split('.')[0])
{ {
int subnet_Test = 0; int subnet_Test = 0;
@ -170,16 +163,21 @@ namespace Emby.Server.Implementations.Networking
subnet_Test++; subnet_Test++;
} }
subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); var subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray());
}
if (!string.IsNullOrWhiteSpace(subnet_Match)) // TODO: Is this check necessary?
if (adapter.OperationalStatus == OperationalStatus.Up)
{ {
_subnetLookup[endpointFirstPart] = subnet_Match; subnets.Add(subnet_Match);
}
} }
} }
}
_subnetLookup[endpointFirstPart] = subnets;
return subnet_Match; return subnets;
}
} }
private bool Is172AddressPrivate(string endpoint) private bool Is172AddressPrivate(string endpoint)

Loading…
Cancel
Save