summaryrefslogtreecommitdiff
path: root/modules/rpc/xmlrpc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/rpc/xmlrpc.cpp')
-rw-r--r--modules/rpc/xmlrpc.cpp56
1 files changed, 51 insertions, 5 deletions
diff --git a/modules/rpc/xmlrpc.cpp b/modules/rpc/xmlrpc.cpp
index e67d88556..2ecf00410 100644
--- a/modules/rpc/xmlrpc.cpp
+++ b/modules/rpc/xmlrpc.cpp
@@ -187,12 +187,58 @@ public:
if (!request.id.empty())
request.Reply("id", request.id);
- Anope::string r = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<methodResponse>\n<params>\n<param>\n<value>\n<struct>\n";
- for (const auto &[name, value] : request.GetReplies())
- r += "<member>\n<name>" + this->Sanitize(name) + "</name>\n<value>\n<string>" + this->Sanitize(value) + "</string>\n</value>\n</member>\n";
- r += "</struct>\n</value>\n</param>\n</params>\n</methodResponse>";
+ Anope::string xml =
+ "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
+ "<methodResponse>\n";
- request.r.Write(r);
+ if (request.GetError())
+ {
+ xml +=
+ "<fault>\n"
+ " <value>\n"
+ " <struct>\n"
+ " <member>\n"
+ " <name>faultCode</name>\n"
+ " <value>\n"
+ " <int>" + Anope::ToString(request.GetError()->first) + "</int>\n"
+ " </value>\n"
+ " </member>\n"
+ " <member>\n"
+ " <name>faultString</name>\n"
+ " <value>\n"
+ " <string>" + this->Sanitize(request.GetError()->second) + "</string>\n"
+ " </value>\n"
+ " </member>\n"
+ " </struct>\n"
+ " </value>\n"
+ "</fault>\n";
+ }
+ else
+ {
+ xml +=
+ "<params>\n"
+ " <param>\n"
+ " <value>\n"
+ " <struct>\n";
+ for (const auto &[name, value] : request.GetReplies())
+ {
+ xml +=
+ "<member>\n"
+ " <name>" + this->Sanitize(name) + "</name>\n"
+ " <value>\n"
+ " <string>" + this->Sanitize(value) + "</string>\n"
+ " </value>\n"
+ "</member>\n";
+ }
+ xml +=
+ " </struct>\n"
+ " </value>\n"
+ " </param>\n"
+ "</params>\n";
+ }
+ xml += "</methodResponse>";
+
+ request.reply.Write(xml);
}
};