/// <summary>Handle an HTTP request containing an XML-RPC request.</summary>
    /// <remarks>This method deserializes the XML-RPC request, invokes the 
    /// described method, serializes the response (or fault) and sends the XML-RPC response
    /// back as a valid HTTP page.
    /// </remarks>
    /// <param name="httpReq"><c>SimpleHttpRequest</c> containing the request.</param>
    public void Respond(SimpleHttpRequest httpReq)
      {
	XmlRpcRequest xmlRpcReq = (XmlRpcRequest)_deserializer.Deserialize(httpReq.Input);
	XmlRpcResponse xmlRpcResp = new XmlRpcResponse();

	try
	  {
	    xmlRpcResp.Value = _server.Invoke(xmlRpcReq);
	  }
	catch (XmlRpcException e)
	  {
	    xmlRpcResp.SetFault(e.FaultCode, e.FaultString);
	  }
	catch (Exception e2)
	  {
	    xmlRpcResp.SetFault(XmlRpcErrorCodes.APPLICATION_ERROR, 
			  XmlRpcErrorCodes.APPLICATION_ERROR_MSG + ": " + e2.Message);
	  }

	if (Logger.Delegate != null)
	  Logger.WriteEntry(xmlRpcResp.ToString(), LogLevel.Information);

	XmlRpcServer.HttpHeader(httpReq.Protocol, "text/xml", 0, " 200 OK", httpReq.Output);
	httpReq.Output.Flush();
	XmlTextWriter xml = new XmlTextWriter(httpReq.Output);
	_serializer.Serialize(xml, xmlRpcResp);
	xml.Flush();
	httpReq.Output.Flush();
      }
        /// <summary>Handle an HTTP request containing an XML-RPC request.</summary>
        /// <remarks>This method deserializes the XML-RPC request, invokes the
        /// described method, serializes the response (or fault) and sends the XML-RPC response
        /// back as a valid HTTP page.
        /// </remarks>
        /// <param name="httpReq"><c>SimpleHttpRequest</c> containing the request.</param>
        public void Respond(SimpleHttpRequest httpReq)
        {
            XmlRpcRequest  xmlRpcReq  = (XmlRpcRequest)_deserializer.Deserialize(httpReq.Input);
            XmlRpcResponse xmlRpcResp = new XmlRpcResponse();

            try
            {
                xmlRpcResp.Value = _server.Invoke(xmlRpcReq);
            }
            catch (XmlRpcException e)
            {
                xmlRpcResp.SetFault(e.FaultCode, e.FaultString);
            }
            catch (Exception e2)
            {
                xmlRpcResp.SetFault(XmlRpcErrorCodes.APPLICATION_ERROR,
                                    XmlRpcErrorCodes.APPLICATION_ERROR_MSG + ": " + e2.Message);
            }

            if (Logger.Delegate != null)
            {
                Logger.WriteEntry(xmlRpcResp.ToString(), LogLevel.Information);
            }

            XmlRpcServer.HttpHeader(httpReq.Protocol, "text/xml", 0, " 200 OK", httpReq.Output);
            httpReq.Output.Flush();
            XmlTextWriter xml = new XmlTextWriter(httpReq.Output);

            _serializer.Serialize(xml, xmlRpcResp);
            xml.Flush();
            httpReq.Output.Flush();
        }
示例#3
0
        ///<summary>
        ///This method Accepts new connections and dispatches them when appropriate.
        ///</summary>
        public void StartListen()
        {
            while (true)
            {
                //Accept a new connection
                TcpClient         client  = _myListener.AcceptTcpClient();
                SimpleHttpRequest httpReq = new SimpleHttpRequest(client);

                if (httpReq.HttpMethod == "POST")
                {
                    try
                    {
                        HttpPost(httpReq);
                    }
                    catch (Exception e)
                    {
                        Logger.WriteEntry("Failed on post: " + e, EventLogEntryType.Error);
                    }
                }
                else
                {
                    Logger.WriteEntry("Only POST methods are supported: " + httpReq.HttpMethod + " ignored", EventLogEntryType.FailureAudit);
                }

                httpReq.Close();
            }
        }
        ///<summary>Close all contained resources, both the HttpReq and client.</summary>
        public void Close()
        {
            if (_httpReq != null)
            {
                _httpReq.Close();
                _httpReq = null;
            }

            if (_client != null)
            {
                _client.Close();
                _client = null;
            }
        }
        ///<summary>Close all contained resources, both the HttpReq and client.</summary>
        public void Close()
        {
            if (_httpReq != null)
            {
                _httpReq.Close();
                _httpReq = null;
            }

            if (_client != null)
            {
                _client.Close();
                _client = null;
            }
        }
示例#6
0
        public void HttpPost(SimpleHttpRequest req)
        {
            XmlRpcRequest rpc = XmlRpcRequestDeserializer.Parse(req.Input);

            XmlRpcResponse resp   = new XmlRpcResponse();
            Object         target = _handlers[rpc.MethodNameObject];

            if (target == null)
            {
                resp.SetFault(-1, "Object " + rpc.MethodNameObject + " not registered.");
            }
            else
            {
                try
                {
                    resp.Value = rpc.Invoke(target);
                }
                catch (XmlRpcException e)
                {
                    resp.SetFault(e.Code, e.Message);
                }
                catch (Exception e2)
                {
                    resp.SetFault(-1, e2.Message);
                }
            }

            Logger.WriteEntry(resp.ToString(), EventLogEntryType.Information);

            SendHeader(req.Protocol, "text/xml", 0, " 200 OK", req.Output);
            req.Output.Flush();
            XmlTextWriter xml = new XmlTextWriter(req.Output);

            XmlRpcResponseSerializer.Serialize(xml, resp);
            xml.Flush();
            req.Output.Flush();
        }
 /// <summary>Basic constructor.</summary>
 /// <param name="server">XmlRpcServer that this XmlRpcResponder services.</param>
 /// <param name="client">TcpClient with the connection.</param>
 public XmlRpcResponder(XmlRpcServer server, TcpClient client)
 {
     _server  = server;
     _client  = client;
     _httpReq = new SimpleHttpRequest(_client);
 }
    ///<summary>
    ///This method Accepts new connections and dispatches them when appropriate.
    ///</summary>
    public void StartListen()
      {
	while(true)
	  {
	    //Accept a new connection
	    TcpClient client = _myListener.AcceptTcpClient();
	    SimpleHttpRequest httpReq = new SimpleHttpRequest(client);

	    if (httpReq.HttpMethod == "POST")
	      {
		try
		  {
		    HttpPost(httpReq);
		  }
		catch (Exception e)
		  {
		    Logger.WriteEntry("Failed on post: " + e, EventLogEntryType.Error);
		  }
	      }
	    else
	      {
		Logger.WriteEntry("Only POST methods are supported: " + httpReq.HttpMethod + " ignored", EventLogEntryType.FailureAudit);
	      }

	    httpReq.Close();
	  }
      }
    public void HttpPost(SimpleHttpRequest req)
      {
	XmlRpcRequest rpc = XmlRpcRequestDeserializer.Parse(req.Input);

	XmlRpcResponse resp = new XmlRpcResponse();
	Object target = _handlers[rpc.MethodNameObject];
	
	if (target == null)
	  {
	    resp.SetFault(-1, "Object " + rpc.MethodNameObject + " not registered.");
	  }
	else
	  {
	    try
	      {
		resp.Value = rpc.Invoke(target);
	      }
	    catch (XmlRpcException e)
	      {
		resp.SetFault(e.Code, e.Message);
	      }
	    catch (Exception e2)
	      {
		resp.SetFault(-1, e2.Message);
	      }
	  }

	Logger.WriteEntry(resp.ToString(), EventLogEntryType.Information);

	SendHeader(req.Protocol, "text/xml", 0, " 200 OK", req.Output);
	req.Output.Flush();
	XmlTextWriter xml = new XmlTextWriter(req.Output);
	XmlRpcResponseSerializer.Serialize(xml, resp);
	xml.Flush();
	req.Output.Flush();
      }
    /// <summary>Basic constructor.</summary>
    /// <param name="server">XmlRpcServer that this XmlRpcResponder services.</param>
    /// <param name="client">TcpClient with the connection.</param>
    public XmlRpcResponder(XmlRpcServer server, TcpClient client)
      {
	_server = server;
	_client = client;
	_httpReq = new SimpleHttpRequest(_client);
      }