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.
634 635 636 637 638 |
# File 'lib/xmlrpc/server.rb', line 634 def initialize(*a) super require "webrick/httpstatus" @valid_ip = nil end |
Instance Method Details
#get_instance(config, *options) ⇒ Object
645 646 647 648 |
# File 'lib/xmlrpc/server.rb', line 645 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
664 665 666 |
# File 'lib/xmlrpc/server.rb', line 664 def get_valid_ip @valid_ip end |
#require_path_info? ⇒ Boolean
Deprecated from WEBrick/1.2.2, but does not break anything.
641 642 643 |
# File 'lib/xmlrpc/server.rb', line 641 def require_path_info? false end |
#service(request, response) ⇒ Object
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 697 698 699 700 701 702 |
# File 'lib/xmlrpc/server.rb', line 668 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.
653 654 655 656 657 658 659 |
# File 'lib/xmlrpc/server.rb', line 653 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 |