In Files

  • xmlrpc/server.rb

XMLRPC::WEBrickServlet

Implements a servlet for use with WEBrick, a pure Ruby (HTTP) server framework.

require "webrick"
require "xmlrpc/server"

s = XMLRPC::WEBrickServlet.new
s.add_handler("michael.add") do |a,b|
  a + b
end

s.add_handler("michael.div") do |a,b|
  if b == 0
    raise XMLRPC::FaultException.new(1, "division by zero")
  else
    a / b
  end
end

s.set_default_handler do |name, *args|
  raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
                                   " or wrong number of parameters!")
end

httpserver = WEBrick::HTTPServer.new(:Port => 8080)
httpserver.mount("/RPC2", s)
trap("HUP") { httpserver.shutdown }   # use 1 instead of "HUP" on Windows
httpserver.start

Public Class Methods

new(*a) click to toggle source
 
               # File xmlrpc/server.rb, line 629
def initialize(*a)
  super
  require "webrick/httpstatus"
  @valid_ip = nil
end
            

Public Instance Methods

get_instance(config, *options) click to toggle source
 
               # File xmlrpc/server.rb, line 640
def get_instance(config, *options)
  # TODO: set config & options
  self
end
            
get_valid_ip() click to toggle source

Return the valid IP addresses that are allowed to connect to the server.

See also, #set_valid_ip

 
               # File xmlrpc/server.rb, line 659
def get_valid_ip
  @valid_ip
end
            
require_path_info?() click to toggle source

Deprecated from WEBrick/1.2.2, but does not break anything.

 
               # File xmlrpc/server.rb, line 636
def require_path_info?
  false
end
            
service(request, response) click to toggle source
 
               # File xmlrpc/server.rb, line 663
def service(request, response)

  if @valid_ip
    raise WEBrick::HTTPStatus::Forbidden unless @valid_ip.any? { |ip| request.peeraddr[3] =~ ip }
  end

  if request.request_method != "POST"
    raise WEBrick::HTTPStatus::MethodNotAllowed,
          "unsupported method `#{request.request_method}'."
  end

  if parse_content_type(request['Content-type']).first != "text/xml"
    raise WEBrick::HTTPStatus::BadRequest
  end

  length = (request['Content-length'] || 0).to_i

  raise WEBrick::HTTPStatus::LengthRequired unless length > 0

  data = request.body

  if data.nil? or data.bytesize != length
    raise WEBrick::HTTPStatus::BadRequest
  end

  resp = process(data)
  if resp.nil? or resp.bytesize <= 0
    raise WEBrick::HTTPStatus::InternalServerError
  end

  response.status = 200
  response['Content-Length'] = resp.bytesize
  response['Content-Type']   = "text/xml; charset=utf-8"
  response.body = resp
end
            
set_valid_ip(*ip_addr) click to toggle source

Specifies the valid IP addresses that are allowed to connect to the server.

Each IP is either a String or a Regexp.

 
               # File xmlrpc/server.rb, line 648
def set_valid_ip(*ip_addr)
  if ip_addr.size == 1 and ip_addr[0].nil?
    @valid_ip = nil
  else
    @valid_ip = ip_addr
  end
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.