浏览代码

fix xbox one, ps4 not seeing dlna server

Luke Pulverenti 9 年之前
父节点
当前提交
cc98b04c5d

+ 3 - 1
MediaBrowser.Dlna/DlnaManager.cs

@@ -488,7 +488,9 @@ namespace MediaBrowser.Dlna
             var profile = GetProfile(headers) ??
                           GetDefaultProfile();
 
-            return new DescriptionXmlBuilder(profile, serverUuId, serverAddress, _appHost.FriendlyName, serverUuId.GetMD5().ToString("N")).GetXml();
+            var serverId = _appHost.SystemId;
+
+            return new DescriptionXmlBuilder(profile, serverUuId, serverAddress, _appHost.FriendlyName, serverId).GetXml();
         }
 
         public ImageStream GetIcon(string filename)

+ 6 - 6
MediaBrowser.Dlna/Main/DlnaEntryPoint.cs

@@ -157,9 +157,9 @@ namespace MediaBrowser.Dlna.Main
                 //}
 
                 var addressString = address.ToString();
-                var guid = addressString.GetMD5();
+                var udn = addressString.GetMD5().ToString("N");
 
-                var descriptorURI = "/dlna/" + guid.ToString("N") + "/description.xml";
+                var descriptorURI = "/dlna/" + udn + "/description.xml";
 
                 var uri = new Uri(_appHost.GetLocalApiUrl(addressString) + descriptorURI);
 
@@ -170,12 +170,12 @@ namespace MediaBrowser.Dlna.Main
                     "urn:schemas-upnp-org:service:ContentDirectory:1", 
                     "urn:schemas-upnp-org:service:ConnectionManager:1",
                     "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1",
-                    "uuid:" + guid.ToString("N")
+                    "uuid:" + udn
                 };
 
-                _ssdpHandler.RegisterNotification(guid, uri, address, services);
+                _ssdpHandler.RegisterNotification(udn, uri, address, services);
 
-                _registeredServerIds.Add(guid.ToString("N"));
+                _registeredServerIds.Add(udn);
             }
         }
 
@@ -240,7 +240,7 @@ namespace MediaBrowser.Dlna.Main
             {
                 try
                 {
-                    _ssdpHandler.UnregisterNotification(new Guid(id));
+                    _ssdpHandler.UnregisterNotification(id);
                 }
                 catch (Exception ex)
                 {

+ 1 - 1
MediaBrowser.Dlna/Server/DescriptionXmlBuilder.cs

@@ -122,7 +122,7 @@ namespace MediaBrowser.Dlna.Server
                 builder.Append("<serialNumber>" + SecurityElement.Escape(_profile.SerialNumber) + "</serialNumber>");
             }
 
-            builder.Append("<UDN>uuid:" + SecurityElement.Escape(_serverId) + "</UDN>");
+            builder.Append("<UDN>uuid:" + SecurityElement.Escape(_serverUdn) + "</UDN>");
             builder.Append("<presentationURL>" + SecurityElement.Escape(_serverAddress) + "</presentationURL>");
 
             if (!EnableAbsoluteUrls)

+ 3 - 3
MediaBrowser.Dlna/Server/UpnpDevice.cs

@@ -8,10 +8,10 @@ namespace MediaBrowser.Dlna.Server
         public readonly Uri Descriptor;
         public readonly string Type;
         public readonly string USN;
-        public readonly Guid Uuid;
+        public readonly string Uuid;
         public readonly IPAddress Address;
 
-        public UpnpDevice(Guid aUuid, string aType, Uri aDescriptor, IPAddress address)
+        public UpnpDevice(string aUuid, string aType, Uri aDescriptor, IPAddress address)
         {
             Uuid = aUuid;
             Type = aType;
@@ -25,7 +25,7 @@ namespace MediaBrowser.Dlna.Server
             }
             else
             {
-                USN = String.Format("uuid:{0}::{1}", Uuid.ToString("N"), Type);
+                USN = String.Format("uuid:{0}::{1}", Uuid, Type);
             }
         }
     }

+ 3 - 3
MediaBrowser.Dlna/Ssdp/SsdpHandler.cs

@@ -36,7 +36,7 @@ namespace MediaBrowser.Dlna.Ssdp
         private Timer _notificationTimer;
 
         private bool _isDisposed;
-        private readonly ConcurrentDictionary<Guid, List<UpnpDevice>> _devices = new ConcurrentDictionary<Guid, List<UpnpDevice>>();
+        private readonly ConcurrentDictionary<string, List<UpnpDevice>> _devices = new ConcurrentDictionary<string, List<UpnpDevice>>();
 
         private readonly IApplicationHost _appHost;
 
@@ -451,7 +451,7 @@ namespace MediaBrowser.Dlna.Ssdp
             SendDatagram(msg, _ssdpEndp, new IPEndPoint(dev.Address, 0), true);
         }
 
-        public void RegisterNotification(Guid uuid, Uri descriptionUri, IPAddress address, IEnumerable<string> services)
+        public void RegisterNotification(string uuid, Uri descriptionUri, IPAddress address, IEnumerable<string> services)
         {
             var list = _devices.GetOrAdd(uuid, new List<UpnpDevice>());
 
@@ -461,7 +461,7 @@ namespace MediaBrowser.Dlna.Ssdp
             _logger.Debug("Registered mount {0} at {1}", uuid, descriptionUri);
         }
 
-        public void UnregisterNotification(Guid uuid)
+        public void UnregisterNotification(string uuid)
         {
             List<UpnpDevice> dl;
             if (_devices.TryRemove(uuid, out dl))

+ 1 - 0
MediaBrowser.Server.Implementations/HttpServer/ResponseFilter.cs

@@ -61,6 +61,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
                 if (!hasOptions.Options.ContainsKey("Server"))
                 {
                     hasOptions.Options["Server"] = "Mono-HTTPAPI/1.1, UPnP/1.0 DLNADOC/1.50";
+                    //hasOptions.Options["Server"] = "Mono-HTTPAPI/1.1";
                 }
 
                 // Content length has to be explicitly set on on HttpListenerResponse or it won't be happy