|
@@ -9,6 +9,7 @@ using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using Emby.Dlna.PlayTo;
|
|
|
using Emby.Dlna.Ssdp;
|
|
|
+using Jellyfin.Networking.Configuration;
|
|
|
using Jellyfin.Networking.Manager;
|
|
|
using MediaBrowser.Common.Configuration;
|
|
|
using MediaBrowser.Common.Extensions;
|
|
@@ -52,6 +53,8 @@ namespace Emby.Dlna.Main
|
|
|
private readonly ISocketFactory _socketFactory;
|
|
|
private readonly INetworkManager _networkManager;
|
|
|
private readonly object _syncLock = new object();
|
|
|
+ private readonly NetworkConfiguration _netConfig;
|
|
|
+ private readonly bool _disabled;
|
|
|
|
|
|
private PlayToManager _manager;
|
|
|
private SsdpDevicePublisher _publisher;
|
|
@@ -122,6 +125,13 @@ namespace Emby.Dlna.Main
|
|
|
httpClientFactory,
|
|
|
config);
|
|
|
Current = this;
|
|
|
+
|
|
|
+ _netConfig = config.GetConfiguration<NetworkConfiguration>("network");
|
|
|
+ _disabled = appHost.ListenWithHttps && _netConfig.RequireHttps;
|
|
|
+ if (_disabled)
|
|
|
+ {
|
|
|
+ _logger.LogError("The DLNA specification does not support HTTPS.");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public static DlnaEntryPoint Current { get; private set; }
|
|
@@ -141,6 +151,12 @@ namespace Emby.Dlna.Main
|
|
|
{
|
|
|
await ((DlnaManager)_dlnaManager).InitProfilesAsync().ConfigureAwait(false);
|
|
|
|
|
|
+ if (_disabled)
|
|
|
+ {
|
|
|
+ // No use starting as dlna won't work, as we're running purely on HTTPS.
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
ReloadComponents();
|
|
|
|
|
|
_config.NamedConfigurationUpdated += OnNamedConfigurationUpdated;
|
|
@@ -296,12 +312,15 @@ namespace Emby.Dlna.Main
|
|
|
|
|
|
_logger.LogInformation("Registering publisher for {0} on {1}", fullService, address);
|
|
|
|
|
|
- var uri = new Uri(_appHost.GetSmartApiUrl(address.Address) + descriptorUri);
|
|
|
+ var uri = new UriBuilder(_appHost.GetSmartApiUrl(address.Address) + descriptorUri);
|
|
|
+ // DLNA will only work over http, so we must reset to http:// : {port}
|
|
|
+ uri.Scheme = "http://";
|
|
|
+ uri.Port = _netConfig.PublicPort;
|
|
|
|
|
|
var device = new SsdpRootDevice
|
|
|
{
|
|
|
CacheLifetime = TimeSpan.FromSeconds(1800), // How long SSDP clients can cache this info.
|
|
|
- Location = uri, // Must point to the URL that serves your devices UPnP description document.
|
|
|
+ Location = uri.Uri, // Must point to the URL that serves your devices UPnP description document.
|
|
|
Address = address.Address,
|
|
|
PrefixLength = address.PrefixLength,
|
|
|
FriendlyName = "Jellyfin",
|