diff options
Diffstat (limited to 'MediaBrowser.Api/Dlna/DlnaServerService.cs')
| -rw-r--r-- | MediaBrowser.Api/Dlna/DlnaServerService.cs | 83 |
1 files changed, 68 insertions, 15 deletions
diff --git a/MediaBrowser.Api/Dlna/DlnaServerService.cs b/MediaBrowser.Api/Dlna/DlnaServerService.cs index 94d6e25b03..29b7bf682c 100644 --- a/MediaBrowser.Api/Dlna/DlnaServerService.cs +++ b/MediaBrowser.Api/Dlna/DlnaServerService.cs @@ -1,6 +1,5 @@ using MediaBrowser.Controller.Dlna; using ServiceStack; -using ServiceStack.Text.Controller; using ServiceStack.Web; using System; using System.Collections.Generic; @@ -19,19 +18,31 @@ namespace MediaBrowser.Api.Dlna public string UuId { get; set; } } - [Route("/Dlna/contentdirectory/contentdirectory.xml", "GET", Summary = "Gets dlna content directory xml")] - [Route("/Dlna/contentdirectory/contentdirectory", "GET", Summary = "Gets dlna content directory xml")] + [Route("/Dlna/{UuId}/contentdirectory/contentdirectory.xml", "GET", Summary = "Gets dlna content directory xml")] + [Route("/Dlna/{UuId}/contentdirectory/contentdirectory", "GET", Summary = "Gets dlna content directory xml")] public class GetContentDirectory { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UuId { get; set; } } - [Route("/Dlna/connectionmanager/connectionmanager.xml", "GET", Summary = "Gets dlna connection manager xml")] - [Route("/Dlna/connectionmanager/connectionmanager", "GET", Summary = "Gets dlna connection manager xml")] + [Route("/Dlna/{UuId}/connectionmanager/connectionmanager.xml", "GET", Summary = "Gets dlna connection manager xml")] + [Route("/Dlna/{UuId}/connectionmanager/connectionmanager", "GET", Summary = "Gets dlna connection manager xml")] public class GetConnnectionManager { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UuId { get; set; } + } + + [Route("/Dlna/{UuId}/mediareceiverregistrar/mediareceiverregistrar.xml", "GET", Summary = "Gets dlna mediareceiverregistrar xml")] + [Route("/Dlna/{UuId}/mediareceiverregistrar/mediareceiverregistrar", "GET", Summary = "Gets dlna mediareceiverregistrar xml")] + public class GetMediaReceiverRegistrar + { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UuId { get; set; } } - [Route("/Dlna/contentdirectory/{UuId}/control", "POST", Summary = "Processes a control request")] + [Route("/Dlna/{UuId}/contentdirectory/control", "POST", Summary = "Processes a control request")] public class ProcessContentDirectoryControlRequest : IRequiresRequestStream { [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] @@ -40,7 +51,7 @@ namespace MediaBrowser.Api.Dlna public Stream RequestStream { get; set; } } - [Route("/Dlna/connectionmanager/{UuId}/control", "POST", Summary = "Processes a control request")] + [Route("/Dlna/{UuId}/connectionmanager/control", "POST", Summary = "Processes a control request")] public class ProcessConnectionManagerControlRequest : IRequiresRequestStream { [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] @@ -49,23 +60,43 @@ namespace MediaBrowser.Api.Dlna public Stream RequestStream { get; set; } } - [Route("/Dlna/contentdirectory/{UuId}/events", Summary = "Processes an event subscription request")] - public class ProcessContentDirectoryEventRequest + [Route("/Dlna/{UuId}/mediareceiverregistrar/control", "POST", Summary = "Processes a control request")] + public class ProcessMediaReceiverRegistrarControlRequest : IRequiresRequestStream { [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] public string UuId { get; set; } + + public Stream RequestStream { get; set; } } - [Route("/Dlna/connectionmanager/{UuId}/events", Summary = "Processes an event subscription request")] + [Route("/Dlna/{UuId}/mediareceiverregistrar/events", Summary = "Processes an event subscription request")] + public class ProcessMediaReceiverRegistrarEventRequest + { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "SUBSCRIBE,POST")] + public string UuId { get; set; } + } + + [Route("/Dlna/{UuId}/contentdirectory/events", Summary = "Processes an event subscription request")] + public class ProcessContentDirectoryEventRequest + { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "SUBSCRIBE,POST")] + public string UuId { get; set; } + } + + [Route("/Dlna/{UuId}/connectionmanager/events", Summary = "Processes an event subscription request")] public class ProcessConnectionManagerEventRequest { - [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "SUBSCRIBE,POST")] public string UuId { get; set; } } + [Route("/Dlna/{UuId}/icons/{Filename}", "GET", Summary = "Gets a server icon")] [Route("/Dlna/icons/{Filename}", "GET", Summary = "Gets a server icon")] public class GetIcon { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UuId { get; set; } + [ApiMember(Name = "Filename", Description = "The icon filename", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Filename { get; set; } } @@ -75,17 +106,21 @@ namespace MediaBrowser.Api.Dlna private readonly IDlnaManager _dlnaManager; private readonly IContentDirectory _contentDirectory; private readonly IConnectionManager _connectionManager; + private readonly IMediaReceiverRegistrar _mediaReceiverRegistrar; - public DlnaServerService(IDlnaManager dlnaManager, IContentDirectory contentDirectory, IConnectionManager connectionManager) + public DlnaServerService(IDlnaManager dlnaManager, IContentDirectory contentDirectory, IConnectionManager connectionManager, IMediaReceiverRegistrar mediaReceiverRegistrar) { _dlnaManager = dlnaManager; _contentDirectory = contentDirectory; _connectionManager = connectionManager; + _mediaReceiverRegistrar = mediaReceiverRegistrar; } public object Get(GetDescriptionXml request) { - var xml = _dlnaManager.GetServerDescriptionXml(GetRequestHeaders(), request.UuId); + var url = Request.AbsoluteUri; + var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase)); + var xml = _dlnaManager.GetServerDescriptionXml(GetRequestHeaders(), request.UuId, serverAddress); return ResultFactory.GetResult(xml, "text/xml"); } @@ -97,6 +132,13 @@ namespace MediaBrowser.Api.Dlna return ResultFactory.GetResult(xml, "text/xml"); } + public object Get(GetMediaReceiverRegistrar request) + { + var xml = _mediaReceiverRegistrar.GetServiceXml(GetRequestHeaders()); + + return ResultFactory.GetResult(xml, "text/xml"); + } + public object Get(GetConnnectionManager request) { var xml = _connectionManager.GetServiceXml(GetRequestHeaders()); @@ -104,6 +146,13 @@ namespace MediaBrowser.Api.Dlna return ResultFactory.GetResult(xml, "text/xml"); } + public async Task<object> Post(ProcessMediaReceiverRegistrarControlRequest request) + { + var response = await PostAsync(request.RequestStream, _mediaReceiverRegistrar).ConfigureAwait(false); + + return ResultFactory.GetResult(response.Xml, "text/xml"); + } + public async Task<object> Post(ProcessContentDirectoryControlRequest request) { var response = await PostAsync(request.RequestStream, _contentDirectory).ConfigureAwait(false); @@ -120,8 +169,7 @@ namespace MediaBrowser.Api.Dlna private async Task<ControlResponse> PostAsync(Stream requestStream, IUpnpService service) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = pathInfo.GetArgumentValue<string>(2); + var id = GetPathValue(2); using (var reader = new StreamReader(requestStream)) { @@ -172,6 +220,11 @@ namespace MediaBrowser.Api.Dlna return ProcessEventRequest(_connectionManager); } + public object Any(ProcessMediaReceiverRegistrarEventRequest request) + { + return ProcessEventRequest(_mediaReceiverRegistrar); + } + private object ProcessEventRequest(IEventManager eventManager) { var subscriptionId = GetHeader("SID"); |
