diff options
Diffstat (limited to 'Emby.Dlna/Service/ControlErrorHandler.cs')
| -rw-r--r-- | Emby.Dlna/Service/ControlErrorHandler.cs | 56 |
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 }; } |
