diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs
index fb843d1915..e4eecec18f 100644
--- a/MediaBrowser.Controller/IServerApplicationHost.cs
+++ b/MediaBrowser.Controller/IServerApplicationHost.cs
@@ -79,5 +79,12 @@ namespace MediaBrowser.Controller
/// The host.
/// System.String.
string GetLocalApiUrl(string host);
+
+ ///
+ /// Gets the local API URL.
+ ///
+ /// The ip address.
+ /// System.String.
+ string GetLocalApiUrl(IPAddress ipAddress);
}
}
diff --git a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs
index 2133888b61..8a30fbf406 100644
--- a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs
+++ b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs
@@ -161,7 +161,7 @@ namespace MediaBrowser.Dlna.Main
var descriptorURI = "/dlna/" + udn + "/description.xml";
- var uri = new Uri(_appHost.GetLocalApiUrl(addressString) + descriptorURI);
+ var uri = new Uri(_appHost.GetLocalApiUrl(address) + descriptorURI);
var services = new List
{
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
index 0328111c58..d2b48474c6 100644
--- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
@@ -171,7 +171,7 @@ namespace MediaBrowser.Dlna.PlayTo
private string GetServerAddress(IPAddress localIp)
{
- return _appHost.GetLocalApiUrl(localIp.ToString());
+ return _appHost.GetLocalApiUrl(localIp);
}
public void Dispose()
diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs
index d7477225c8..618b7ffc5e 100644
--- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs
+++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs
@@ -81,6 +81,12 @@ namespace MediaBrowser.Server.Implementations.Connect
if (!ip.StartsWith("http://", StringComparison.OrdinalIgnoreCase) &&
!ip.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
+ // Handle ipv6
+ if (ip.IndexOf(':') != -1)
+ {
+ ip = "[" + ip + "]";
+ }
+
ip = (_appHost.EnableHttps ? "https://" : "http://") + ip;
}
@@ -316,7 +322,7 @@ namespace MediaBrowser.Server.Implementations.Connect
try
{
- _fileSystem.CreateDirectory(Path.GetDirectoryName(path));
+ _fileSystem.CreateDirectory(Path.GetDirectoryName(path));
var json = _json.SerializeToString(_data);
@@ -324,7 +330,7 @@ namespace MediaBrowser.Server.Implementations.Connect
lock (_dataFileLock)
{
- _fileSystem.WriteAllText(path, encrypted, Encoding.UTF8);
+ _fileSystem.WriteAllText(path, encrypted, Encoding.UTF8);
}
}
catch (Exception ex)
@@ -341,7 +347,7 @@ namespace MediaBrowser.Server.Implementations.Connect
{
lock (_dataFileLock)
{
- var encrypted = _fileSystem.ReadAllText(path, Encoding.UTF8);
+ var encrypted = _fileSystem.ReadAllText(path, Encoding.UTF8);
var json = _encryption.DecryptString(encrypted);
@@ -381,7 +387,7 @@ namespace MediaBrowser.Server.Implementations.Connect
{
await UpdateConnectInfo().ConfigureAwait(false);
}
-
+
await _operationLock.WaitAsync().ConfigureAwait(false);
try
@@ -480,7 +486,7 @@ namespace MediaBrowser.Server.Implementations.Connect
{
await UpdateConnectInfo().ConfigureAwait(false);
}
-
+
await _operationLock.WaitAsync().ConfigureAwait(false);
try
diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
index b71fe365d3..269c306694 100644
--- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
+++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
@@ -97,6 +97,7 @@ using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
+using System.Net.Sockets;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
@@ -322,7 +323,7 @@ namespace MediaBrowser.Server.Startup.Common
{
TaskManager.SuspendTriggers = true;
}
-
+
await base.RunStartupTasks().ConfigureAwait(false);
Logger.Info("ServerId: {0}", SystemId);
@@ -1134,7 +1135,7 @@ namespace MediaBrowser.Server.Startup.Common
if (address != null)
{
- return GetLocalApiUrl(address.ToString());
+ return GetLocalApiUrl(address);
}
return null;
@@ -1148,6 +1149,16 @@ namespace MediaBrowser.Server.Startup.Common
}
}
+ public string GetLocalApiUrl(IPAddress ipAddress)
+ {
+ if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
+ {
+ return GetLocalApiUrl("[" + ipAddress + "]");
+ }
+
+ return GetLocalApiUrl(ipAddress.ToString());
+ }
+
public string GetLocalApiUrl(string host)
{
return string.Format("http://{0}:{1}",
@@ -1180,7 +1191,7 @@ namespace MediaBrowser.Server.Startup.Common
return true;
}
- var apiUrl = GetLocalApiUrl(address.ToString());
+ var apiUrl = GetLocalApiUrl(address);
apiUrl += "/system/ping";
if ((DateTime.UtcNow - _lastAddressCacheClear).TotalMinutes >= 5)