aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Dlna/DlnaServerService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Dlna/DlnaServerService.cs')
-rw-r--r--MediaBrowser.Api/Dlna/DlnaServerService.cs83
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");