@ -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" ,