Class: XMLRPC::WEBrickServlet
- Inherits:
-
BasicServer
- Object
- BasicServer
- XMLRPC::WEBrickServlet
- Defined in:
- lib/xmlrpc/server.rb,
lib/xmlrpc/server.rb
Overview
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
Direct Known Subclasses
Constant Summary
Constants inherited from BasicServer
BasicServer::ERR_MC_EXPECTED_STRUCT, BasicServer::ERR_MC_MISSING_METHNAME, BasicServer::ERR_MC_MISSING_PARAMS, BasicServer::ERR_MC_RECURSIVE_CALL, BasicServer::ERR_MC_WRONG_PARAM, BasicServer::ERR_MC_WRONG_PARAM_PARAMS, BasicServer::ERR_METHOD_MISSING, BasicServer::ERR_UNCAUGHT_EXCEPTION
Instance Method Summary collapse
- #get_instance(config, *options) ⇒ Object
-
#get_valid_ip ⇒ Object
Return the valid IP addresses that are allowed to connect to the server.
-
#initialize(*a) ⇒ WEBrickServlet
constructor
A new instance of WEBrickServlet.
-
#require_path_info? ⇒ Boolean
Deprecated from WEBrick/1.2.2, but does not break anything.
- #service(request, response) ⇒ Object
-
#set_valid_ip(*ip_addr) ⇒ Object
Specifies the valid IP addresses that are allowed to connect to the server.
Methods inherited from BasicServer
#add_handler, #add_introspection, #add_multicall, #get_default_handler, #get_service_hook, #process, #set_default_handler, #set_service_hook
Methods included from ParseContentType
Methods included from ParserWriterChooseMixin
Constructor Details
#initialize(*a) ⇒ WEBrickServlet
Returns a new instance of WEBrickServlet.
601 602 603 604 605 |
# File 'lib/xmlrpc/server.rb', line 601 def initialize(*a) super require "webrick/httpstatus" @valid_ip = nil end |
Instance Method Details
#get_instance(config, *options) ⇒ Object
612 613 614 615 |
# File 'lib/xmlrpc/server.rb', line 612 def get_instance(config, *) # TODO: set config & options self end |
#get_valid_ip ⇒ Object
Return the valid IP addresses that are allowed to connect to the server.
See also, XMLRPC::Server#set_valid_ip
631 632 633 |
# File 'lib/xmlrpc/server.rb', line 631 def get_valid_ip @valid_ip end |
#require_path_info? ⇒ Boolean
Deprecated from WEBrick/1.2.2, but does not break anything.
608 609 610 |
# File 'lib/xmlrpc/server.rb', line 608 def require_path_info? false end |
#service(request, response) ⇒ Object
635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 |
# File 'lib/xmlrpc/server.rb', line 635 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) ⇒ Object
Specifies the valid IP addresses that are allowed to connect to the server.
Each IP is either a String or a Regexp.
620 621 622 623 624 625 626 |
# File 'lib/xmlrpc/server.rb', line 620 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 |