Beispiel #1
0
 /// <summary>
 /// Serializes an XML-RPC request to a request stream.
 /// </summary>
 /// <param name="requestStream">the <see cref="System.IO.Stream"/> to write</param>
 /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to serialize</param>
 /// <param name="config">the context configuration</param>
 /// <param name="typeSerializerFactory">the <see cref="LX.EasyWeb.XmlRpc.Serializer.ITypeSerializerFactory"/> to get type serializers</param>
 /// <exception cref="System.Xml.XmlException">failed writing the request XML</exception>
 public void WriteRequest(Stream requestStream, IXmlRpcRequest request, IXmlRpcStreamConfig config, ITypeSerializerFactory typeSerializerFactory)
 {
     using (XmlWriter writer = _xmlWriterFactory.GetXmlWriter(config, requestStream))
     {
         WriteRequest(writer, request, config, typeSerializerFactory);
     }
 }
Beispiel #2
0
        public void ParseMalformedMultiDataInArray()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>
                <array>
                   <data>
                      <value><i4>12</i4></value>
                    </data>
                   <data>
                      <value><i4>-31</i4></value>
                    </data>
                </array>
            </value></param>
        </params>
    </methodCall>";

            IXmlRpcRequest request = null;
            Exception      ex      = null;

            try
            {
                request = Parse(xmlrpcRequest);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsEqualTo(((Object[])request.Parameters[0])[0], 12);
            Assert.IsEqualTo(((Object[])request.Parameters[0])[1], -31);
            //Assert.IsNotNull(ex);
            //Assert.IsEqualTo(ex.Message, "More than one data element in the array element.");
        }
Beispiel #3
0
        public void ParseDefaultTypeName()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>default string</value></param>
            <param><value>
                <array>
                   <data>
                      <value>default string in array</value>
                    </data>
                </array>
            </value></param>
            <param><value>
                <struct>
                    <member>
                        <name>name</name>
                        <value>default string in struct</value>
                    </member>
                </struct>
            </value></param>
        </params>
    </methodCall>";

            IXmlRpcRequest request = Parse(xmlrpcRequest);

            Assert.IsEqualTo(request.Parameters[0], "default string");
            Assert.IsEqualTo(((Object[])request.Parameters[1])[0], "default string in array");
            Assert.IsEqualTo(((IDictionary <String, Object>)request.Parameters[2])["name"], "default string in struct");
        }
Beispiel #4
0
        public void ParseMalformedMultiEntriesInValue()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>
                <i4>1</i4>
                <i4>2</i4>
            </value></param>
        </params>
    </methodCall>";

            IXmlRpcRequest request = null;
            Exception      ex      = null;

            try
            {
                request = Parse(xmlrpcRequest);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsEqualTo(request.Parameters[0], 2);
            //Assert.IsNotNull(ex);
            //Assert.IsEqualTo(ex.Message, "More than one data element in the array element.");
        }
Beispiel #5
0
        public void ParseDuplicateMemberNameInStruct()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>
                <struct>
                   <member>
                      <name>m1</name><value></value>
                    </member>
                   <member>
                      <name>m1</name><value></value>
                    </member>
                </struct>
            </value></param>
        </params>
    </methodCall>";

            IXmlRpcRequest request = null;
            Exception      ex      = null;

            try
            {
                request = Parse(xmlrpcRequest);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsNotNull(ex);
            Assert.IsEqualTo(ex.Message, "Duplicate struct member name: m1");
        }
Beispiel #6
0
        public void ParseMalformedMissingValueInStruct()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>
                <struct>
                   <member>
                      <name>m1</name>
                    </member>
                </struct>
            </value></param>
        </params>
    </methodCall>";

            IXmlRpcRequest request = null;
            Exception      ex      = null;

            try
            {
                request = Parse(xmlrpcRequest);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsNotNull(ex);
            Assert.IsEqualTo(ex.Message, "Expected value element, got ");
        }
Beispiel #7
0
        private static Header[] GetChannelHeaders(String requestUri, IXmlRpcRequest request, IXmlRpcHandler handler, Type type)
        {
            List <Header> headers = new List <Header>();

            headers.Add(new Header("__Uri", requestUri));
            headers.Add(new Header("__TypeName", type.AssemblyQualifiedName));
            headers.Add(new Header("__MethodName", handler.GetMethod(request).Name));
            headers.Add(new Header("__Args", request.Parameters));
            return(headers.ToArray());
        }
Beispiel #8
0
        public void ParseMissingParams()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
    </methodCall>";

            IXmlRpcRequest request = Parse(xmlrpcRequest);

            Assert.IsEqualTo(request.MethodName, "sample");
        }
Beispiel #9
0
        /// <summary>
        /// Serializes an XML-RPC request to a <see cref="System.Xml.XmlWriter"/>.
        /// </summary>
        /// <param name="writer">the <see cref="System.Xml.XmlWriter"/> to write</param>
        /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to serialize</param>
        /// <param name="config">the context configuration</param>
        /// <param name="typeSerializerFactory">the <see cref="LX.EasyWeb.XmlRpc.Serializer.ITypeSerializerFactory"/> to get type serializers</param>
        /// <exception cref="System.Xml.XmlException">failed writing the request XML</exception>
        public void WriteRequest(XmlWriter writer, IXmlRpcRequest request, IXmlRpcStreamConfig config, ITypeSerializerFactory typeSerializerFactory)
        {
            writer.WriteStartDocument();
            writer.WriteStartElement(XmlRpcSpec.METHOD_CALL_TAG);

            writer.WriteElementString(XmlRpcSpec.METHOD_NAME_TAG, request.MethodName);
            RecursiveTypeSerializer.WriteParams(writer, config, typeSerializerFactory, request.Parameters);

            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
        public Object Execute(IXmlRpcRequest request)
        {
            if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request))
                throw new XmlRpcException("Not authorized");

            Object[] args = request.Parameters ?? Empty;
            XmlRpcMethod method = GetMethod(args);
            ConvertParams(method.TypeConverters, args);
            //return Invoke(method.Method, _targetProvider == null ? request.Target : _targetProvider.GetTarget(request), request.Parameters);
            if (request.Target == null && _targetProvider != null)
                request.Target = _targetProvider.GetTarget(request);
            return Invoke(method.Method, request.Target, args);
        }
Beispiel #11
0
        public void ParseEmptyValue()
        {
            String         xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param>
                <value></value>
            </param>
        </params>
    </methodCall>";
            IXmlRpcRequest request       = Parse(xmlrpcRequest);

            Assert.IsNull(request.Parameters[0]);
        }
Beispiel #12
0
        public void ParseRecursiveData()
        {
            String xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>
                <struct>
                   <member>
                      <name>arrayInStruct</name>
                      <value>
                        <array><data><value><i4>1</i4></value><value><i4>2</i4></value></data></array>
                      </value>
                    </member>
                </struct>
            </value></param>
            <param><value>
                <array>
                 <data><value>
                   <struct><member>
                      <name>arrayInStructInArray</name>
                      <value>
                        <array><data><value><i4>3</i4></value><value><i4>4</i4></value></data></array>
                      </value>
                    </member></struct>
                 </value></data>
                </array>
            </value></param>
        </params>
    </methodCall>";

            IXmlRpcRequest request = null;
            Exception      ex      = null;

            try
            {
                request = Parse(xmlrpcRequest);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsNull(ex);
            Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)request.Parameters[0])["arrayInStruct"])[0], 1);
            Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)request.Parameters[0])["arrayInStruct"])[1], 2);
            Object[] array = (Object[])request.Parameters[1];
            Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)array[0])["arrayInStructInArray"])[0], 3);
            Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)array[0])["arrayInStructInArray"])[1], 4);
        }
Beispiel #13
0
        public Object Execute(IXmlRpcRequest request)
        {
            if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request))
            {
                throw new XmlRpcException("Not authorized");
            }

            if (request.Target == null && _targetProvider != null)
            {
                request.Target = _targetProvider.GetTarget(request);
            }
            IXmlRpcHandler handler = (IXmlRpcHandler)request.Target;

            return(handler.Execute(request));
        }
Beispiel #14
0
        private MethodCall DeserializeRequest(ITransportHeaders requestHeaders, Stream requestStream, IXmlRpcStreamRequestConfig config)
        {
            String requestUri = GetRequestUri(requestHeaders);
            Type   svcType    = GetServerTypeForUri(requestUri);

            if (!_mapping.Has(svcType))
            {
                _mapping.Register(svcType);
            }
            IXmlRpcRequest request = GetRequest(config, requestStream);
            IXmlRpcHandler handler = GetHandler(request);

            Header[]   headers = GetChannelHeaders(requestUri, request, handler, svcType);
            MethodCall call    = new MethodCall(headers);

            call.ResolveMethod();
            return(call);
        }
Beispiel #15
0
        public Object Execute(IXmlRpcRequest request)
        {
            if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request))
            {
                throw new XmlRpcException("Not authorized");
            }

            Object[]     args   = request.Parameters ?? Empty;
            XmlRpcMethod method = GetMethod(args);

            ConvertParams(method.TypeConverters, args);
            //return Invoke(method.Method, _targetProvider == null ? request.Target : _targetProvider.GetTarget(request), request.Parameters);
            if (request.Target == null && _targetProvider != null)
            {
                request.Target = _targetProvider.GetTarget(request);
            }
            return(Invoke(method.Method, request.Target, args));
        }
Beispiel #16
0
        public void ParseMalformedValue()
        {
            String    xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param>
                <value><i4><shoudnotbehere/></i4></value>
            </param>
        </params>
    </methodCall>";
            Exception ex            = null;

            try
            {
                IXmlRpcRequest request = Parse(xmlrpcRequest);
            }
            catch (Exception e)
            {
                ex = e;
            }
            Assert.IsNotNull(ex);
        }
Beispiel #17
0
        /// <summary>
        /// Executes requests from streams.
        /// </summary>
        /// <param name="config"></param>
        /// <param name="serverStream">the <see cref="IServerStream"/> to process</param>
        public void Execute(IXmlRpcStreamRequestConfig config, IServerStream serverStream)
        {
            Stream         inputStream;
            XmlRpcResponse response = new XmlRpcResponse();

            try
            {
                inputStream = GetInputStream(config, serverStream);
                IXmlRpcRequest request = GetRequest(config, inputStream);
                response.Result = Execute(request);
            }
            catch (XmlRpcException ex)
            {
                response.Fault = ex.Fault;
            }
            catch (Exception ex)
            {
                response.Fault = new XmlRpcFault(0, ex.Message, ex);
            }

            Stream outputStream = GetOutputStream(config, serverStream);

            WriteResponse(config, outputStream, response);
        }
Beispiel #18
0
 public MethodInfo GetMethod(IXmlRpcRequest request)
 {
     return(GetMethod(request.Parameters ?? Empty).Method);
 }
Beispiel #19
0
 public Object GetTarget(IXmlRpcRequest request)
 {
     return(Activator.CreateInstance(_type));
 }
 private static Header[] GetChannelHeaders(String requestUri, IXmlRpcRequest request, IXmlRpcHandler handler, Type type)
 {
     List<Header> headers = new List<Header>();
     headers.Add(new Header("__Uri", requestUri));
     headers.Add(new Header("__TypeName", type.AssemblyQualifiedName));
     headers.Add(new Header("__MethodName", handler.GetMethod(request).Name));
     headers.Add(new Header("__Args", request.Parameters));
     return headers.ToArray();
 }
Beispiel #21
0
 /// <summary>
 /// Gets the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcHandler"/> which the request called.
 /// </summary>
 /// <param name="request">the incoming <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/></param>
 /// <returns>an associated handler</returns>
 /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found</exception>
 protected abstract IXmlRpcHandler GetHandler(IXmlRpcRequest request);
 public MethodInfo GetMethod(IXmlRpcRequest request)
 {
     return GetMethod(request.Parameters ?? Empty).Method;
 }
 private IXmlRpcHandler GetHandler(IXmlRpcRequest request)
 {
     return _mapping.GetHandler(request.MethodName);
 }
 /// <summary>
 /// Serializes an XML-RPC request to a request stream.
 /// </summary>
 /// <param name="requestStream">the <see cref="System.IO.Stream"/> to write</param>
 /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to serialize</param>
 /// <param name="config">the context configuration</param>
 /// <param name="typeSerializerFactory">the <see cref="LX.EasyWeb.XmlRpc.Serializer.ITypeSerializerFactory"/> to get type serializers</param>
 /// <exception cref="System.Xml.XmlException">failed writing the request XML</exception>
 public void WriteRequest(Stream requestStream, IXmlRpcRequest request, IXmlRpcStreamConfig config, ITypeSerializerFactory typeSerializerFactory)
 {
     using (XmlWriter writer = _xmlWriterFactory.GetXmlWriter(config, requestStream))
     {
         WriteRequest(writer, request, config, typeSerializerFactory);
     }
 }
 public MethodInfo GetMethod(IXmlRpcRequest request)
 {
     return null;
 }
 public Object GetTarget(IXmlRpcRequest request)
 {
     return Activator.CreateInstance(_type);
 }
 protected override IXmlRpcHandler GetHandler(IXmlRpcRequest request)
 {
     request.Target = this;
     return _mapping.GetHandler(request.MethodName);
 }
Beispiel #28
0
        public void ParseXmlRpcRequest()
        {
            String        xmlrpcRequest = @"<methodCall>
        <methodName>sample</methodName>
        <params>
            <param><value>eW91IGNhbid0IHJlYWQgdGhpcyE=</value></param>
            <param><value><i4>3</i4></value></param>
            <param><value><int>-7</int></value></param>
            <param><value><i8>1234567890</i8></value></param>
            <param><value><boolean>1</boolean></value></param>
            <param><value><boolean>false</boolean></value></param>
            <param><value><string>hello xmlrpc</string></value></param>
            <param><value><double>-3.145</double></value></param>
            <param><value><dateTime.iso8601>19980717T14:08:55</dateTime.iso8601></value></param>
            <param><value><base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64></value></param>
            <param><value>
                <array>
                   <data>
                      <value><i4>12</i4></value>
                      <value><string>Egypt</string></value>
                      <value><boolean>0</boolean></value>
                      <value><i4>-31</i4></value>
                    </data>
                </array>
            </value></param>
            <param><value>
                <struct>
                    <member>
                        <name>lowerBound</name>
                        <value><i4>18</i4></value>
                    </member>
                    <member>
                        <name>upperBound</name>
                        <value><i4>139</i4></value>
                    </member>
                </struct>
            </value></param>
        </params>
    </methodCall>";
            XmlTextReader reader        = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpcRequest)));
            //IXmlRpcRequest request = new XmlRpcRequestSerializer(null, new TypeFactory(), reader);
            XmlRpcRequestSerializer parser  = new XmlRpcRequestSerializer();
            IXmlRpcRequest          request = parser.ReadRequest(reader, null, new TypeSerializerFactory());

            Assert.IsEqualTo(request.MethodName, "sample");
            Assert.IsEqualTo(request.Parameters[0], "eW91IGNhbid0IHJlYWQgdGhpcyE=");
            Assert.IsEqualTo(request.Parameters[1], 3);
            Assert.IsEqualTo(request.Parameters[2], -7);
            Assert.IsEqualTo(request.Parameters[3], 1234567890L);
            Assert.IsEqualTo(request.Parameters[4], true);
            Assert.IsEqualTo(request.Parameters[5], false);
            Assert.IsEqualTo(request.Parameters[6], "hello xmlrpc");
            Assert.IsEqualTo(request.Parameters[7], -3.145D);
            Assert.IsEqualTo(request.Parameters[8], new DateTime(1998, 7, 17, 14, 8, 55));
            Assert.IsSequenceEqualTo((Byte[])request.Parameters[9], Convert.FromBase64String("eW91IGNhbid0IHJlYWQgdGhpcyE="));

            Object[] array = (Object[])request.Parameters[10];
            Assert.IsEqualTo(array[0], 12);
            Assert.IsEqualTo(array[1], "Egypt");
            Assert.IsEqualTo(array[2], false);
            Assert.IsEqualTo(array[3], -31);

            IDictionary <String, Object> map = (IDictionary <String, Object>)request.Parameters[11];

            Assert.IsEqualTo(map["lowerBound"], 18);
            Assert.IsEqualTo(map["upperBound"], 139);
            //Assert.IsEqualTo(request.Parameters[10],);
        }
Beispiel #29
0
 public Object GetTarget(IXmlRpcRequest request)
 {
     return(_obj);
 }
Beispiel #30
0
 public MethodInfo GetMethod(IXmlRpcRequest request)
 {
     return(null);
 }
Beispiel #31
0
        /// <summary>
        /// Executes a XML-RPC request.
        /// </summary>
        /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to execute</param>
        /// <returns>a result object</returns>
        /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found, or an exception occurs when handling the request</exception>
        public Object Execute(IXmlRpcRequest request)
        {
            IXmlRpcHandler handler = GetHandler(request);

            return(handler.Execute(request));
        }
Beispiel #32
0
 private IXmlRpcHandler GetHandler(IXmlRpcRequest request)
 {
     return(_mapping.GetHandler(request.MethodName));
 }
 public Object GetTarget(IXmlRpcRequest request)
 {
     return _obj;
 }
Beispiel #34
0
 /// <summary>
 /// Gets the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcHandler"/> which the request called.
 /// </summary>
 /// <param name="request">the incoming <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/></param>
 /// <returns>an associated handler</returns>
 /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found</exception>
 protected abstract IXmlRpcHandler GetHandler(IXmlRpcRequest request);
Beispiel #35
0
 protected override IXmlRpcHandler GetHandler(IXmlRpcRequest request)
 {
     request.Target = this;
     return(_mapping.GetHandler(request.MethodName));
 }
Beispiel #36
0
 /// <summary>
 /// Executes a XML-RPC request.
 /// </summary>
 /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to execute</param>
 /// <returns>a result object</returns>
 /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found, or an exception occurs when handling the request</exception>
 public Object Execute(IXmlRpcRequest request)
 {
     IXmlRpcHandler handler = GetHandler(request);
     return handler.Execute(request);
 }
        /// <summary>
        /// Serializes an XML-RPC request to a <see cref="System.Xml.XmlWriter"/>.
        /// </summary>
        /// <param name="writer">the <see cref="System.Xml.XmlWriter"/> to write</param>
        /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to serialize</param>
        /// <param name="config">the context configuration</param>
        /// <param name="typeSerializerFactory">the <see cref="LX.EasyWeb.XmlRpc.Serializer.ITypeSerializerFactory"/> to get type serializers</param>
        /// <exception cref="System.Xml.XmlException">failed writing the request XML</exception>
        public void WriteRequest(XmlWriter writer, IXmlRpcRequest request, IXmlRpcStreamConfig config, ITypeSerializerFactory typeSerializerFactory)
        {
            writer.WriteStartDocument();
            writer.WriteStartElement(XmlRpcSpec.METHOD_CALL_TAG);

            writer.WriteElementString(XmlRpcSpec.METHOD_NAME_TAG, request.MethodName);
            RecursiveTypeSerializer.WriteParams(writer, config, typeSerializerFactory, request.Parameters);

            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
        public Object Execute(IXmlRpcRequest request)
        {
            if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request))
                throw new XmlRpcException("Not authorized");

            if (request.Target == null && _targetProvider != null)
                request.Target = _targetProvider.GetTarget(request);
            IXmlRpcHandler handler = (IXmlRpcHandler)request.Target;
            return handler.Execute(request);
        }