2
0

ControlErrorHandler.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma warning disable CS1591
  2. using System;
  3. using System.IO;
  4. using System.Text;
  5. using System.Xml;
  6. using Emby.Dlna.Didl;
  7. namespace Emby.Dlna.Service
  8. {
  9. public static class ControlErrorHandler
  10. {
  11. private const string NsSoapEnv = "http://schemas.xmlsoap.org/soap/envelope/";
  12. public static ControlResponse GetResponse(Exception ex)
  13. {
  14. var settings = new XmlWriterSettings
  15. {
  16. Encoding = Encoding.UTF8,
  17. CloseOutput = false
  18. };
  19. StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8);
  20. using (var writer = XmlWriter.Create(builder, settings))
  21. {
  22. writer.WriteStartDocument(true);
  23. writer.WriteStartElement("SOAP-ENV", "Envelope", NsSoapEnv);
  24. writer.WriteAttributeString(string.Empty, "encodingStyle", NsSoapEnv, "http://schemas.xmlsoap.org/soap/encoding/");
  25. writer.WriteStartElement("SOAP-ENV", "Body", NsSoapEnv);
  26. writer.WriteStartElement("SOAP-ENV", "Fault", NsSoapEnv);
  27. writer.WriteElementString("faultcode", "500");
  28. writer.WriteElementString("faultstring", ex.Message);
  29. writer.WriteStartElement("detail");
  30. writer.WriteRaw("<UPnPError xmlns=\"urn:schemas-upnp-org:control-1-0\"><errorCode>401</errorCode><errorDescription>Invalid Action</errorDescription></UPnPError>");
  31. writer.WriteFullEndElement();
  32. writer.WriteFullEndElement();
  33. writer.WriteFullEndElement();
  34. writer.WriteFullEndElement();
  35. writer.WriteEndDocument();
  36. }
  37. return new ControlResponse(builder.ToString(), false);
  38. }
  39. }
  40. }