From 3436961bb5c01d659d09be134368f4f69460cef9 Mon Sep 17 00:00:00 2001
From: MW
Date: Sat, 26 May 2007 13:40:19 +0000
Subject: Start of rewrite 5279!
---
Common/XmlRpcCS/XmlRpcRequest.cs | 150 +++++++++++++++++++++++++++++++++++++++
1 file changed, 150 insertions(+)
create mode 100644 Common/XmlRpcCS/XmlRpcRequest.cs
(limited to 'Common/XmlRpcCS/XmlRpcRequest.cs')
diff --git a/Common/XmlRpcCS/XmlRpcRequest.cs b/Common/XmlRpcCS/XmlRpcRequest.cs
new file mode 100644
index 0000000..18d2182
--- /dev/null
+++ b/Common/XmlRpcCS/XmlRpcRequest.cs
@@ -0,0 +1,150 @@
+namespace Nwc.XmlRpc
+{
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+ using System.Net;
+ using System.Text;
+ using System.Reflection;
+ using System.Net.Security;
+ using System.Security.Cryptography.X509Certificates;
+
+ internal class AcceptAllCertificatePolicy : ICertificatePolicy
+ {
+ public AcceptAllCertificatePolicy()
+ {
+ }
+
+ public bool CheckValidationResult(ServicePoint sPoint,
+ System.Security.Cryptography.X509Certificates.X509Certificate cert,
+ WebRequest wRequest, int certProb)
+ {
+ // Always accept
+ return true;
+ }
+ }
+
+ /// Class supporting the request side of an XML-RPC transaction.
+ public class XmlRpcRequest
+ {
+ private String _methodName = null;
+ private Encoding _encoding = new ASCIIEncoding();
+ private XmlRpcRequestSerializer _serializer = new XmlRpcRequestSerializer();
+ private XmlRpcResponseDeserializer _deserializer = new XmlRpcResponseDeserializer();
+
+ /// ArrayList containing the parameters.
+ protected IList _params = null;
+
+ /// Instantiate an XmlRpcRequest
+ public XmlRpcRequest()
+ {
+ _params = new ArrayList();
+ }
+
+ /// Instantiate an XmlRpcRequest for a specified method and parameters.
+ /// String designating the object.method on the server the request
+ /// should be directed to.
+ /// ArrayList of XML-RPC type parameters to invoke the request with.
+ public XmlRpcRequest(String methodName, IList parameters)
+ {
+ MethodName = methodName;
+ _params = parameters;
+ }
+
+ /// ArrayList conntaining the parameters for the request.
+ public virtual IList Params
+ {
+ get { return _params; }
+ }
+
+ /// String conntaining the method name, both object and method, that the request will be sent to.
+ public virtual String MethodName
+ {
+ get { return _methodName; }
+ set { _methodName = value; }
+ }
+
+ /// String object name portion of the method name.
+ public String MethodNameObject
+ {
+ get
+ {
+ int index = MethodName.IndexOf(".");
+
+ if (index == -1)
+ return MethodName;
+
+ return MethodName.Substring(0, index);
+ }
+ }
+
+ /// String method name portion of the object.method name.
+ public String MethodNameMethod
+ {
+ get
+ {
+ int index = MethodName.IndexOf(".");
+
+ if (index == -1)
+ return MethodName;
+
+ return MethodName.Substring(index + 1, MethodName.Length - index - 1);
+ }
+ }
+
+ /// Invoke this request on the server.
+ /// String The url of the XML-RPC server.
+ /// Object The value returned from the method invocation on the server.
+ /// If an exception generated on the server side.
+ public Object Invoke(String url)
+ {
+ XmlRpcResponse res = Send(url, 10000);
+
+ if (res.IsFault)
+ throw new XmlRpcException(res.FaultCode, res.FaultString);
+
+ return res.Value;
+ }
+
+ /// Send the request to the server.
+ /// String The url of the XML-RPC server.
+ /// Milliseconds before the connection times out.
+ /// XmlRpcResponse The response generated.
+ public XmlRpcResponse Send(String url, int timeout)
+ {
+ // Override SSL authentication mechanisms
+ ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();
+
+ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+ if (request == null)
+ throw new XmlRpcException(XmlRpcErrorCodes.TRANSPORT_ERROR,
+ XmlRpcErrorCodes.TRANSPORT_ERROR_MSG + ": Could not create request with " + url);
+ request.Method = "POST";
+ request.ContentType = "text/xml";
+ request.AllowWriteStreamBuffering = true;
+ request.Timeout = timeout;
+
+ Stream stream = request.GetRequestStream();
+ XmlTextWriter xml = new XmlTextWriter(stream, _encoding);
+ _serializer.Serialize(xml, this);
+ xml.Flush();
+ xml.Close();
+
+ HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+ StreamReader input = new StreamReader(response.GetResponseStream());
+
+ XmlRpcResponse resp = (XmlRpcResponse)_deserializer.Deserialize(input);
+ input.Close();
+ response.Close();
+ return resp;
+ }
+
+ /// Produce String representation of the object.
+ /// String representation of the object.
+ override public String ToString()
+ {
+ return _serializer.Serialize(this);
+ }
+ }
+}
--
cgit v1.1