DlnaServiceCollectionExtensions.cs 2.8 KB

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