Esempio n. 1
0
        public void ParseXmlRpcFaultResponse()
        {
            String xmlrpc = @"
<methodResponse>
   <fault>
      <value>
         <struct>
            <member>
               <name>faultCode</name>
               <value><int>4</int></value>
               </member>
            <member>
               <name>faultString</name>
               <value><string>Too many parameters.</string></value>
               </member>
            </struct>
         </value>
      </fault>
   </methodResponse>
";

            XmlTextReader            reader     = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpc)));
            XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();
            IXmlRpcResponse          request    = serializer.ReadResponse(reader, null, new TypeSerializerFactory());

            Assert.IsNull(request.Result);
            Assert.IsNotNull(request.Fault);
            Assert.IsEqualTo(request.Fault.FaultCode, 4);
            Assert.IsEqualTo(request.Fault.FaultString, "Too many parameters.");
        }
        public void SerializeResponseOnType()
        {
            var        deserializer = new XmlRpcResponseSerializer();
            var        proxy        = XmlRpcProxyGen.Create <TestMethods2>();
            MethodInfo mi           = proxy.GetType().GetMethod("Bar");
            var        response     = new XmlRpcResponse(IntEnum.Three, mi);
            var        stm          = new MemoryStream();

            deserializer.SerializeResponse(stm, response);
            stm.Position = 0;
            TextReader tr     = new StreamReader(stm);
            string     reqstr = tr.ReadToEnd();

            Assert.AreEqual(
                @"<?xml version=""1.0""?>
<methodResponse>
  <params>
    <param>
      <value>
        <string>Three</string>
      </value>
    </param>
  </params>
</methodResponse>", reqstr);
        }
Esempio n. 3
0
        Stream TryInvoke(Stream requestStream)
        {
            var deserializer = new XmlRpcRequestDeserializer();
            var serviceAttr  = (XmlRpcServiceAttribute)Attribute.GetCustomAttribute(GetType(), typeof(XmlRpcServiceAttribute));

            if (serviceAttr != null)
            {
                SetSerializerSettings(serviceAttr, deserializer);
            }

            var xmlRpcReq = deserializer.DeserializeRequest(requestStream, GetType());

            XmlRpcResponse xmlRpcResp = null;

            if (xmlRpcReq.Method.Equals("system.multicall", StringComparison.OrdinalIgnoreCase))
            {
                var resultList = InvokeMulticall(xmlRpcReq);
                xmlRpcResp = new XmlRpcResponse(resultList.Where(x => x != null).ToArray());
            }
            else
            {
                var result = Invoke(xmlRpcReq);
                xmlRpcResp = new XmlRpcResponse(result);
            }

            var responseStream = new MemoryStream();
            var serializer     = new XmlRpcResponseSerializer();

            serializer.SerializeResponse(responseStream, xmlRpcResp);
            responseStream.Seek(0, SeekOrigin.Begin);
            return(responseStream);
        }
Esempio n. 4
0
        private void SerializeResponse(IMessage responseMsg, ref ITransportHeaders responseHeaders, ref Stream responseStream, IXmlRpcStreamRequestConfig config)
        {
            XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();

            responseStream  = new MemoryStream();
            responseHeaders = new TransportHeaders();

            ReturnMessage  retMsg = (ReturnMessage)responseMsg;
            XmlRpcResponse response;

            if (retMsg.Exception == null)
            {
                response = new XmlRpcResponse(retMsg.ReturnValue);
            }
            else if (retMsg.Exception is XmlRpcException)
            {
                response       = new XmlRpcResponse();
                response.Fault = (retMsg.Exception as XmlRpcException).Fault;
            }
            else
            {
                response       = new XmlRpcResponse();
                response.Fault = new XmlRpcFault(1, retMsg.Exception.Message);
            }
            serializer.WriteResponse(responseStream, response, config, TypeSerializerFactory);
            responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\"";
        }
Esempio n. 5
0
        private void WriteResponse(IXmlRpcStreamRequestConfig config, Stream outputStream, IXmlRpcResponse response)
        {
            XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();

            if (_xmlWriterFactory != null)
            {
                serializer.XmlWriterFactory = _xmlWriterFactory;
            }
            serializer.WriteResponse(outputStream, response, config, TypeSerializerFactory);
        }
Esempio n. 6
0
        public void WriteXmlRpcResponse()
        {
            XmlRpcResponse           response   = new XmlRpcResponse("South Dakota");
            StringBuilder            sb         = new StringBuilder();
            XmlTextWriter            writer     = new XmlTextWriter(new StringWriter(sb));
            XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();

            serializer.WriteResponse(writer, response, null, new TypeSerializerFactory());
            Assert.IsEqualTo(sb.ToString(), @"<?xml version=""1.0"" encoding=""utf-16""?><methodResponse><params><param><value><string>South Dakota</string></value></param></params></methodResponse>");
        }
Esempio n. 7
0
 public override string ToRawString(Direction direction)
 {
     if (direction == Direction)
     {
         StringBuilder sb = new StringBuilder(4096);
         if (m_headers != null)
         {
             if (m_headers.ContainsKey("method"))
             {
                 sb.Append(m_headers["method"]);
                 sb.Append(": ");
                 sb.Append(Host);
                 sb.AppendLine();
             }
             m_headers.Remove("host");
             foreach (KeyValuePair <string, string> kvp in m_headers)
             {
                 if (kvp.Key == "method")
                 {
                     continue;
                 }
                 sb.Append(kvp.Key);
                 sb.Append(' ');
                 sb.Append(kvp.Value);
                 sb.AppendLine();
             }
             sb.AppendLine();
         }
         using (MemoryStream ms = new MemoryStream(1024))
         {
             using (XmlTextWriter xml = new XmlTextWriter(ms, new UTF8Encoding(false)))
             {
                 if (Data is XmlRpcResponse)
                 {
                     var xrpcr = new XmlRpcResponseSerializer();
                     xrpcr.Serialize(xml, Data);
                 }
                 else
                 {
                     var xrpcr = new XmlRpcRequestSerializer();
                     xrpcr.Serialize(xml, Data);
                 }
                 xml.Flush();
                 sb.Append(UTF8Encoding.UTF8.GetString(ms.ToArray()));
             }
         }
         return(sb.ToString());
     }
     else
     {
         return(string.Empty);
     }
 }
Esempio n. 8
0
        public void WriteXmlRpcFaultResponse()
        {
            XmlRpcResponse response = new XmlRpcResponse(null);

            response.Fault = new XmlRpcFault(4, "Too many parameters.");
            StringBuilder            sb         = new StringBuilder();
            XmlTextWriter            writer     = new XmlTextWriter(new StringWriter(sb));
            XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();

            serializer.WriteResponse(writer, response, null, new TypeSerializerFactory());
            Assert.IsEqualTo(sb.ToString(), @"<?xml version=""1.0"" encoding=""utf-16""?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>4</i4></value></member><member><name>faultString</name><value><string>Too many parameters.</string></value></member></struct></value></fault></methodResponse>");
        }
 public void PaoloLiveraniProblem()
 {
     try
     {
         XmlRpcResponse resp           = new XmlRpcResponse(new DataSet());
         Stream         responseStream = new MemoryStream();
         var            serializer     = new XmlRpcResponseSerializer();
         serializer.SerializeResponse(responseStream, resp);
     }
     catch (XmlRpcInvalidReturnType ex)
     {
         string s = ex.Message;
     }
 }
Esempio n. 10
0
        public void ParseXmlRpcResponse()
        {
            String xmlrpc = @"
<methodResponse>
   <params>
      <param>
         <value><string>South Dakota</string></value>
         </param>
      </params>
   </methodResponse>";

            XmlTextReader            reader     = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpc)));
            XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();
            IXmlRpcResponse          request    = serializer.ReadResponse(reader, null, new TypeSerializerFactory());

            Assert.IsNull(request.Fault);
            Assert.IsEqualTo(request.Result, "South Dakota");
        }
Esempio n. 11
0
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
                                               IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
                                               out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            if (requestHeaders["SOAPAction"] != null)
            {
                // pass to next sink if this is a SOAP request with SOAPAction header.
                return(NextChannelSink.ProcessMessage(sinkStack,
                                                      requestMsg, requestHeaders, requestStream,
                                                      out responseMsg, out responseHeaders, out responseStream));
            }

            XmlRpcHttpRequestConfig requestConfig = GetConfig(requestHeaders);

            try
            {
                MethodCall call = DeserializeRequest(requestHeaders, requestStream, requestConfig);
                sinkStack.Push(this, call);
                // forward to next sink in chain - pass request stream as null to
                // indicate that we have deserialized the request
                NextChannelSink.ProcessMessage(sinkStack, call, requestHeaders, null,
                                               out responseMsg, out responseHeaders, out responseStream);
                SerializeResponse(responseMsg, ref responseHeaders, ref responseStream, requestConfig);
            }
            catch (Exception ex)
            {
                responseMsg    = new ReturnMessage(ex, (IMethodCallMessage)requestMsg);
                responseStream = new MemoryStream();
                XmlRpcResponseSerializer serializer    = new XmlRpcResponseSerializer();
                XmlRpcResponse           faultResponse = new XmlRpcResponse();
                faultResponse.Fault = new XmlRpcFault(0, ex.Message);
                serializer.WriteResponse(responseStream, faultResponse, requestConfig, TypeSerializerFactory);
                responseHeaders = new TransportHeaders();
                responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\"";
            }

            return(ServerProcessing.Complete);
        }
        public void SerializeResponseOnMethod()
        {
            var deserializer = new XmlRpcResponseSerializer();
            var response     = new XmlRpcResponse(IntEnum.One,
                                                  GetType().GetMethod("MappingReturnOnMethod"));
            var stm = new MemoryStream();

            deserializer.SerializeResponse(stm, response);
            stm.Position = 0;
            TextReader tr     = new StreamReader(stm);
            string     reqstr = tr.ReadToEnd();

            Assert.AreEqual(
                @"<?xml version=""1.0""?>
<methodResponse>
  <params>
    <param>
      <value>
        <string>One</string>
      </value>
    </param>
  </params>
</methodResponse>", reqstr);
        }