jellyfin/Emby.Dlna/Extensions/DlnaServiceCollectionExtensions.cs

73 lines
2.8 KiB
C#
Raw Normal View History

2023-10-11 10:33:00 -04:00
using System;
using System.Globalization;
using System.Net;
using System.Net.Http;
using System.Text;
2023-10-11 11:08:19 -04:00
using Emby.Dlna.ConnectionManager;
2023-10-11 11:05:14 -04:00
using Emby.Dlna.ContentDirectory;
2023-10-26 10:03:04 -04:00
using Emby.Dlna.Main;
using Emby.Dlna.MediaReceiverRegistrar;
2023-10-11 10:33:00 -04:00
using Emby.Dlna.Ssdp;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Model.Dlna;
2023-10-11 13:35:51 -04:00
using MediaBrowser.Model.Net;
2023-10-11 10:33:00 -04:00
using Microsoft.Extensions.DependencyInjection;
2023-10-11 13:35:51 -04:00
using Microsoft.Extensions.Logging;
using Rssdp.Infrastructure;
2023-10-11 10:33:00 -04:00
namespace Emby.Dlna.Extensions;
/// <summary>
/// Extension methods for adding DLNA services.
/// </summary>
public static class DlnaServiceCollectionExtensions
{
/// <summary>
/// Adds DLNA services to the provided <see cref="IServiceCollection"/>.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
2023-10-11 14:57:29 -04:00
/// <param name="applicationHost">The <see cref="IServerApplicationHost"/>.</param>
2023-10-11 10:33:00 -04:00
public static void AddDlnaServices(
this IServiceCollection services,
IServerApplicationHost applicationHost)
{
services.AddHttpClient(NamedClient.Dlna, c =>
{
c.DefaultRequestHeaders.UserAgent.ParseAdd(
string.Format(
CultureInfo.InvariantCulture,
"{0}/{1} UPnP/1.0 {2}/{3}",
Environment.OSVersion.Platform,
Environment.OSVersion,
applicationHost.Name,
applicationHost.ApplicationVersionString));
c.DefaultRequestHeaders.Add("CPFN.UPNP.ORG", applicationHost.FriendlyName); // Required for UPnP DeviceArchitecture v2.0
c.DefaultRequestHeaders.Add("FriendlyName.DLNA.ORG", applicationHost.FriendlyName); // REVIEW: where does this come from?
})
.ConfigurePrimaryHttpMessageHandler(_ => new SocketsHttpHandler
{
AutomaticDecompression = DecompressionMethods.All,
RequestHeaderEncodingSelector = (_, _) => Encoding.UTF8
});
services.AddSingleton<IDlnaManager, DlnaManager>();
services.AddSingleton<IDeviceDiscovery, DeviceDiscovery>();
2023-10-11 11:05:14 -04:00
services.AddSingleton<IContentDirectory, ContentDirectoryService>();
2023-10-11 11:08:19 -04:00
services.AddSingleton<IConnectionManager, ConnectionManagerService>();
services.AddSingleton<IMediaReceiverRegistrar, MediaReceiverRegistrarService>();
2023-10-11 13:35:51 -04:00
services.AddSingleton<ISsdpCommunicationsServer>(provider => new SsdpCommunicationsServer(
provider.GetRequiredService<ISocketFactory>(),
provider.GetRequiredService<INetworkManager>(),
provider.GetRequiredService<ILogger<SsdpCommunicationsServer>>())
{
IsShared = true
});
2023-10-26 10:03:04 -04:00
services.AddHostedService<DlnaHost>();
2023-10-11 10:33:00 -04:00
}
}