/// <summary> /// Serializes an XML-RPC response to a response stream. /// </summary> /// <param name="responseStream">the <see cref="System.IO.Stream"/> to write</param> /// <param name="response">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcResponse"/> 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 response XML</exception> public void WriteResponse(Stream responseStream, IXmlRpcResponse response, IXmlRpcStreamRequestConfig config, ITypeSerializerFactory typeSerializerFactory) { XmlWriter writer = _xmlWriterFactory.GetXmlWriter(config, responseStream); WriteResponse(writer, response, config, typeSerializerFactory); writer.Flush(); }
private void HandlePOST(HttpRequest request, HttpResponse response) { response.ContentType = "text/xml"; IXmlRpcStreamRequestConfig config = GetConfig(request); Execute(config, new HttpStream(request, response)); }
/// <summary> /// Gets output stream. /// </summary> protected virtual Stream GetOutputStream(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { Stream outputStream = serverStream.OutputStream; if (config.EnabledForExtensions && config.GzipRequesting) return new GZipStream(outputStream, CompressionMode.Compress); else return outputStream; }
/// <summary> /// Gets input stream. /// </summary> protected virtual Stream GetInputStream(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { Stream inputStream = serverStream.InputStream; if (config.EnabledForExtensions && config.GzipCompressing) return new GZipStream(inputStream, CompressionMode.Decompress); else return inputStream; }
/// <summary> /// Gets output stream. /// </summary> protected override Stream GetOutputStream(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { if (config.EnabledForExtensions && config.GzipRequesting) { SetResponseHeader(serverStream, HttpHelper.ContentEncodingHeader, "gzip"); } return(base.GetOutputStream(config, serverStream)); }
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); }
/// <summary> /// Gets input stream. /// </summary> protected virtual Stream GetInputStream(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { Stream inputStream = serverStream.InputStream; if (config.EnabledForExtensions && config.GzipCompressing) { return(new GZipStream(inputStream, CompressionMode.Decompress)); } else { return(inputStream); } }
/// <summary> /// Gets output stream. /// </summary> protected virtual Stream GetOutputStream(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { Stream outputStream = serverStream.OutputStream; if (config.EnabledForExtensions && config.GzipRequesting) { return(new GZipStream(outputStream, CompressionMode.Compress)); } else { return(outputStream); } }
/// <summary> /// Serializes an XML-RPC response to a <see cref="System.Xml.XmlWriter"/>. /// </summary> /// <param name="writer">the <see cref="System.Xml.XmlWriter"/> to write</param> /// <param name="response">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcResponse"/> 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 response XML</exception> public void WriteResponse(XmlWriter writer, IXmlRpcResponse response, IXmlRpcStreamRequestConfig config, ITypeSerializerFactory typeSerializerFactory) { writer.WriteStartDocument(); writer.WriteStartElement(XmlRpcSpec.METHOD_RESPONSE_TAG); if (response.Fault == null) RecursiveTypeSerializer.WriteParams(writer, config, typeSerializerFactory, response.Result); else WriteFaultResponse(writer, response.Fault, config, typeSerializerFactory); writer.WriteEndElement(); writer.WriteEndDocument(); }
/// <summary> /// Serializes an XML-RPC response to a <see cref="System.Xml.XmlWriter"/>. /// </summary> /// <param name="writer">the <see cref="System.Xml.XmlWriter"/> to write</param> /// <param name="response">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcResponse"/> 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 response XML</exception> public void WriteResponse(XmlWriter writer, IXmlRpcResponse response, IXmlRpcStreamRequestConfig config, ITypeSerializerFactory typeSerializerFactory) { writer.WriteStartDocument(); writer.WriteStartElement(XmlRpcSpec.METHOD_RESPONSE_TAG); if (response.Fault == null) { RecursiveTypeSerializer.WriteParams(writer, config, typeSerializerFactory, response.Result); } else { WriteFaultResponse(writer, response.Fault, config, typeSerializerFactory); } writer.WriteEndElement(); writer.WriteEndDocument(); }
private static void WriteFaultResponse(XmlWriter writer, IXmlRpcFault fault, IXmlRpcStreamRequestConfig config, ITypeSerializerFactory typeSerializerFactory) { writer.WriteStartElement(XmlRpcSpec.FAULT_TAG); ArrayList nestvedObjs = new ArrayList(); if (config != null && config.EnabledForExceptions) { Hashtable ht = new Hashtable(3); XmlRpcFault xpf = fault as XmlRpcFault; ht.Add(XmlRpcSpec.FAULT_CODE_TAG, fault.FaultCode); ht.Add(XmlRpcSpec.FAULT_STRING_TAG, fault.FaultString); ht.Add("faultCause", fault is XmlRpcFault ? ((XmlRpcFault)fault).Exception : null); RecursiveTypeSerializer.WriteValue(writer, ht, config, typeSerializerFactory, nestvedObjs); } else { RecursiveTypeSerializer.WriteValue(writer, fault, config, typeSerializerFactory, nestvedObjs); } writer.WriteEndElement(); }
/// <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); }
/// <summary> /// Gets output stream. /// </summary> protected override Stream GetOutputStream(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { if (config.EnabledForExtensions && config.GzipRequesting) SetResponseHeader(serverStream, HttpHelper.ContentEncodingHeader, "gzip"); return base.GetOutputStream(config, serverStream); }
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); }
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); }
private IXmlRpcRequest GetRequest(IXmlRpcStreamRequestConfig config, Stream inputStream) { XmlRpcRequestSerializer parser = new XmlRpcRequestSerializer(); return(parser.ReadRequest(new XmlTextReader(inputStream), config, TypeSerializerFactory)); }
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\""; }
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; }
private IXmlRpcRequest GetRequest(IXmlRpcStreamRequestConfig config, Stream inputStream) { XmlRpcRequestSerializer parser = new XmlRpcRequestSerializer(); return parser.ReadRequest(inputStream, config, TypeSerializerFactory); }