@ -120,26 +120,15 @@ namespace Emby.Server.Implementations.Networking
endpoint . StartsWith ( "169." , StringComparison . OrdinalIgnoreCase )
)
{
foreach ( NetworkInterface adapter in NetworkInterface . GetAllNetworkInterfaces ( ) )
{
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 subnets = GetSubnets ( endpointFirstPart ) ;
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 ) )
{
return true ;
}
}
if ( endpoint . StartsWith ( subnet_Match + "." , StringComparison . OrdinalIgnoreCase ) )
{
return true ;
}
}
}
@ -147,20 +136,24 @@ namespace Emby.Server.Implementations.Networking
return false ;
}
private Dictionary < string , string > _subnetLookup = new Dictionary < string , string > ( StringComparer . Ordinal ) ;
private string GetSubnet ( string endpointFirstPart )
private Dictionary < string , List < string > > _subnetLookup = new Dictionary < string , List < string > > ( StringComparer . Ordinal ) ;
private List < string > GetSubnet s ( string endpointFirstPart )
{
string subnet_Match = "" ;
List < string > subnets ;
lock ( _subnetLookup )
{
if ( _subnetLookup . TryGetValue ( endpointFirstPart , out subnet _Match ) )
if ( _subnetLookup . TryGetValue ( endpointFirstPart , out subnet s ) )
{
return subnet _Match ;
return subnet s ;
}
subnets = new List < string > ( ) ;
foreach ( NetworkInterface adapter in NetworkInterface . GetAllNetworkInterfaces ( ) )
{
foreach ( UnicastIPAddressInformation unicastIPAddressInformation in adapter . GetIPProperties ( ) . UnicastAddresses )
{
if ( unicastIPAddressInformation . Address . AddressFamily = = AddressFamily . InterNetwork & & endpointFirstPart = = unicastIPAddressInformation . Address . ToString ( ) . Split ( '.' ) [ 0 ] )
{
int subnet_Test = 0 ;
@ -170,16 +163,21 @@ namespace Emby.Server.Implementations.Networking
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 ) )
{
_subnetLookup [ endpointFirstPart ] = subnet_Match ;
// TODO: Is this check necessary?
if ( adapter . OperationalStatus = = OperationalStatus . Up )
{
subnets . Add ( subnet_Match ) ;
}
}
}
}
}
return subnet_Match ;
_subnetLookup [ endpointFirstPart ] = subnets ;
return subnets ;
}
}
private bool Is172AddressPrivate ( string endpoint )