[Fix] NetworkManager binding to [::] (#4549)

* Autodiscovery enable/disable patch

* Fixed [::] issue on bind. Altered test.

* Update UdpServerEntryPoint.cs

* Update Jellyfin.Networking.Tests.csproj

* Update Jellyfin.Networking.Tests.csproj

* Update INetworkManager.cs
This commit is contained in:
BaronGreenback
2020-11-24 05:11:02 +00:00
committed by GitHub
parent 6676ca4d1b
commit 50e375020a
3 changed files with 36 additions and 29 deletions

View File

@@ -84,7 +84,7 @@ namespace Jellyfin.Networking.Manager
private Collection<IPObject> _internalInterfaces;
/// <summary>
/// Flag set when no custom LAN has been defined in the config.
/// Flag set when no custom LAN has been defined in the configuration.
/// </summary>
private bool _usingPrivateAddresses;
@@ -228,7 +228,7 @@ namespace Jellyfin.Networking.Manager
}
/// <inheritdoc/>
public Collection<IPObject> CreateIPCollection(string[] values, bool bracketed = false)
public Collection<IPObject> CreateIPCollection(string[] values, bool negated = false)
{
Collection<IPObject> col = new Collection<IPObject>();
if (values == null)
@@ -242,21 +242,14 @@ namespace Jellyfin.Networking.Manager
try
{
if (v.StartsWith('[') && v.EndsWith(']'))
if (v.StartsWith('!'))
{
if (bracketed)
{
AddToCollection(col, v[1..^1]);
}
}
else if (v.StartsWith('!'))
{
if (bracketed)
if (negated)
{
AddToCollection(col, v[1..]);
}
}
else if (!bracketed)
else if (!negated)
{
AddToCollection(col, v);
}
@@ -730,7 +723,7 @@ namespace Jellyfin.Networking.Manager
}
/// <summary>
/// Parses a string and adds it into the the collection, replacing any interface references.
/// Parses a string and adds it into the collection, replacing any interface references.
/// </summary>
/// <param name="col"><see cref="Collection{IPObject}"/>Collection.</param>
/// <param name="token">String value to parse.</param>
@@ -755,7 +748,19 @@ namespace Jellyfin.Networking.Manager
}
else if (TryParse(token, out IPObject obj))
{
if (!IsIP6Enabled)
// Expand if the ip address is "any".
if ((obj.Address.Equals(IPAddress.Any) && IsIP4Enabled)
|| (obj.Address.Equals(IPAddress.IPv6Any) && IsIP6Enabled))
{
foreach (IPNetAddress iface in _interfaceAddresses)
{
if (obj.AddressFamily == iface.AddressFamily)
{
col.AddItem(iface);
}
}
}
else if (!IsIP6Enabled)
{
// Remove IP6 addresses from multi-homed IPHosts.
obj.Remove(AddressFamily.InterNetworkV6);
@@ -872,7 +877,7 @@ namespace Jellyfin.Networking.Manager
else
{
var replacement = parts[1].Trim();
if (string.Equals(parts[0], "remaining", StringComparison.OrdinalIgnoreCase))
if (string.Equals(parts[0], "all", StringComparison.OrdinalIgnoreCase))
{
_publishedServerUrls[new IPNetAddress(IPAddress.Broadcast)] = replacement;
}
@@ -956,7 +961,7 @@ namespace Jellyfin.Networking.Manager
{
_logger.LogDebug("Refreshing LAN information.");
// Get config options.
// Get configuration options.
string[] subnets = config.LocalNetworkSubnets;
// Create lists from user settings.