aboutsummaryrefslogtreecommitdiff
path: root/Emby.Dlna/Service/ControlErrorHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Dlna/Service/ControlErrorHandler.cs')
-rw-r--r--Emby.Dlna/Service/ControlErrorHandler.cs56
1 files changed, 35 insertions, 21 deletions
diff --git a/Emby.Dlna/Service/ControlErrorHandler.cs b/Emby.Dlna/Service/ControlErrorHandler.cs
index 139f99931..07b4dad60 100644
--- a/Emby.Dlna/Service/ControlErrorHandler.cs
+++ b/Emby.Dlna/Service/ControlErrorHandler.cs
@@ -1,6 +1,9 @@
using MediaBrowser.Controller.Dlna;
using System;
+using System.IO;
+using System.Text;
using System.Xml;
+using Emby.Dlna.Didl;
namespace Emby.Dlna.Service
{
@@ -10,30 +13,41 @@ namespace Emby.Dlna.Service
public ControlResponse GetResponse(Exception ex)
{
- var env = new XmlDocument();
- env.AppendChild(env.CreateXmlDeclaration("1.0", "utf-8", "yes"));
- var envelope = env.CreateElement("SOAP-ENV", "Envelope", NS_SOAPENV);
- env.AppendChild(envelope);
- envelope.SetAttribute("encodingStyle", NS_SOAPENV, "http://schemas.xmlsoap.org/soap/encoding/");
-
- var rbody = env.CreateElement("SOAP-ENV:Body", NS_SOAPENV);
- env.DocumentElement.AppendChild(rbody);
-
- var fault = env.CreateElement("SOAP-ENV", "Fault", NS_SOAPENV);
- var faultCode = env.CreateElement("faultcode");
- faultCode.InnerText = "500";
- fault.AppendChild(faultCode);
- var faultString = env.CreateElement("faultstring");
- faultString.InnerText = ex.ToString();
- fault.AppendChild(faultString);
- var detail = env.CreateDocumentFragment();
- detail.InnerXml = "<detail><UPnPError xmlns=\"urn:schemas-upnp-org:control-1-0\"><errorCode>401</errorCode><errorDescription>Invalid Action</errorDescription></UPnPError></detail>";
- fault.AppendChild(detail);
- rbody.AppendChild(fault);
+ var settings = new XmlWriterSettings
+ {
+ Encoding = Encoding.UTF8,
+ CloseOutput = false
+ };
+
+ StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8);
+
+ using (XmlWriter writer = XmlWriter.Create(builder, settings))
+ {
+ writer.WriteStartDocument(true);
+
+ writer.WriteStartElement("SOAP-ENV", "Envelope", NS_SOAPENV);
+ writer.WriteAttributeString(string.Empty, "encodingStyle", NS_SOAPENV, "http://schemas.xmlsoap.org/soap/encoding/");
+
+ writer.WriteStartElement("SOAP-ENV", "Body", NS_SOAPENV);
+ writer.WriteStartElement("SOAP-ENV", "Fault", NS_SOAPENV);
+
+ writer.WriteElementString("faultcode", "500");
+ writer.WriteElementString("faultstring", ex.Message);
+
+ writer.WriteStartElement("detail");
+ writer.WriteRaw("<UPnPError xmlns=\"urn:schemas-upnp-org:control-1-0\"><errorCode>401</errorCode><errorDescription>Invalid Action</errorDescription></UPnPError>");
+ writer.WriteEndElement();
+
+ writer.WriteEndElement();
+ writer.WriteEndElement();
+
+ writer.WriteEndElement();
+ writer.WriteEndDocument();
+ }
return new ControlResponse
{
- Xml = env.OuterXml,
+ Xml = builder.ToString(),
IsSuccessful = false
};
}