Browse Source

fixed dlna headers

Luke Pulverenti 11 years ago
parent
commit
f2261a669e

+ 23 - 43
MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

@@ -105,48 +105,12 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
             return client;
             return client;
         }
         }
 
 
-        private WebRequest GetMonoRequest(HttpRequestOptions options, string method, bool enableHttpCompression)
-        {
-            var request = (HttpWebRequest)WebRequest.Create(options.Url);
-
-            if (!string.IsNullOrEmpty(options.AcceptHeader))
-            {
-                request.Accept = options.AcceptHeader;
-            }
-
-            request.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None;
-
-            request.CachePolicy = options.CachePolicy == Net.HttpRequestCachePolicy.None ?
-                new RequestCachePolicy(RequestCacheLevel.BypassCache) :
-                new RequestCachePolicy(RequestCacheLevel.Revalidate);
-
-            request.ConnectionGroupName = GetHostFromUrl(options.Url);
-            request.KeepAlive = true;
-            request.Method = method;
-            request.Pipelined = true;
-            request.Timeout = 20000;
-
-            if (!string.IsNullOrEmpty(options.UserAgent))
-            {
-                request.UserAgent = options.UserAgent;
-            }
-
-            return request;
-        }
-
         private PropertyInfo _httpBehaviorPropertyInfo;
         private PropertyInfo _httpBehaviorPropertyInfo;
         private WebRequest GetRequest(HttpRequestOptions options, string method, bool enableHttpCompression)
         private WebRequest GetRequest(HttpRequestOptions options, string method, bool enableHttpCompression)
         {
         {
-#if __MonoCS__
-            return GetMonoRequest(options, method, enableHttpCompression);
-#endif
+            var request = (HttpWebRequest)WebRequest.Create(options.Url);
 
 
-            var request = HttpWebRequest.CreateHttp(options.Url);
-
-            if (!string.IsNullOrEmpty(options.AcceptHeader))
-            {
-                request.Accept = options.AcceptHeader;
-            }
+            AddRequestHeaders(request, options);
 
 
             request.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None;
             request.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None;
             
             
@@ -160,11 +124,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
             request.Pipelined = true;
             request.Pipelined = true;
             request.Timeout = 20000;
             request.Timeout = 20000;
 
 
-            if (!string.IsNullOrEmpty(options.UserAgent))
-            {
-                request.UserAgent = options.UserAgent;
-            }
-
+#if !__MonoCS__
             // This is a hack to prevent KeepAlive from getting disabled internally by the HttpWebRequest
             // This is a hack to prevent KeepAlive from getting disabled internally by the HttpWebRequest
             // May need to remove this for mono
             // May need to remove this for mono
             var sp = request.ServicePoint;
             var sp = request.ServicePoint;
@@ -173,10 +133,30 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
                 _httpBehaviorPropertyInfo = sp.GetType().GetProperty("HttpBehaviour", BindingFlags.Instance | BindingFlags.NonPublic);
                 _httpBehaviorPropertyInfo = sp.GetType().GetProperty("HttpBehaviour", BindingFlags.Instance | BindingFlags.NonPublic);
             }
             }
             _httpBehaviorPropertyInfo.SetValue(sp, (byte)0, null);
             _httpBehaviorPropertyInfo.SetValue(sp, (byte)0, null);
+#endif
 
 
             return request;
             return request;
         }
         }
 
 
+        private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
+        {
+            foreach (var header in options.RequestHeaders.ToList())
+            {
+                if (string.Equals(header.Key, "Accept", StringComparison.OrdinalIgnoreCase))
+                {
+                    request.Accept = header.Value;
+                }
+                else if (string.Equals(header.Key, "User-Agent", StringComparison.OrdinalIgnoreCase))
+                {
+                    request.UserAgent = header.Value;
+                }
+                else
+                {
+                    request.Headers.Set(header.Key, header.Value);
+                }
+            }
+        }
+
         /// <summary>
         /// <summary>
         /// Gets the response internal.
         /// Gets the response internal.
         /// </summary>
         /// </summary>

+ 24 - 56
MediaBrowser.Dlna/PlayTo/Device.cs

@@ -357,18 +357,26 @@ namespace MediaBrowser.Dlna.PlayTo
                 return;
                 return;
 
 
             ((Timer)sender).Stop();
             ((Timer)sender).Stop();
-            var hasTrack = await GetPositionInfo().ConfigureAwait(false);
 
 
-            // TODO: Why make these requests if hasTrack==false?
-            if (_count > 4)
+            try
             {
             {
-                await GetTransportInfo().ConfigureAwait(false);
-                if (!hasTrack)
+                var hasTrack = await GetPositionInfo().ConfigureAwait(false);
+
+                // TODO: Why make these requests if hasTrack==false?
+                if (_count > 4)
                 {
                 {
-                    await GetMediaInfo().ConfigureAwait(false);
+                    await GetTransportInfo().ConfigureAwait(false);
+                    if (!hasTrack)
+                    {
+                        await GetMediaInfo().ConfigureAwait(false);
+                    }
+                    await GetVolume().ConfigureAwait(false);
+                    _count = 0;
                 }
                 }
-                await GetVolume().ConfigureAwait(false);
-                _count = 0;
+            }
+            catch (Exception ex)
+            {
+                _logger.ErrorException("Error updating device info", ex);
             }
             }
 
 
             _count++;
             _count++;
@@ -390,18 +398,8 @@ namespace MediaBrowser.Dlna.PlayTo
                 throw new InvalidOperationException("Unable to find service");
                 throw new InvalidOperationException("Unable to find service");
             }
             }
 
 
-            XDocument result;
-
-            try
-            {
-                result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
-                   .ConfigureAwait(false);
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error getting volume info", ex);
-                return;
-            }
+            var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
+                .ConfigureAwait(false);
 
 
             if (result == null || result.Document == null)
             if (result == null || result.Document == null)
                 return;
                 return;
@@ -431,18 +429,8 @@ namespace MediaBrowser.Dlna.PlayTo
             if (service == null)
             if (service == null)
                 return;
                 return;
 
 
-            XDocument result;
-
-            try
-            {
-                result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
-                   .ConfigureAwait(false);
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error getting transport info", ex);
-                return;
-            }
+            var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
+                .ConfigureAwait(false);
 
 
             if (result == null || result.Document == null)
             if (result == null || result.Document == null)
                 return;
                 return;
@@ -471,18 +459,8 @@ namespace MediaBrowser.Dlna.PlayTo
                 throw new InvalidOperationException("Unable to find service");
                 throw new InvalidOperationException("Unable to find service");
             }
             }
 
 
-            XDocument result;
-
-            try
-            {
-                result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
-                   .ConfigureAwait(false);
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error getting media info", ex);
-                return;
-            }
+            var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
+                .ConfigureAwait(false);
 
 
             if (result == null || result.Document == null)
             if (result == null || result.Document == null)
                 return;
                 return;
@@ -522,18 +500,8 @@ namespace MediaBrowser.Dlna.PlayTo
                 throw new InvalidOperationException("Unable to find service");
                 throw new InvalidOperationException("Unable to find service");
             }
             }
 
 
-            XDocument result;
-
-            try
-            {
-                result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
-                   .ConfigureAwait(false);
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error getting position info", ex);
-                return false;
-            }
+            var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType))
+                .ConfigureAwait(false);
 
 
             if (result == null || result.Document == null)
             if (result == null || result.Document == null)
                 return true;
                 return true;

+ 23 - 6
MediaBrowser.Dlna/PlayTo/PlayToManager.cs

@@ -23,15 +23,15 @@ namespace MediaBrowser.Dlna.PlayTo
         private readonly ILogger _logger;
         private readonly ILogger _logger;
         private readonly ISessionManager _sessionManager;
         private readonly ISessionManager _sessionManager;
         private readonly IHttpClient _httpClient;
         private readonly IHttpClient _httpClient;
-        private User _defualtUser;
         private readonly CancellationTokenSource _tokenSource;
         private readonly CancellationTokenSource _tokenSource;
         private ConcurrentDictionary<string, DateTime> _locations;
         private ConcurrentDictionary<string, DateTime> _locations;
 
 
         private readonly IItemRepository _itemRepository;
         private readonly IItemRepository _itemRepository;
         private readonly ILibraryManager _libraryManager;
         private readonly ILibraryManager _libraryManager;
         private readonly INetworkManager _networkManager;
         private readonly INetworkManager _networkManager;
-        
-        public PlayToManager(ILogger logger, ISessionManager sessionManager, IHttpClient httpClient, IItemRepository itemRepository, ILibraryManager libraryManager, INetworkManager networkManager)
+        private readonly IUserManager _userManager;        
+
+        public PlayToManager(ILogger logger, ISessionManager sessionManager, IHttpClient httpClient, IItemRepository itemRepository, ILibraryManager libraryManager, INetworkManager networkManager, IUserManager userManager)
         {
         {
             _locations = new ConcurrentDictionary<string, DateTime>();
             _locations = new ConcurrentDictionary<string, DateTime>();
             _tokenSource = new CancellationTokenSource();
             _tokenSource = new CancellationTokenSource();
@@ -42,11 +42,11 @@ namespace MediaBrowser.Dlna.PlayTo
             _itemRepository = itemRepository;
             _itemRepository = itemRepository;
             _libraryManager = libraryManager;
             _libraryManager = libraryManager;
             _networkManager = networkManager;
             _networkManager = networkManager;
+            _userManager = userManager;
         }
         }
 
 
-        public async void Start(User defaultUser)
+        public async void Start()
         {
         {
-            _defualtUser = defaultUser;
             _logger.Log(LogSeverity.Info, "PlayTo-Manager starting");
             _logger.Log(LogSeverity.Info, "PlayTo-Manager starting");
 
 
             _locations = new ConcurrentDictionary<string, DateTime>();
             _locations = new ConcurrentDictionary<string, DateTime>();
@@ -216,7 +216,7 @@ namespace MediaBrowser.Dlna.PlayTo
             {
             {
                 var transcodeProfiles = TranscodeSettings.GetProfileSettings(device.Properties);
                 var transcodeProfiles = TranscodeSettings.GetProfileSettings(device.Properties);
 
 
-                var sessionInfo = await _sessionManager.LogSessionActivity(device.Properties.ClientType, device.Properties.Name, device.Properties.UUID, device.Properties.DisplayName, uri.OriginalString, _defualtUser)
+                var sessionInfo = await _sessionManager.LogSessionActivity(device.Properties.ClientType, device.Properties.Name, device.Properties.UUID, device.Properties.DisplayName, uri.OriginalString, null)
                     .ConfigureAwait(false);
                     .ConfigureAwait(false);
 
 
                 var controller = sessionInfo.SessionController as PlayToController;
                 var controller = sessionInfo.SessionController as PlayToController;
@@ -232,6 +232,23 @@ namespace MediaBrowser.Dlna.PlayTo
             }
             }
         }
         }
 
 
+        const string DefaultUser = "Play To";
+        private async Task<User> GetPlayToUser()
+        {
+            var user = _userManager.Users.FirstOrDefault(u => string.Equals(DefaultUser, u.Name, StringComparison.OrdinalIgnoreCase));
+
+            if (user == null)
+            {
+                user = await _userManager.CreateUser(DefaultUser);
+
+                user.Configuration.IsHidden = true;
+                user.Configuration.IsAdministrator = false;
+                user.SaveConfiguration();
+            }
+
+            return user;
+        }
+
         /// <summary>
         /// <summary>
         /// Determines if the Uri is valid for further inspection or not.
         /// Determines if the Uri is valid for further inspection or not.
         /// (the limit for reinspection is 5 minutes)
         /// (the limit for reinspection is 5 minutes)

+ 4 - 33
MediaBrowser.Dlna/PlayTo/PlayToServerEntryPoint.cs

@@ -1,57 +1,28 @@
 using MediaBrowser.Common.Net;
 using MediaBrowser.Common.Net;
-using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Session;
 using MediaBrowser.Controller.Session;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Model.Logging;
-using System.Linq;
-using System.Threading.Tasks;
 
 
 namespace MediaBrowser.Dlna.PlayTo
 namespace MediaBrowser.Dlna.PlayTo
 {
 {
     public class PlayToServerEntryPoint : IServerEntryPoint
     public class PlayToServerEntryPoint : IServerEntryPoint
     {
     {
-        const string DefaultUser = "Play To";
-
         private bool _disposed;
         private bool _disposed;
-        
-        private readonly IUserManager _userManager;        
+
         private readonly PlayToManager _manager;
         private readonly PlayToManager _manager;
 
 
         public PlayToServerEntryPoint(ILogManager logManager, ISessionManager sessionManager, IUserManager userManager, IHttpClient httpClient, INetworkManager networkManager, IItemRepository itemRepository, ILibraryManager libraryManager)
         public PlayToServerEntryPoint(ILogManager logManager, ISessionManager sessionManager, IUserManager userManager, IHttpClient httpClient, INetworkManager networkManager, IItemRepository itemRepository, ILibraryManager libraryManager)
         {
         {
-            _userManager = userManager;
-
-            _manager = new PlayToManager(logManager.GetLogger("PlayTo"), sessionManager, httpClient, itemRepository, libraryManager, networkManager);
+            _manager = new PlayToManager(logManager.GetLogger("PlayTo"), sessionManager, httpClient, itemRepository, libraryManager, networkManager, userManager);
         }
         }
 
 
-        /// <summary>
-        /// Creates the defaultuser if needed.
-        /// </summary>
-        private async Task<User> CreateUserIfNeeded()
+        public void Run()
         {
         {
-            var user = _userManager.Users.FirstOrDefault(u => u.Name == DefaultUser);
-
-            if (user == null)
-            {
-                user = await _userManager.CreateUser(DefaultUser);
-
-                user.Configuration.IsHidden = true;
-                user.Configuration.IsAdministrator = false;
-                user.SaveConfiguration();
-            }
-
-            return user;
+            //_manager.Start();            
         }
         }
 
 
-        public async void Run()
-        {
-            //var defaultUser = await CreateUserIfNeeded().ConfigureAwait(false);
-
-            //_manager.Start(defaultUser);            
-        }
-     
         #region Dispose
         #region Dispose
 
 
         public void Dispose()
         public void Dispose()

+ 8 - 8
MediaBrowser.Dlna/PlayTo/SsdpHttpClient.cs

@@ -44,10 +44,10 @@ namespace MediaBrowser.Dlna.PlayTo
         {
         {
             var options = new HttpRequestOptions
             var options = new HttpRequestOptions
             {
             {
-                Url = url.ToString()
+                Url = url.ToString(),
+                UserAgent = USERAGENT
             };
             };
 
 
-            options.RequestHeaders["UserAgent"] = USERAGENT;
             options.RequestHeaders["HOST"] = ip + ":" + port;
             options.RequestHeaders["HOST"] = ip + ":" + port;
             options.RequestHeaders["CALLBACK"] = "<" + localIp + ":" + eventport + ">";
             options.RequestHeaders["CALLBACK"] = "<" + localIp + ":" + eventport + ">";
             options.RequestHeaders["NT"] = "upnp:event";
             options.RequestHeaders["NT"] = "upnp:event";
@@ -63,10 +63,10 @@ namespace MediaBrowser.Dlna.PlayTo
         {
         {
             var options = new HttpRequestOptions
             var options = new HttpRequestOptions
             {
             {
-                Url = url.ToString()
+                Url = url.ToString(),
+                UserAgent = USERAGENT
             };
             };
 
 
-            options.RequestHeaders["UserAgent"] = USERAGENT;
             options.RequestHeaders["HOST"] = ip + ":" + port;
             options.RequestHeaders["HOST"] = ip + ":" + port;
             options.RequestHeaders["CALLBACK"] = "<" + localIp + ":" + eventport + ">";
             options.RequestHeaders["CALLBACK"] = "<" + localIp + ":" + eventport + ">";
             options.RequestHeaders["NT"] = "upnp:event";
             options.RequestHeaders["NT"] = "upnp:event";
@@ -82,10 +82,10 @@ namespace MediaBrowser.Dlna.PlayTo
         {
         {
             var options = new HttpRequestOptions
             var options = new HttpRequestOptions
             {
             {
-                Url = url.ToString()
+                Url = url.ToString(),
+                UserAgent = USERAGENT
             };
             };
 
 
-            options.RequestHeaders["UserAgent"] = USERAGENT;
             options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName;
             options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName;
             //request.CookieContainer = Container;
             //request.CookieContainer = Container;
 
 
@@ -105,12 +105,12 @@ namespace MediaBrowser.Dlna.PlayTo
 
 
             var options = new HttpRequestOptions
             var options = new HttpRequestOptions
             {
             {
-                Url = url.ToString()
+                Url = url.ToString(),
+                UserAgent = USERAGENT
             };
             };
 
 
             options.RequestHeaders["SOAPAction"] = soapAction;
             options.RequestHeaders["SOAPAction"] = soapAction;
             options.RequestHeaders["Pragma"] = "no-cache";
             options.RequestHeaders["Pragma"] = "no-cache";
-            options.RequestHeaders["UserAgent"] = USERAGENT;
             options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName;
             options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName;
 
 
             if (!string.IsNullOrWhiteSpace(header))
             if (!string.IsNullOrWhiteSpace(header))