ControlErrorHandler.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using MediaBrowser.Controller.Dlna;
  2. using System;
  3. using System.Xml;
  4. namespace Emby.Dlna.Service
  5. {
  6. public class ControlErrorHandler
  7. {
  8. private const string NS_SOAPENV = "http://schemas.xmlsoap.org/soap/envelope/";
  9. public ControlResponse GetResponse(Exception ex)
  10. {
  11. var env = new XmlDocument();
  12. env.AppendChild(env.CreateXmlDeclaration("1.0", "utf-8", "yes"));
  13. var envelope = env.CreateElement("SOAP-ENV", "Envelope", NS_SOAPENV);
  14. env.AppendChild(envelope);
  15. envelope.SetAttribute("encodingStyle", NS_SOAPENV, "http://schemas.xmlsoap.org/soap/encoding/");
  16. var rbody = env.CreateElement("SOAP-ENV:Body", NS_SOAPENV);
  17. env.DocumentElement.AppendChild(rbody);
  18. var fault = env.CreateElement("SOAP-ENV", "Fault", NS_SOAPENV);
  19. var faultCode = env.CreateElement("faultcode");
  20. faultCode.InnerText = "500";
  21. fault.AppendChild(faultCode);
  22. var faultString = env.CreateElement("faultstring");
  23. faultString.InnerText = ex.ToString();
  24. fault.AppendChild(faultString);
  25. var detail = env.CreateDocumentFragment();
  26. detail.InnerXml = "<detail><UPnPError xmlns=\"urn:schemas-upnp-org:control-1-0\"><errorCode>401</errorCode><errorDescription>Invalid Action</errorDescription></UPnPError></detail>";
  27. fault.AppendChild(detail);
  28. rbody.AppendChild(fault);
  29. return new ControlResponse
  30. {
  31. Xml = env.OuterXml,
  32. IsSuccessful = false
  33. };
  34. }
  35. }
  36. }