DlnaServiceCollectionExtensions.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Globalization;
  3. using System.Net;
  4. using System.Net.Http;
  5. using System.Text;
  6. using Emby.Dlna.ConnectionManager;
  7. using Emby.Dlna.ContentDirectory;
  8. using Emby.Dlna.MediaReceiverRegistrar;
  9. using Emby.Dlna.Ssdp;
  10. using MediaBrowser.Common.Net;
  11. using MediaBrowser.Controller;
  12. using MediaBrowser.Controller.Dlna;
  13. using MediaBrowser.Model.Dlna;
  14. using MediaBrowser.Model.Net;
  15. using Microsoft.Extensions.DependencyInjection;
  16. using Microsoft.Extensions.Logging;
  17. using Rssdp.Infrastructure;
  18. namespace Emby.Dlna.Extensions;
  19. /// <summary>
  20. /// Extension methods for adding DLNA services.
  21. /// </summary>
  22. public static class DlnaServiceCollectionExtensions
  23. {
  24. /// <summary>
  25. /// Adds DLNA services to the provided <see cref="IServiceCollection"/>.
  26. /// </summary>
  27. /// <param name="services">The <see cref="IServiceCollection"/>.</param>
  28. /// <param name="applicationHost">the.</param>
  29. public static void AddDlnaServices(
  30. this IServiceCollection services,
  31. IServerApplicationHost applicationHost)
  32. {
  33. services.AddHttpClient(NamedClient.Dlna, c =>
  34. {
  35. c.DefaultRequestHeaders.UserAgent.ParseAdd(
  36. string.Format(
  37. CultureInfo.InvariantCulture,
  38. "{0}/{1} UPnP/1.0 {2}/{3}",
  39. Environment.OSVersion.Platform,
  40. Environment.OSVersion,
  41. applicationHost.Name,
  42. applicationHost.ApplicationVersionString));
  43. c.DefaultRequestHeaders.Add("CPFN.UPNP.ORG", applicationHost.FriendlyName); // Required for UPnP DeviceArchitecture v2.0
  44. c.DefaultRequestHeaders.Add("FriendlyName.DLNA.ORG", applicationHost.FriendlyName); // REVIEW: where does this come from?
  45. })
  46. .ConfigurePrimaryHttpMessageHandler(_ => new SocketsHttpHandler
  47. {
  48. AutomaticDecompression = DecompressionMethods.All,
  49. RequestHeaderEncodingSelector = (_, _) => Encoding.UTF8
  50. });
  51. services.AddSingleton<IDlnaManager, DlnaManager>();
  52. services.AddSingleton<IDeviceDiscovery, DeviceDiscovery>();
  53. services.AddSingleton<IContentDirectory, ContentDirectoryService>();
  54. services.AddSingleton<IConnectionManager, ConnectionManagerService>();
  55. services.AddSingleton<IMediaReceiverRegistrar, MediaReceiverRegistrarService>();
  56. services.AddSingleton<ISsdpCommunicationsServer>(provider => new SsdpCommunicationsServer(
  57. provider.GetRequiredService<ISocketFactory>(),
  58. provider.GetRequiredService<INetworkManager>(),
  59. provider.GetRequiredService<ILogger<SsdpCommunicationsServer>>())
  60. {
  61. IsShared = true
  62. });
  63. }
  64. }