aboutsummaryrefslogtreecommitdiff
path: root/Emby.Dlna/Service/ControlErrorHandler.cs
blob: f2b5dd9ca8902ec3a54270db69c709008f12ea91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#pragma warning disable CS1591

using System;
using System.IO;
using System.Text;
using System.Xml;
using Emby.Dlna.Didl;

namespace Emby.Dlna.Service
{
    public static class ControlErrorHandler
    {
        private const string NsSoapEnv = "http://schemas.xmlsoap.org/soap/envelope/";

        public static ControlResponse GetResponse(Exception ex)
        {
            var settings = new XmlWriterSettings
            {
                Encoding = Encoding.UTF8,
                CloseOutput = false
            };

            StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8);

            using (var writer = XmlWriter.Create(builder, settings))
            {
                writer.WriteStartDocument(true);

                writer.WriteStartElement("SOAP-ENV", "Envelope", NsSoapEnv);
                writer.WriteAttributeString(string.Empty, "encodingStyle", NsSoapEnv, "http://schemas.xmlsoap.org/soap/encoding/");

                writer.WriteStartElement("SOAP-ENV", "Body", NsSoapEnv);
                writer.WriteStartElement("SOAP-ENV", "Fault", NsSoapEnv);

                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.WriteFullEndElement();

                writer.WriteFullEndElement();
                writer.WriteFullEndElement();

                writer.WriteFullEndElement();
                writer.WriteEndDocument();
            }

            return new ControlResponse
            {
                Xml = builder.ToString(),
                IsSuccessful = false
            };
        }
    }
}