Ejemplo n.º 1
0
        /// <summary>
        // Parse the server response XML into an XmlRpcCallResult.
        /// </summary>
        /// <param name="responseText">A string that contains the response receiveld from the server.</param>
        /// <returns>An XmlRpcCallResult holding the response status and the returned XmlRpcValue.</returns>
        private XmlRpcCallResult ParseResponse(string responseText)
        {
            var responseDocument      = XDocument.Parse(responseText);
            var methodResponseElement = responseDocument.Element("methodResponse");

            if (methodResponseElement == null)
            {
                throw new XmlRpcException("Expected <methodResponse> element is missing.");
            }

            var paramsElement = methodResponseElement.Element("params");
            var faultElement  = methodResponseElement.Element("fault");

            var result = new XmlRpcValue();

            if (paramsElement != null)
            {
                var selection = paramsElement.Elements("param").ToList();
                if (selection.Count > 1)
                {
                    result.SetArray(selection.Count);
                    for (int i = 0; i < selection.Count; i++)
                    {
                        var value = new XmlRpcValue();
                        value.FromXElement(selection[i].Element("value"));
                        result.Set(i, value);
                    }
                }
                else if (selection.Count == 1)
                {
                    result.FromXElement(selection[0].Element("value"));
                }
                else
                {
                    return(new XmlRpcCallResult {
                        Value = result, Success = false
                    });
                }
            }
            else if (faultElement != null)
            {
                result.FromXElement(faultElement.Element("value"));
                return(new XmlRpcCallResult {
                    Value = result, Success = false
                });
            }
            else
            {
                throw new XmlRpcException("Invalid response - no param or fault tag found.");
            }

            return(new XmlRpcCallResult {
                Value = result, Success = true
            });
        }
Ejemplo n.º 2
0
        // Parse the method name and the argument values from the request.
        private string ParseRequest(XmlRpcValue parms, string request)
        {
            string methodName = "unknown";

            var requestDocument   = XDocument.Parse(request);
            var methodCallElement = requestDocument.Element("methodCall");

            if (methodCallElement == null)
            {
                throw new XmlRpcException("Expected <methodCall> element of XML-RPC is missing.");
            }

            var methodNameElement = methodCallElement.Element("methodName");

            if (methodNameElement != null)
            {
                methodName = methodNameElement.Value;
            }

            var xmlParameters = methodCallElement.Element("params").Elements("param").ToList();

            if (xmlParameters.Count > 0)
            {
                parms.SetArray(xmlParameters.Count);

                for (int i = 0; i < xmlParameters.Count; i++)
                {
                    var value = new XmlRpcValue();
                    value.FromXElement(xmlParameters[i].Element("value"));
                    parms.Set(i, value);
                }
            }

            return(methodName);
        }