52 lines
1.2 KiB
C#
52 lines
1.2 KiB
C#
|
using System;
|
||
|
using System.Xml;
|
||
|
using BlogServer.WebServer;
|
||
|
|
||
|
namespace BlogServer.XmlRpc
|
||
|
{
|
||
|
public class XmlRpcHttpRequestHandler : XmlHttpRequestHandler
|
||
|
{
|
||
|
private readonly bool _final;
|
||
|
private readonly XmlRpcInvoker _invoker;
|
||
|
|
||
|
public XmlRpcHttpRequestHandler(bool final)
|
||
|
{
|
||
|
_invoker = new XmlRpcInvoker(this);
|
||
|
_final = final;
|
||
|
}
|
||
|
|
||
|
public override bool Handle(string httpMethod, string path, string querystring, HttpHeaders headers, XmlDocument request, out XmlDocument response)
|
||
|
{
|
||
|
response = null;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
object result;
|
||
|
if (_invoker.Invoke(request, out result))
|
||
|
{
|
||
|
response = XmlRpcFormatter.EncodeResponse(result);
|
||
|
return true;
|
||
|
}
|
||
|
if (_final)
|
||
|
{
|
||
|
string methodName;
|
||
|
object[] parameters;
|
||
|
XmlRpcParser.Parse(request, out methodName, out parameters);
|
||
|
response = XmlRpcFormatter.EncodeFault(405, "XML-RPC method '" + methodName + "' not implemented");
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
catch (XmlRpcServerException xpse)
|
||
|
{
|
||
|
response = XmlRpcFormatter.EncodeFault(xpse.FaultCode, xpse.FaultString);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
response = XmlRpcFormatter.EncodeFault(500, e.Message);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|