In Files

  • xmlrpc/server.rb

XMLRPC::WEBrickServlet

XMLRPC::WEBrickServlet

Synopsis

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

Instance Methods

Public Class Methods

new(*a) click to toggle source
 
               # File xmlrpc/server.rb, line 704
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 716
def get_instance(config, *options)
  # TODO: set config & options
  self
end
            
get_valid_ip() click to toggle source
 
               # File xmlrpc/server.rb, line 729
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 712
def require_path_info?
  false 
end
            
service(request, response) click to toggle source
 
               # File xmlrpc/server.rb, line 733
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.size != length
    raise WEBrick::HTTPStatus::BadRequest
  end

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

  response.status = 200
  response['Content-Length'] = resp.size
  response['Content-Type']   = "text/xml; charset=utf-8"
  response.body = resp 
end
            
set_valid_ip(*ip_addr) click to toggle source
 
               # File xmlrpc/server.rb, line 721
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.

blog comments powered by Disqus