diff --git a/lib/xmlrpc.rb b/lib/xmlrpc.rb index aca9c4d..6242775 100644 --- a/lib/xmlrpc.rb +++ b/lib/xmlrpc.rb @@ -44,7 +44,7 @@ # * Server # * Standalone XML-RPC server # * CGI-based (works with FastCGI) -# * Apache mod_ruby server +# * Rack application # * WEBrick servlet # # * Client diff --git a/lib/xmlrpc/server.rb b/lib/xmlrpc/server.rb index 25de8da..8095c63 100644 --- a/lib/xmlrpc/server.rb +++ b/lib/xmlrpc/server.rb @@ -456,82 +456,6 @@ def http_write(body, header) end -# Implements a XML-RPC server, which works with Apache mod_ruby. -# -# Use it in the same way as XMLRPC::CGIServer! -class ModRubyServer < BasicServer - - # Creates a new XMLRPC::ModRubyServer instance. - # - # All parameters given are by-passed to XMLRPC::BasicServer.new. - def initialize(*a) - @ap = Apache::request - super(*a) - end - - # Call this after you have added all you handlers to the server. - # - # This method processes a XML-RPC method call and sends the answer - # back to the client. - def serve - catch(:exit_serve) { - header = {} - @ap.headers_in.each {|key, value| header[key.capitalize] = value} - - length = header['Content-length'].to_i - - http_error(405, "Method Not Allowed") unless @ap.request_method == "POST" - http_error(400, "Bad Request") unless parse_content_type(header['Content-type']).first == "text/xml" - http_error(411, "Length Required") unless length > 0 - - # TODO: do we need a call to binmode? - @ap.binmode - data = @ap.read(length) - - http_error(400, "Bad Request") if data.nil? or data.bytesize != length - - http_write(process(data), 200, "Content-type" => "text/xml; charset=utf-8") - } - end - - - private - - def http_error(status, message) - err = "#{status} #{message}" - msg = <<-"MSGEND" - - - #{err} - - -

#{err}

-

Unexpected error occurred while processing XML-RPC request!

- - - MSGEND - - http_write(msg, status, "Status" => err, "Content-type" => "text/html") - throw :exit_serve # exit from the #serve method - end - - def http_write(body, status, header) - h = {} - header.each {|key, value| h[key.to_s.capitalize] = value} - h['Status'] ||= "200 OK" - h['Content-length'] ||= body.bytesize.to_s - - h.each {|key, value| @ap.headers_out[key] = value } - @ap.content_type = h["Content-type"] - @ap.status = status.to_i - @ap.send_http_header - - @ap.print body - end - -end - - # Implements a XML-RPC application, which works with Rack class RackApplication < BasicServer