class 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
Calls superclass method
XMLRPC::BasicServer::new
# File lib/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 lib/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, XMLRPC::Server#set_valid_ip
# File lib/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 lib/xmlrpc/server.rb, line 636 def require_path_info? false end
service(request, response)
click to toggle source
# File lib/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 lib/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