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.
628 629 630 631 632 |
# File 'lib/xmlrpc/server.rb', line 628 def initialize(*a) super require "webrick/httpstatus" @valid_ip = nil end |
Instance Method Details
#get_instance(config, *options) ⇒ Object
639 640 641 642 |
# File 'lib/xmlrpc/server.rb', line 639 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
658 659 660 |
# File 'lib/xmlrpc/server.rb', line 658 def get_valid_ip @valid_ip end |
#require_path_info? ⇒ Boolean
Deprecated from WEBrick/1.2.2, but does not break anything.
635 636 637 |
# File 'lib/xmlrpc/server.rb', line 635 def require_path_info? false end |
#service(request, response) ⇒ Object
662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 |
# File 'lib/xmlrpc/server.rb', line 662 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.
647 648 649 650 651 652 653 |
# File 'lib/xmlrpc/server.rb', line 647 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 |