Class: XMLRPC::WEBrickServlet
- Inherits:
-
BasicServer
- Object
- BasicServer
- XMLRPC::WEBrickServlet
- Defined in:
- lib/xmlrpc/server.rb,
lib/xmlrpc/server.rb
Overview
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
— XMLRPC::WEBrickServlet#set_valid_ip( *ip_addr )
Specifies the valid IP addresses that are allowed to connect to the server.
Each IP is either a (({String})) or a (({Regexp})).
— XMLRPC::WEBrickServlet#get_valid_ip
Return the via method ((<set_valid_ip|XMLRPC::Server#set_valid_ip>)) specified
valid IP addresses.
Description
Implements a servlet for use with WEBrick, a pure Ruby (HTTP-) server framework.
Superclass
((<XMLRPC::BasicServer>))
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
-
#initialize(*a) ⇒ WEBrickServlet
constructor
A new instance of WEBrickServlet.
-
#require_path_info? ⇒ Boolean
deprecated from WEBrick/1.2.2.
- #service(request, response) ⇒ Object
- #set_valid_ip(*ip_addr) ⇒ Object
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.
706 707 708 709 710 |
# File 'lib/xmlrpc/server.rb', line 706 def initialize(*a) super require "webrick/httpstatus" @valid_ip = nil end |
Instance Method Details
#get_instance(config, *options) ⇒ Object
718 719 720 721 |
# File 'lib/xmlrpc/server.rb', line 718 def get_instance(config, *) # TODO: set config & options self end |
#get_valid_ip ⇒ Object
731 732 733 |
# File 'lib/xmlrpc/server.rb', line 731 def get_valid_ip @valid_ip end |
#require_path_info? ⇒ Boolean
deprecated from WEBrick/1.2.2. but does not break anything.
714 715 716 |
# File 'lib/xmlrpc/server.rb', line 714 def require_path_info? false end |
#service(request, response) ⇒ Object
735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 |
# File 'lib/xmlrpc/server.rb', line 735 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) ⇒ Object
723 724 725 726 727 728 729 |
# File 'lib/xmlrpc/server.rb', line 723 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 |