DlnaServerService.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using MediaBrowser.Controller.Dlna;
  2. using ServiceStack;
  3. using ServiceStack.Web;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Threading.Tasks;
  7. namespace MediaBrowser.Api.Dlna
  8. {
  9. [Route("/Dlna/{UuId}/description.xml", "GET", Summary = "Gets dlna server info")]
  10. [Route("/Dlna/{UuId}/description", "GET", Summary = "Gets dlna server info")]
  11. public class GetDescriptionXml
  12. {
  13. [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")]
  14. public string UuId { get; set; }
  15. }
  16. [Route("/Dlna/{UuId}/contentdirectory.xml", "GET", Summary = "Gets dlna content directory xml")]
  17. [Route("/Dlna/{UuId}/contentdirectory", "GET", Summary = "Gets the content directory xml")]
  18. public class GetContentDirectory
  19. {
  20. [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")]
  21. public string UuId { get; set; }
  22. }
  23. [Route("/Dlna/{UuId}/control", "POST", Summary = "Processes a control request")]
  24. public class ProcessControlRequest : IRequiresRequestStream
  25. {
  26. [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")]
  27. public string UuId { get; set; }
  28. public Stream RequestStream { get; set; }
  29. }
  30. public class DlnaServerService : BaseApiService
  31. {
  32. private readonly IDlnaManager _dlnaManager;
  33. public DlnaServerService(IDlnaManager dlnaManager)
  34. {
  35. _dlnaManager = dlnaManager;
  36. }
  37. public object Get(GetDescriptionXml request)
  38. {
  39. var xml = _dlnaManager.GetServerDescriptionXml(GetRequestHeaders(), request.UuId);
  40. return ResultFactory.GetResult(xml, "text/xml");
  41. }
  42. public object Get(GetContentDirectory request)
  43. {
  44. var xml = _dlnaManager.GetContentDirectoryXml(GetRequestHeaders());
  45. return ResultFactory.GetResult(xml, "text/xml");
  46. }
  47. public object Post(ProcessControlRequest request)
  48. {
  49. var response = PostAsync(request).Result;
  50. return ResultFactory.GetResult(response.Xml, "text/xml");
  51. }
  52. private async Task<ControlResponse> PostAsync(ProcessControlRequest request)
  53. {
  54. using (var reader = new StreamReader(request.RequestStream))
  55. {
  56. return _dlnaManager.ProcessControlRequest(new ControlRequest
  57. {
  58. Headers = GetRequestHeaders(),
  59. InputXml = await reader.ReadToEndAsync().ConfigureAwait(false)
  60. });
  61. }
  62. }
  63. private IDictionary<string, string> GetRequestHeaders()
  64. {
  65. var headers = new Dictionary<string, string>();
  66. foreach (var key in Request.Headers.AllKeys)
  67. {
  68. headers[key] = Request.Headers[key];
  69. }
  70. return headers;
  71. }
  72. }
  73. }